pax_global_header00006660000000000000000000000064146743105460014524gustar00rootroot0000000000000052 comment=fa5a17bea920d8abe71783ac777d2f089eb29194 phpsysinfo-3.4.4/000077500000000000000000000000001467431054600137365ustar00rootroot00000000000000phpsysinfo-3.4.4/.browserslistrc-bootstrap000066400000000000000000000001171467431054600210400ustar00rootroot00000000000000Explorer >= 8 Firefox >= 3.6 Sarafi >= 5.1 Chrome >= 25 Edge >= 12 Opera >= 11 phpsysinfo-3.4.4/.browserslistrc-dynamic000066400000000000000000000001161467431054600204460ustar00rootroot00000000000000Explorer >= 6 Firefox >= 1.5 Sarafi >= 5.1 Chrome >= 1 Edge >= 12 Opera >= 11 phpsysinfo-3.4.4/.browserslistrc-static000066400000000000000000000000061467431054600203070ustar00rootroot00000000000000>= 0% phpsysinfo-3.4.4/.github/000077500000000000000000000000001467431054600152765ustar00rootroot00000000000000phpsysinfo-3.4.4/.github/CODE_OF_CONDUCT.md000066400000000000000000000062671467431054600201100ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [phpsysinfo@yahoo.com](mailto:phpsysinfo@yahoo.com). All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org [version]: http://contributor-covenant.org/version/1/4/ phpsysinfo-3.4.4/.github/CONTRIBUTING.md000066400000000000000000000005541467431054600175330ustar00rootroot00000000000000# Contributing to phpSysInfo First time contributing to phpSysInfo? Read our [Code of Conduct](https://github.com/phpsysinfo/phpsysinfo/blob/main/CODE_OF_CONDUCT.md). ### Propose a feature If you have a great idea or want to help out, just create a pull request with your change proposal in the [phpSysInfo](https://github.com/phpsysinfo/phpsysinfo) repository. phpsysinfo-3.4.4/.github/FUNDING.yml000066400000000000000000000000631467431054600171120ustar00rootroot00000000000000custom: [https://phpsysinfo.github.io/phpsysinfo/] phpsysinfo-3.4.4/.github/ISSUE_TEMPLATE/000077500000000000000000000000001467431054600174615ustar00rootroot00000000000000phpsysinfo-3.4.4/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000017311467431054600221550ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: '' labels: '' assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - OS: [e.g. iOS] - Browser [e.g. chrome, safari] - Version [e.g. 22] **Smartphone (please complete the following information):** - Device: [e.g. iPhone6] - OS: [e.g. iOS8.1] - Browser [e.g. stock browser, safari] - Version [e.g. 22] **Additional context** Add any other context about the problem here. ***!! If you have any problems, please set `DEBUG` to true in `phpsysinfo.ini` and include any error messages in your bug report / help request !!*** phpsysinfo-3.4.4/.github/ISSUE_TEMPLATE/custom.md000066400000000000000000000001761467431054600213210ustar00rootroot00000000000000--- name: Custom issue template about: Describe this issue template's purpose here. title: '' labels: '' assignees: '' --- phpsysinfo-3.4.4/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000011231467431054600232030ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project title: '' labels: '' assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. phpsysinfo-3.4.4/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000014611467431054600211010ustar00rootroot00000000000000### Summary ### ### Types of changes ### - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) ### Code Preparation ### - [ ] Check for unused code - [ ] No unrelated changes are included - [ ] None of the changed files are reformatting only - [ ] Code is self explanatory or documented - [ ] All written text is properly translated (english language) phpsysinfo-3.4.4/.github/workflows/000077500000000000000000000000001467431054600173335ustar00rootroot00000000000000phpsysinfo-3.4.4/.github/workflows/phplint.yml000066400000000000000000000020531467431054600215340ustar00rootroot00000000000000name: PHP Linting jobs: phplint: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: PHP Lint 5.4 uses: prestashop/github-action-php-lint/5.4@v2.1 - name: PHP Lint 5.5 uses: prestashop/github-action-php-lint/5.5@v2.1 - name: PHP Lint 5.6 uses: prestashop/github-action-php-lint/5.6@v2.1 - name: PHP Lint 7.1 uses: prestashop/github-action-php-lint/7.1@v2.1 - name: PHP Lint 7.2 uses: prestashop/github-action-php-lint/7.2@v2.1 - name: PHP Lint 7.3 uses: prestashop/github-action-php-lint/7.3@v2.1 - name: PHP Lint 7.4 uses: prestashop/github-action-php-lint/7.4@v2.1 - name: PHP Lint 8.0 uses: prestashop/github-action-php-lint/8.0@v2.1 - name: PHP Lint 8.1 uses: prestashop/github-action-php-lint/8.1@v2.1 - name: PHP Lint 8.2 uses: prestashop/github-action-php-lint/8.2@v2.1 on: push: branches: - main - stable phpsysinfo-3.4.4/.gitignore000066400000000000000000000000351467431054600157240ustar00rootroot00000000000000phpsysinfo.ini composer.lock phpsysinfo-3.4.4/.htaccess000066400000000000000000000015221467431054600155340ustar00rootroot00000000000000 # Deny all requests from Apache 2.0-2.2 order deny,allow deny from all # Deny all requests from Apache 2.4+ Require all denied # Deny all requests from Apache 2.0-2.2 order deny,allow deny from all # Deny all requests from Apache 2.4+ Require all denied # Deny all requests from Apache 2.0-2.2 order deny,allow deny from all # Deny all requests from Apache 2.4+ Require all denied phpsysinfo-3.4.4/CHANGELOG.md000066400000000000000000000366631467431054600155650ustar00rootroot00000000000000Changelog of phpSysInfo ======================= http://phpsysinfo.sourceforge.net/ phpSysInfo 3.4.4 ---------------- - [ADD] Proxmox to detected distros - [NEW] HIDE_SENSORS option - [FIX] pmset - UPS support for macOS 10.15 - [UPD] IPMIcfg sensor program - pminfo - [UPD] SMART Plugin - rebuilt to show the state of any defined attributes IDs phpSysInfo 3.4.3 ---------------- - [ADD] Linux Lite, BigLinux, Linspire, Tuxedo, Armbian, Photon, RebeccaBlackOS, QuemOS, dahliaOS, openEuler, Runtu, risiOS, Nobara, Fatdog, CachyOS, Snal, Feren, Archman, Elive, RoboLinux, ExTiX, Kaisen, LXLE, Neptune, Regata, Archcraft, Kodachi, Bodhi, Siduction, Vanilla, Q4OS, Guix, XeroLinux, OpenWRT, Gnoppix, Uruk, Laclin, Clear, Sparky and Venom Linux to detected distros - [NEW] SHOW_NETWORK_BRIDGE option - [NEW] JSONP option for enable JSONP data mode - [NEW] plugin DiskLoad - show Disk Load information on WinNT phpSysInfo 3.4.2 ---------------- - [ADD] RebornOS, Parrot OS, Pop!_OS, Nitrux, Makulu, Absolute, Bluestar, Ultramarine Linux and TrueNAS to detected distros - [ADD] schabau_bootstrap template - [ADD] Raid plugin - storcli and perccli status - [NEW] Partial support for GNU Hurd - [NEW] Ability to retrieve Linux, GNU Hurd, DrayOS and FortiOS system information via SSH phpSysInfo 3.4.1 ---------------- - [ADD] Linuxfx, EndeavourOS, Garuda, Arco and Artix Linux to detected distros - [FIX] Fixed sensors voltages - [UPD] UpdateNotifier plugin - compatibility with newer data formats phpSysInfo 3.4.0 ---------------- - [ADD] Omarine, NethServer, JingOS, KDE neon, Alma, Virtuozzo, EuroLinux and Rocky Linux to detected distros - [NEW] HIDE_NETWORK_INTERFACE_REGEX option to use a regular expression in the name of a hidden network interface - [NEW] Ability to read UPS information from a file - [NEW] Virtualizer detection on Linux, Android, FreeBSD, NetBSD, OpenBSD and WinNT - [NEW] ROOTFS option to set root path of the system - [UPD] Changed all data file extensions from .txt to .tmp - [UPD] Sensor CoreTemp renamed to CpuMem and extended to read the CPU and memory supply voltages phpSysInfo 3.3.4 ---------------- - [FIX] Fixed display in static mode phpSysInfo 3.3.3 ---------------- - [ADD] Persian (Farsi) Translation fa.xml - [ADD] Croatian Translation hr.xml - [ADD] Mabox, Milis, FreeNAS, UOS and Septor to detected distros - [ADD] SMART plugin - reading contents of wmic command for WinNT - [ADD] Raid plugin - 3ware-status status - [ADD] IPMIcfg sensor program support - [NEW] Ability to read information from an external WinNT server (new WMI_HOSTNAME, WMI_USER and WMI_PASSWORD parameters) - [NEW] NvidiaSMI - sensors monitoring for Nvidia GPU - [NEW] plugin Viewer - show output of any command or file viewer.txt contents - [NEW] Memory chips information - [NEW] USB devices speed info on Linux - [NEW] IGNORE_TOTAL option - [NEW] HIDE_TOTALS option - [NEW] INCREASE_WIDTH option for frontend "dynamic" - [DEL] Removed deprecated plugin Iptables phpSysInfo 3.3.2 ---------------- - [UPD] Korean Translation ko.xml - [ADD] Exherbo and EasyOS to detected distros - [ADD] PCI devices list on SunOS - [ADD] Raid plugin - megaclisas-status status - [NEW] OS Type information - [NEW] CPU manufacturer information - [NEW] Frontend Bootstrap view in web app mode on mobile devices phpSysInfo 3.3.1 ---------------- - [UPD] bootstrap 4.3.1 - [UPD] bootstrap-ie 4.3.100 - [ADD] Indonesian Translation id.xml - [NEW] HIDE_BOOTSTRAP_LOADER option - [NEW] Uprecords plugin - DENOTE_BY_ASTERISK option - [DEL] jQuery 3.3.1 phpSysInfo 3.3.0 ---------------- - [UPD] Frontend Bootstrap3 to Bootstrap4 with IE8 and IE9 compatibility modules - [ADD] Endless, Kali, Redcore and MX Linux to detected distros - [ADD] SMART plugin - support for NVMe disks - [ADD] Uprecords plugin - SHORT_MODE option - [ADD] Raid plugin - IDRAC RAID status - [NEW] NVMe devices list on Linux - [NEW] Docker plugin - docker stats - [NEW] SORT_NETWORK_INTERFACES_LIST and SORT_SENSORS_LIST options - [NEW] IGNORE_FREE, IGNORE_USAGE and IGNORE_THRESHOLD_FS_TYPES options phpSysInfo 3.2.10 ---------------- - [UPD] jQuery 3.3.1 - [ADD] NuTyX to detected distros - [FIX] Raid plugin - fixed zpool analize phpSysInfo 3.2.9 ---------------- - [UPD] Greek Translation gr.xml - [ADD] BAT plugin - Model, Manufacturer and Serial Number information - [ADD] BAT plugin - SHOW_SERIAL and UPOWER option - [ADD] Springdale Linux to detected distros - [NEW] SHOW_DEVICES_INFOS and SHOW_DEVICES_SERIAL options - [NEW] Thinkpad - Lenovo Thinkpad sensors monitoring for Linux - [NEW] StableBit plugin - StableBit Scanner info - [NEW] HyperV plugin - Hyper-V info - [NEW] Raid plugin - software, fake, zpool and megaraid RAID status - [DEL] Removed deprecated MDStatus and DMRaid plugins phpSysInfo 3.2.8 ---------------- - [UPD] jQuery 3.2.1 - [UPD] French Translation fr.xml - [UPD] CPU usage on WinNT - [UPD] Ukrainian Translation uk.xml - [FIX] Fixed incorrect network usage on FreeBSD 11 - [FIX] Fixed healthd sensors - [FIX] Fixed displaying for code pages windows-932, windows-949 and windows-950 for WinNT - [ADD] Container Linux, PureOS, OpenELEC, LibreELEC and Lakka to detected distros - [ADD] FreeIPMI, IPMItool and IPMIutil other information - [ADD] PS plugin - CPU usage - [ADD] PS plugin - MEMORY_USAGE, CPU_USAGE and SHOW_PID1CHILD_EXPANDED options - [ADD] SMART plugin - WMI access for WinNT - [NEW] DATETIME_FORMAT option - [NEW] BLOCKS option - order of data blocks - [NEW] SHOW_NETWORK_ACTIVE_SPEED option - [NEW] Ability to generate only part of the data - [NEW] LOAD_BAR compact mode option - [NEW] PingTest plugin - [DEL] Removed deprecated IPMIinfo plugin phpSysInfo 3.2.7 ---------------- - [UPD] jQuery 3.1.1 - [UPD] Network interfaces info for WinNT - [UPD] Turkish Translation tr.xml - [UPD] Greek Translation gr.xml - [UPD] Korean Translation ko.xml - [UPD] Ukrainian Translation uk.xml - [ADD] Devuan and SalentOS to detected distros - [ADD] HIDE_NETWORK_MACADDR option - [NEW] Raspberry Pi detection on Linux phpSysInfo 3.2.6 ---------------- - [UPD] jQuery 3.1.0 and jQuery 1.12.4 - [UPD] bootstrap 3.3.7 - [UPD] Swedish Translation sv.xml - [UPD] Norwegian Translation no.xml - [ADD] NeoKylin and Void to detected distros - [ADD] schabau and lingruby template - [ADD] DMRaid plugin - FreeBSD graid info - [ADD] SNMPPInfo plugin - support for Ricoh printers - [ADD] UpdateNotifier plugin - ACCESS option - [NEW] sudo commands list - [NEW] plugin Iptables - iptables rules list phpSysInfo 3.2.5 ---------------- - [UPD] jQuery 2.2.0 and jQuery 1.12.0 - [ADD] Show network interfaces infos for NetBSD and OpenBSD - [ADD] SHOW_NETWORK_INFOS_EXPANDED option - [ADD] SHOW_MEMORY_INFOS_EXPANDED option - [ADD] QTS, OpenMamba and HipServ to detected distros - [ADD] SNMPups - monitoring UPS via SNMP - [NEW] reloading plugins also for frontend "bootstrap" - [NEW] Network speed info on WinNT, Linux, Android, Darwin, NetBSD, OpenBSD and FreeBSD - [NEW] Coretemp monitoring also on Linux - [NEW] QTSsnmp - SNMP sensors monitoring for QTS Linux - [NEW] Hwmon - sensors monitoring for Linux - [NEW] SpeedFan - sensors monitoring for WinNT - [NEW] Separate configuration sections for motherboard monitoring sensors programs - [NEW] List of IP addresses of clients authorized to run phpSysInfo 3.2.4 ---------------- - [ADD] Solus to detected distros - [ADD] Uprecords plugin - MAX_ENTRIES option - maximum number of entries to show - [UPD] Refreshing status of all plugins for dynamic mode - [UPD] bootstrap 3.3.6 - [NEW] language and template selection also for frontend "bootstrap" - [FIX] PHP 7 class Error issues phpSysInfo 3.2.3 ---------------- - [UPD] jQuery 2.1.4 and jQuery 1.11.3 - [UPD] bootstrap 3.3.5 - [NEW] I2C devices list on Android and Linux - [ADD] blue template phpSysInfo 3.2.2 ---------------- - [UPD] bootstrap 3.3.4 - [NEW] Thunderbolt (TB) devices list on Darwin - [ADD] cleansyn template - [ADD] PS plugin - support for Android - [ADD] PS plugin - SHOW_KTHREADD_EXPANDED option - [ADD] Qubes and HandyLinux to detected distros - [FIX] PS plugin - fixed display of the processes tree phpSysInfo 3.2.1 ---------------- - [UPD] bootstrap 3.3.2 - [NEW] REFRESH parameter also for frontend "bootstrap" - [ADD] pfSense to detected distros - [FIX] Percentage memory usage phpSysInfo 3.2.0 ---------------- - [UPD] jQuery 2.1.3 and jQuery 1.11.2 - [NEW] Frontend "bootstrap" with Bootstrap3 and Transparency (JSON) - [ADD] Catalan Translation ca.xml - [ADD] Mer (core of Sailfish OS) and Tizen to detected distros - [ADD] ThermalZone sensor support for Linux and Android - [ADD] Temperature, voltage and current sensor for Banana Pi - [UPD] German Translation de.xml phpSysInfo 3.1.17 ---------------- - [UPD] BAT plugin - capacity unit, cycle count, FreeBSD support - [UPD] Brazilian Portuguese Translation pt-br.xml - [ADD] Show the number of processes on Haiku - [ADD] ThermalZone sensor support for WinNT - [ADD] Tanglu to detected distros - [ADD] Android and OS X version name - [FIX] Fixed display of treetables phpSysInfo 3.1.16 ---------------- - [ADD] Show the number of processes - [ADD] Lunar and 4MLinux to detected distros phpSysInfo 3.1.15 ---------------- - [ADD] CoreOS and Pisi Linux to detected distros - [ADD] pmset - UPS support on Darwin (thanks to pelletierr) - [ADD] lspci support on Darwin - [ADD] SHOW_CPULIST_EXPANDED option - [ADD] lxc/docker detection on Linux - [ADD] ability to hide all disks and all network interfaces - [FIX] Small CSS fix - [UPD] Memory informations on Darwin systems - [UPD] BAT plugin - Darwin support phpSysInfo 3.1.14 ---------------- - [ADD] FreeIPMI sensor program support - [ADD] IPMIutil sensor program support - [ADD] PowerSoftPlus (EVER) UPS program support - [ADD] Line frequency for the UPS info - [ADD] SENSOR_EVENTS option - show events of sensors - [ADD] HIDE_RAID_DEVICES option for plugins MDStatus and DMRaid - list of RAID devices to hide - [ADD] idash template phpSysInfo 3.1.13 ---------------- - [UPD] jQuery 2.1.1 and jQuery 1.11.1 - [UPD] Romanian Translation ro.xml - [ADD] SHOW_CPUINFO_EXPANDED option - [ADD] Machine detection on WINNT, Linux, Android and Darwin systems phpSysInfo 3.1.12 ---------------- - [ADD] GoboLinux, UltimateEdition, BOSS, Canaima, VortexBox, KaOS and NixOS to detected distros - [ADD] OpenHardwareMonitor sensor program support - [ADD] Possibility to define multiple UPS_PROGRAM - [ADD] UPS_NUT_LIST option - [FIX] Fixed incorrect network usage on FreeBSD - [UPD] SMART plugin - Smartctl --device option value setting method phpSysInfo 3.1.11 ---------------- - [ADD] Add Access-Control-Allow-Origin on XML (JSON) interface for Ajax Load PR#47 - [ADD] Generations Linux and SliTaz to detected distros - [ADD] IPMI and LMSensors currents information - [ADD] Plugin IPMIInfo - added powers and currents values - [NEW] Partial support of QNX - [FIX] Reduce execution time on Linux systems when showing load average PR#47 phpSysInfo 3.1.10 ---------------- - [ADD] Zenwalk and Raspbian to detected distros - [FIX] /etc/os-release Linux distro detection phpSysInfo 3.1.9 ---------------- - [NEW] plugin DMRaid - software raid status - [ADD] Calculate, Tails, SMEServer, Semplice, SolydXK, Parsix, RedFlag, Amazon, Korora, OpenMandriva, SteamOS, ROSA Enterprise Server and ROSA Desktop Fresh to detected distros - [UPD] Rebuilding of the Linux distribution detection - [UPD] jQuery 2.1.0 and jQuery 1.11.0 phpSysInfo 3.1.8 ---------------- - [ADD] Add printers messages in the XML output - [ADD] PSStatus plugin - added optional regular expression search in the process name - [ADD] RedHatEnterpriseClient distro icon #40 - [ADD] Hebrew Translation he.xml - [FIX] BAT plugin - fix for old and new kernel /proc/acpi and /sys/class/power_supply - [UPD] LMSensors name for Mac hardware sensors phpSysInfo 3.1.7 ---------------- - [ADD] Ksplice support for Linux - [ADD] Show CPU frequency max and min for Darwin (Mac OS X) - [ADD] Show System Language and Code Page on Darwin (Mac OS X) - [ADD] Show network interfaces infos for Minix and SunOS - [ADD] SMS, gNewSense and Vector to detected distros - [ADD] LMSensors power information - [ADD] Battery installation date for the UPS info - [UPD] Network interfaces infos and filesystems infos for FreeBSD - [UPD] Updated support of SunOS - [UPD] Memory informations on Darwin systems - [UPD] BAT plugin - updated Linux support - [UPD] Updated HWSensors - OpenBSD sensor program phpSysInfo 3.1.6 ---------------- - [ADD] Porteus, Peppermint, Manjaro, Netrunner and Salix to detected distros - [ADD] Show CPU frequency max for WINNT - [ADD] Show network interfaces infos for Darwin (Mac OS X) - [UPD] SNMPPInfo plugin, ink level for some of the data - [UPD] jQuery 2.0.3 and jQuery 1.10.2 - [UPD] Russian Translation ru.xml - [UPD] BAT plugin - WINNT support - [SEC] Fix JSONP phpSysInfo 3.1.5 ---------------- - [ADD] Possibility to define multiple SENSOR_PROGRAM - [ADD] Added display of temperature and fan speed for IPMI sensor program - [ADD] openSUSE and Eisfair to detected distros - [ADD] Portuguese Translation pt-pt.xml - [FIX] Fixed incorrect display of the minimum fan speed - [FIX] Fix recovery detection of RAID arrays on debian systems #18 phpSysInfo 3.1.4 ---------------- - [ADD] Option for reading the results of functions executeProgram() and rfts() from log - [ADD] Show CPU frequency max and min for variable speed processors for Linux and Android - [ADD] Filesystem usage warning on defined threshold FS_USAGE_THRESHOLD - [UPD] BAT plugin - added temperature, condition and type of battery, Android support - [UPD] jQuery 2.0.2 and jQuery 1.10.1 phpSysInfo 3.1.3 ---------------- - [ADD] IPFire, Sabayon, PearOS, ClearOS, Frugalware, Fuduntu, Foresight, Tinycore, ALT Linux, ROSA Desktop Marathon and RedHatEnterpriseServer to detected distros - [UPD] Added "username" to filtered mount credentials - [UPD] jQuery 2.0 coexistent with jQuery 1.9.1 for old Internet Explorer browser versions (IE 6/7/8) - [FIX] proc_open() malfunction on some PHP for Android by replacing by popen() - [FIX] Run php-cs-fixer on php files (PSR-2 fixer) phpSysInfo 3.1.2 ---------------- - [ADD] Tempsensor and CPU frequency for Raspberry Pi (thanks to hawkeyexp) - [ADD] Linaro to detected distros - [ADD] Option for logging of functions executeProgram() and rfts() - [ADD] Add support of JSONP - [FIX] Incorrect display of chunk size for the plugin mdstatus for some results phpSysInfo 3.1.1 ---------------- - [ADD] SolusOS, Deepin and antiX to detected distros - [ADD] Simplified Chinese translation - [UPD] jQuery 1.9.1 phpSysInfo 3.1.0 ---------------- - [NEW] Configuration moved from config.php and subdirs of "plugins" to one file phpsysinfo.ini - [ADD] Turbolinux, Oracle Linux, CloudLinux, PCLinuxOS, StartOS, Trisquel, CRUX, Slax, Pear, Android, Zorin and elementary OS to detected distros - [ADD] Show System Language and Code Page on Linux, Haiku and WINNT - [ADD] Minor support of ReactOS - [ADD] apcupsd-cgi support (thanks to duhast) - [UPD] Plugin ipmi renamed to IPMIInfo and Update-Notifier to UpdateNotifier (to avoid name conflicts) - [UPD] Case-insensitive for most of parameters - [UPD] Detection of Mac OS X and Linux distribution - [UPD] CPU detection on Mac OS X - [FIX] Fixed UTF8 encoding for Linux - [FIX] SMART plugin doesn't display for some results - [FIX] Incorrect display of mountpoint on Mac OS X phpsysinfo-3.4.4/COPYING000066400000000000000000000431031467431054600147720ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. phpsysinfo-3.4.4/Dockerfile000066400000000000000000000014741467431054600157360ustar00rootroot00000000000000# phpSysInfo # VERSION 4 FROM ubuntu:20.04 ENV LC_ALL C.UTF-8 ARG DEBIAN_FRONTEND=noninteractive ARG http_proxy="" ARG https_proxy="" MAINTAINER phpSysInfo # Update sources RUN apt-get -q update && \ apt-get -qy install apache2 php7.4 php7.4-xml php7.4-mbstring libapache2-mod-php7.4 git pciutils && \ apt-get clean && \ rm -Rf /var/lib/apt/lists/* RUN git clone https://github.com/phpsysinfo/phpsysinfo.git /var/www/html/phpsysinfo && \ cp /var/www/html/phpsysinfo/phpsysinfo.ini.new /var/www/html/phpsysinfo/phpsysinfo.ini ENV APACHE_RUN_DIR /var/run/apache2 ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2 ENV APACHE_PID_FILE /var/run/apache2/apache2.pid CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"] EXPOSE 80 phpsysinfo-3.4.4/README.md000066400000000000000000000107161467431054600152220ustar00rootroot00000000000000phpSysInfo ============== * Copyright (c), 1999-2008, Uriah Welcome ([sf.net/users/precision](https://sf.net/users/precision)) * Copyright (c), 1999-2009, Michael Cramer ([github.com/bigmichi1](https://github.com/bigmichi1), [sf.net/users/bigmichi1](https://sf.net/users/bigmichi1)) * Copyright (c), 2007-2008, Audun Larsen ([sf.net/users/xqus](https://sf.net/users/xqus)) * Copyright (c), 2007-2015, Erkan Valentin ([github.com/rk4an](https://github.com/rk4an), [sf.net/users/jacky672](https://sf.net/users/jacky672)) * Copyright (c), 2009-2024, Mieczyslaw Nalewaj ([github.com/namiltd](https://github.com/namiltd), [sf.net/users/namiltd](https://sf.net/users/namiltd)) * Copyright (c), 2010-2012, Damien Roth ([sf.net/users/iysaak](https://sf.net/users/iysaak)) REQUIREMENTS ------------ PHP 5.1.3 or later with SimpleXML, PCRE, XML and DOM extension. #### Suggested extensions: - mbstring: Required for *nix non UTF-8 systems - com_dotnet: Required for Windows environments - xsl: Required for static mode - json: Required for bootstrap mode CURRENT TESTED PLATFORMS ------------------------ - Linux 2.6+ - FreeBSD 7+ - OpenBSD 2.8+ - NetBSD - DragonFly - HP-UX - Darwin / Mac OS / OS X / iOS - Windows 2000 / XP / 2003 / Vista / 2008 / 7 / 2011 / 2012 / 8 / 8.1 / 10 / 10 IoT / 2016 / 2019 / 2022 / 11 - Android #### Platforms currently in progress: - Haiku - Minix - SunOS - ReactOS - IBM AIX - QNX - GNU Hurd - FortiOS (via SSH) - DrayOS (via SSH) If your platform is not here try checking out the mailing list archives or the message boards on Github. INSTALLATION AND CONFIGURATION ------------------------------ #### Typical installation Just decompress and untar the source (which you should have done by now, if you're reading this...), into your webserver's document root. There is a configuration file called phpsysinfo.ini.new. If this a brand new installation, you should copy this file to phpsysinfo.ini and edit it. - make sure your `php.ini` file's `include_path` entry contains "." - make sure your `php.ini` has `safe_mode` set to 'off'. phpSysInfo require php-xml extension. Please keep in the mind that because phpSysInfo requires access to many files in `/proc` and other system binary you **MUST DISABLE** `php's safe_mode`. Please see the PHP documentation for information on how you can do this. That's it. Restart your webserver (if you changed php.ini), and voila. #### Docker container installation - `sudo docker build -t phpsysinfo github.com/phpsysinfo/phpsysinfo#main` - `sudo docker run -i -p 8080:80 -t phpsysinfo` - go to http://localhost:8080/phpsysinfo/ KNOWN PROBLEMS -------------- - phpSysInfo is not compatible with SELinux Systems - small bug under FreeBSD with memory reporting PLATFORM SPECIFIC ISSUES ------------------------ #### Windows with IIS On Windows systems we get our informations through the WMI interface. If you run phpSysInfo on the IIS webserver, phpSysInfo will not connect to the WMI interface for security reasons. At this point you MUST set an authentication mechanism for the directory in the IIS admin interface for the directory where phpSysInfo is installed. Then you will be asked for an user and a password when opening the page. At this point it is necessary to log in with an user that will be able to connect to the WMI interface. If you use the wrong user and/or password you might get an "ACCESS DENIED ERROR". SENSOR RELATED INFORMATION --------------------------- #### MBM5 Make sure you set MBM5 Interval Logging to csv and to the data directory of phpSysInfo. The file must be called MBM5. Also make sure MBM5 doesn't add symbols to the values. This is a Quick MBM5 log parser, need more csv logs to make it better. WHAT TO DO IF IT DOESN'T WORK ----------------------------- First make sure you've read this file completely, especially the "INSTALLATION AND CONFIGURATION" section. If it still doesn't work then you can: Ask for help or submit a bug on Github (https://github.com/phpsysinfo/phpsysinfo/issues) ***!! If you have any problems, please set `DEBUG` to true in `phpsysinfo.ini` and include any error messages in your bug report / help request !!*** OTHER NOTES ----------- If you have a great idea or want to help out, just create a pull request with your change proposal in the [phpSysInfo](https://github.com/phpsysinfo/phpsysinfo) repository. LICENSING --------- This program is released under the GNU Public License Version 2 or (at your option) any later version, see [COPYING](COPYING) for details. phpsysinfo-3.4.4/README_PLUGIN.md000066400000000000000000000154541467431054600163040ustar00rootroot00000000000000phpSysInfo 3.1 - http://phpsysinfo.sourceforge.net/ =================================================== Document written by Michael Cramer (bigmichi1 at sourceforge.net) !!Please read if you want to develop a plugin to understand our plugin system!! Plugins ------- Beginning with phpSysInfo 3.0, phpSysInfo can be extended by Plugins. So here is a description that a developer of a plugin must take care of. Plugins can be enabled through the `phpsysinfo.ini` in the PLUGINS variable. The name of the plugin is essential for the function of the plugin system. Lets say you write a plugin with the name 'pingtest', then this name is added to the PLUGINS variable in `phpsysinfo.ini`. And this is also then the name which is everywhere in the plugin system used, like creating the object, locate the needed files and so on. So if the name is now specified, phpSysInfo needs a special directory structure to find the needed files. The directory structure for the example `pingtest` plugin can be seen here: ``` -+ phpSysInfo root | +---+ plugins (directory in that plugins are installed) | | | +---+ pingtest (the real plugin directory, must have the same name like | | | the plugin named in PLUGINS, else it won't be found) | | | | | +---+ js (directory in which the needed JavaScript file is located, | | | | to generate the html output out of the xml) | | | # pingtest.js (the js file must have the same name, like the | | | plugin in PSI_PLUGINS with the extension js) | | +---+ css (directory in which the needed style sheet information are | | | | located, can exists, but it's up to the author) | | | # pingtest.css (the css file must have the same name, like the | | | plugin in PSI_PLUGINS with the extension css) | | +---+ lang (directory where translations for the plugin are located) | | | | | | | # en.xml (at least an english translation file must exist) | | | | | # class.pingtest.inc.php (this is the core file of the plugin, | | name must consists of 'class' + | | name from PSI_PLUGINS + '.inc.php') ``` other files or directorys can be included in the plugin directory, but then its up to the developer to include them in the plugin. So it might be possible to have a 'gfx' directory in which some pics are located that are used in the output. If the directory structure is build up, then it's time to start programming. Files ----- An example implementation is the pingtest plugin, which is shipped with phpSysInfo * en.xml - at least this file must exist to get the translation working, and the the first entry in this file is normally the headline of the plugin. So one translation migth exists everytime. Other translation files are also in the same directory like the `en.xml` file. The id's specified in the translation file SHOULD have the following look `plugin_hdd_status_001`. First we say that this is a plugin translation, then the name of plugin and at last a increasing number for each translation. Please create your id's in that way, so that other plugins don't redefine your translations. At the time of writing this, there is no check to verify the id's, so be carfull. * pingtest.css - here can all custom style sheet informations written down. The names of the id's and classes SHOULD also begin, like the translation id's, with `'plugin_' + pluginname`. If thats not the case it might be possible that another plugin is overwriting your css definitions. * class.pingtest.inc.php - this file MUST include a class with the plugin name and also this class MUST extend the 'psi_plugin' class. A check that such a class exist and also extends 'psi_plugin' will be included in the near future. And if the check fails the plugin won't be loaded. The psi_plugin class checks the existens of the js and the en.xml files. Also an extra configuration of the plugin is loaded automatically from `phpsysinfo.ini`, if present. Through the extension of the psi_plugin class there is a need to include at least two public function. These are the execute() function and the xml() function. Other functions can be exist, that depends on the plugin needs or the author of the class. The execute() function is called to get the required information that should be later included in the xml file. The xml() function is called when the xml output should be generated. This function must return a simplexml object. This object is then included in another xml at the right position or as a standalone xml. So there is no need to do some special things, only create a xml object for the plugin. * pingtest.js - this file is called when the page is loaded. A block for the plugin is automatically created. This one is a div container with the id `'plugin_'+ pluginname ("plugin_pingtest")`. The entire output must be placed in that container. There is a helper function for creating the headline: buildBlock() that can be called. This function returns a string with the html code of the headline, this code can then be appended to the plugin block. The generated headline can provide a reload icon for an ajax request. Only the click action of that icon must be created. The id of this icon is `'reload_' + pluginname + 'Table' ("reload_pingtestTable")`. Everything that then is done to get the html output out of the xml is up to the author. To get the xml document the ajax request url is `'xml.php?plugin=' + pluginname (xml.php?plugin=pingtest)`. This xml includes only the xml from the plugin nothing more. The last two executed commands should/must be the translation call and the unhide of the filled div container. The translation function that needs to be called is named plugin_traslate() with one argument, that is the pluginname like in `PSI_PLUGINS (plugin_translate("pingtest");)`. To unhide the filled container call the .show() function of it. `$("plugin_" + pluginname).show() ($("plugin_hdd_stat").show())`. FAQ --- Q: Is the plugin system ready to use? A: It can be used, but it might change slightly in the future, if there are some special needs. SUGGESTION ---------- If anybody out there has some suggestions in improving the plugin system let us know. We are looking forward to get some feedback, suggestions and patches and more. Feel free to contact us on our website: http://phpsysinfo.sourceforge.net. $Id: README_PLUGIN 463 2011-04-19 17:34:41Z namiltd $ phpsysinfo-3.4.4/SECURITY.md000066400000000000000000000006741467431054600155360ustar00rootroot00000000000000# Security Policy ## Supported Versions The [latest released version](https://github.com/phpsysinfo/phpsysinfo/releases) of phpSysInfo is supported. ## Reporting a Vulnerability Please email phpsysinfo@yahoo.com, and we will respond as quickly as possible. If the vulnerability is considered valid and accepted, a patch will be made for the latest phpSysInfo version. If the vulnerability is deemed invalid, no further action is required. phpsysinfo-3.4.4/composer.json000066400000000000000000000014371467431054600164650ustar00rootroot00000000000000{ "name": "phpsysinfo/phpsysinfo", "description": "phpSysInfo is a customizable PHP Script that parses /proc, and formats information nicely. It will display information about system facts like Uptime, CPU, Memory, PCI devices, SCSI devices, IDE devices, Network adapters, Disk usage, and more.", "license": "GPL-2.0-or-later", "homepage": "http://phpsysinfo.github.io/phpsysinfo/", "require": { "php": ">=5.1.3", "ext-simplexml": "*", "ext-pcre": "*", "ext-xml": "*", "ext-dom": "*" }, "suggest": { "ext-mbstring": "Required for *nix non UTF-8 systems", "ext-com_dotnet": "Required for Windows environments", "ext-xsl": "Required for static mode", "ext-json": "Required for bootstrap mode" } } phpsysinfo-3.4.4/data/000077500000000000000000000000001467431054600146475ustar00rootroot00000000000000phpsysinfo-3.4.4/data/.htaccess000066400000000000000000000003341467431054600164450ustar00rootroot00000000000000# Deny all requests from Apache 2.0-2.2 order deny,allow deny from all # Deny all requests from Apache 2.4+ Require all denied phpsysinfo-3.4.4/data/ModelTranslation.txt000066400000000000000000000276171467431054600207040ustar00rootroot00000000000000ADP2,1:Developer Transition Kit:Intel Pentium 4 iMac,1:iMac G3:PowerPC 750 (G3) iMac1,1:iMac G3*:PowerPC 750 (G3) iMac4,1:iMac Core Duo:Intel Core Duo T2400/T2500 iMac4,2:iMac Core Duo:Intel Core Duo T2400 iMac5,1:iMac Core 2 Duo:Intel Core 2 Duo T7200/T7400/T7600 iMac5,2:iMac Core 2 Duo:Intel Core 2 Duo T5600 iMac6,1:iMac Core 2 Duo:Intel Core 2 Duo T7400/T7600 iMac7,1:iMac Core 2 Duo/Extreme:Intel Core 2 Duo T7300/T7700/X7900 iMac8,1:iMac Core 2 Duo:Intel Core 2 Duo E8135/E8335/E8235/E8435 iMac9,1:iMac Core 2 Duo:Intel Core 2 Duo P7350/P7550/E8135/E8335/E8435 iMac10,1:iMac Core 2 Duo:Intel Core 2 Duo E7600/E8600 iMac10,2:iMac Core 2 Duo*:Intel Core 2 Duo E7500/E7600/E8600 iMac11,1:iMac Core i5/i7:Intel Core I5-750/I7-860 iMac11,2:iMac Core i3/i5:Intel Core I3-540/I3-550/I5-680 iMac11,3:iMac Core i3/i5/i7:Intel Core I3-550/I5-760/I5-680/I7-870 iMac12,1:iMac Core i3/i5/i7:Intel Core I3-2100/I5-2400S/I5-2500S/I5-2600S iMac12,2:iMac Core i5/i7:Intel Core I5-2400/I5-2500S/I7-2600 iMac13,1:iMac Core i3/i5/i7:Intel Core I3-3225/I5-3335S/I5-3470S/I7-3770S iMac13,2:iMac Core i5/i7:Intel Core I5-3470/I5-3470S/I7-3770 iMac14,1:iMac Core i5:Intel Core I5-4570R iMac14,2:iMac Core i5/i7:Intel Core I5-4570/I5-4670/I7-4771 iMac14,3:iMac Core i5/i7:Intel Core I5-4570S/I7-4770S iMac14,4:iMac Core i5:Intel Core I5-4260U iMac15,1:iMac Core i5/i7:Intel Core I5-4590/I5-4690/I7-4790K iMac16,1:iMac Core i5:Intel Core I5-5250U iMac16,2:iMac Core i5/i7:Intel Core I5-5575R/I5-5675R/I7-5775R iMac17,1:iMac Core i5/i7:Intel Core I5-6500/I5-6600/I7-6700K iMac18,1:iMac Core i5:Intel Core I5-7360U iMac18,2:iMac Core i5/i7:Intel Core I5-7400/I5-7500/I7-7700 iMac18,3:iMac Core i5/i7:Intel Core I5-7500/I5-7600/I5-7600K/I7-7700K iMac19,1:iMac Core i5/i9:Intel Core I5-8500/I5-8600/I5-9600K/I9-9900K iMac19,2:iMac Core i3/i5/i7:Intel Core I3-8100/I5-8500/I7-8700 iMac20,1:iMac Core i5/i7/i9:Intel Core I5-10500/I5-10600/I7-10700K/I9-10910 iMac20,2:iMac Core i7/i9:Intel Core I7-10700K/I9-10910 iMac21,1:MacBook Air M1:Apple M1 iMac21,2:MacBook Air M1:Apple M1 M43ADP1,1:Development Mac Pro:Intel Xeon X5340 Mac13,1:Mac Studio M1 Max:Apple M1 Max Mac13,2:Mac Studio M1 Ultra:Apple M1 Ultra Mac14,2:MacBook Air M2:Apple M2 Mac14,3:Mac mini M2:Apple M2 Mac14,5:MacBook Pro M2 Max:Apple M2 Max Mac14,6:MacBook Pro M2 Max:Apple M2 Max Mac14,7:MacBook Pro M2:Apple M2 Mac14,8:Mac Pro M2 Ultra:Apple M2 Ultra Mac14,9:MacBook Pro M2 Pro:Apple M2 Pro Mac14,10:MacBook Pro M2 Pro:Apple M2 Pro Mac14,12:Mac mini M2 Pro:Apple M2 Pro Mac14,13:Mac Studio M2 Max:Apple M2 Max Mac14,14:Mac Studio M2 Ultra:Apple M2 Ultra Mac14,15:MacBook Air 15" M2:Apple M2 Mac15,3:MacBook Pro 14" M3:Apple M3 Mac15,4:iMac 24" M3:Apple M3 Mac15,5:iMac 24" M3:Apple M3 Mac15,6:MacBook Pro 14" M3 Pro:Apple M3 Pro Mac15,7:MacBook Pro 16" M3 Pro:Apple M3 Pro Mac15,8:MacBook Pro 14" M3 Max:Apple M3 Max Mac15,9:MacBook Pro 16" M3 Max:Apple M3 Max Mac15,10:MacBook Pro 14" M3 Max:Apple M3 Max Mac15,11:MacBook Pro 16" M3 Max:Apple M3 Max MacBook1,1:MacBook Core Duo:Intel Core Duo T2400/T2500 MacBook2,1:MacBook Core 2 Duo:Intel Core 2 Duo T5600/T7200/T7400 MacBook3,1:MacBook Core 2 Duo:Intel Core 2 Duo T7300/T7500 MacBook4,1:MacBook Core 2 Duo:Intel Core 2 Duo T8100/T8300 MacBook5,1:MacBook Core 2 Duo:Intel Core 2 Duo P7350/P8600 MacBook5,2:MacBook Core 2 Duo:Intel Core 2 Duo P7350/P7450 MacBook6,1:MacBook Core 2 Duo:Intel Core 2 Duo P7550 MacBook7,1:MacBook Core 2 Duo:Intel Core 2 Duo P8600 MacBook8,1:MacBook Core M:Intel Core M-5Y31/M-5Y51/M-5Y71 MacBook9,1:MacBook Core m3/m5/m7:Intel Core M3-6Y30/M5-6Y54/M7-6Y75 MacBook10,1:MacBook Core m3/i5/i7:Intel Core M3-7Y32/i5-7Y54/i7-7Y75 MacBookAir1,1:MacBook Air Core 2 Duo:Intel Core 2 Duo P7500/P7700 MacBookAir2,1:MacBook Air Core 2 Duo:Intel Core 2 Duo SL9300/SL9400/SL9600 MacBookAir3,1:MacBook Air Core 2 Duo:Intel Core 2 Duo SU9400/SU9600 MacBookAir3,2:MacBook Air Core 2 Duo:Intel Core 2 Duo SL9400/SL9600 MacBookAir4,1:MacBook Air Core i5/i7:Intel Core I5-2467M/I7-2677M MacBookAir4,2:MacBook Air Core i5/i7:Intel Core I5-2467M/I5-2557M/I7-2677M MacBookAir5,1:MacBook Air Core i5/i7:Intel Core I5-3317U/I7-3667U MacBookAir5,2:MacBook Air Core i5/i7:Intel Core I5-3427U/I7-3667U MacBookAir6,1:MacBook Air Core i5/i7:Intel Core I5-4250U/I5-4260U/I7-4650U MacBookAir6,2:MacBook Air Core i5/i7:Intel Core I5-4250U/I5-4260U/I7-4650U MacBookAir7,1:MacBook Air Core i5/i7:Intel Core I5-5250U/I7-5650U MacBookAir7,2:MacBook Air Core i5/i7:Intel Core I5-5250U/I7-5650U MacBookAir8,1:MacBook Air Core i5:Intel Core I5-8210Y MacBookAir9,1:MacBook Air Core i3/i5/i7:Intel Core I3-1000NG4/I5-1030NG7/I7-1060NG7 MacBookAir10,1:MacBook Air M1:Apple M1 MacBookPro1,1:MacBook Pro Core Duo:Intel Core Duo L2400/T2400/T2500/T2600 MacBookPro1,2:MacBook Pro Core Duo:Intel Core Duo T2600 MacBookPro2,1:MacBook Pro Core 2 Duo:Intel Core 2 Duo T7600 MacBookPro2,2:MacBook Pro Core 2 Duo:Intel Core 2 Duo T7400/T7600 MacBookPro3,1:MacBook Pro Core 2 Duo:Intel Core 2 Duo T7500/T7700/T7800 MacBookPro4,1:MacBook Pro Core 2 Duo:Intel Core 2 Duo T8300/T9300/T9500 MacBookPro5,1:MacBook Pro Core 2 Duo:Intel Core 2 Duo P8600/T9400/T9550/T9600/T9800 MacBookPro5,2:MacBook Pro Core 2 Duo:Intel Core 2 Duo T9550/T9600/T9800/T9900 MacBookPro5,3:MacBook Pro Core 2 Duo:Intel Core 2 Duo P8800/T9600/T9900 MacBookPro5,4:MacBook Pro Core 2 Duo:Intel Core 2 Duo P8700 MacBookPro5,5:MacBook Pro Core 2 Duo:Intel Core 2 Duo P8400/P8700 MacBookPro6,1:MacBook Pro Core i5/i7:Intel Core I5-540M/I7-620M/I7-640M MacBookPro6,2:MacBook Pro Core i5/i7:Intel Core I5-520M/I5-540M/I7-620M/I7-640M MacBookPro7,1:MacBook Pro Core 2 Duo:Intel Core 2 Duo P8600/P8800 MacBookPro8,1:MacBook Pro Core i5/i7:Intel Core I5-2415M/I5-2435M/I7-2620M/I7-2640M MacBookPro8,2:MacBook Pro Core i7:Intel Core I7-2635QM/I7-2720QM/I7-2675QM/I7-2820QM/I7-2760QM/I7-2860QM MacBookPro8,3:MacBook Pro Core i7:Intel Core I7-2720QM/I7-2820QM/I7-2760QM/I7-2860QM MacBookPro9,1:MacBook Pro Core i7:Intel Core I7-3615QM/I7-3720QM/I7-3820QM MacBookPro9,2:MacBook Pro Core i5/i7:Intel Core I5-3210M/I7-3520M MacBookPro10,1:MacBook Pro Core i7:Intel Core I7-3615QM/I7-3635QM/I7-3720QM/I7-3740QM/I7-3820QM/I7-3840QM MacBookPro10,2:MacBook Pro Core i5/i7:Intel Core I5-3210M/I5-3230M/I7-3520M/I7-3540M MacBookPro11,1:MacBook Pro Core i5/i7:Intel Core I5-4258U/I5-4278U/I5-4288U/I5-4308U/I7-4558U/I5-4578U MacBookPro11,2:MacBook Pro Core i7:Intel Core I7-4750HQ/I7-4770HQ/I7-4850HQ/I7-4870HQ/I7-4960HQ/I7-4980HQ MacBookPro11,3:MacBook Pro Core i7:Intel Core I7-4850HQ/I7-4870HQ/I7-4960HQ/I7-4980HQ MacBookPro11,4:MacBook Pro Core i7:Intel Core I7-4770HQ/I7-4870HQ/I7-4980HQ MacBookPro11,5:MacBook Pro Core i7:Intel Core I7-4870HQ/I7-4980HQ MacBookPro12,1:MacBook Pro Core i5/i7:Intel Core I5-5257U/I5-5287U/I7-5557U MacBookPro13,1:MacBook Pro Core i5/i7:Intel Core I5-6360U/I7-6660U MacBookPro13,2:MacBook Pro Core i5/i7:Intel Core I5-6267U/I5-6287U/I7-6567U MacBookPro13,3:MacBook Pro Core i7:Intel Core I7-6700HQ/I7-6820HQ/I7-6920HQ MacBookPro14,1:MacBook Pro Core i5/i7:Intel Core I5-7360U/I7-7660U MacBookPro14,2:MacBook Pro Core i5/i7:Intel Core I5-7267U/I5-7287U/I7-7567U MacBookPro14,3:MacBook Pro Core i7:Intel Core I7-7700HQ/I7-7820HQ/I7-7920HQ MacBookPro15,1:MacBook Pro Core i7/i9:Intel Core I7-8750H/I7-8850H/I7-9750H/I9-8950HK/I9-9880H/I9-9980HK MacBookPro15,2:MacBook Pro Core i5/i7:Intel Core I5-8259U/I5-8279U/I7-8559U/I7-8569U MacBookPro15,3:MacBook Pro Core i7/i9:Intel Core I7-8850H/I9-8950HK/I9-9880H/I9-9980HK MacBookPro15,4:MacBook Pro Core i5/i7:Intel Core I5-8257U/I7-8557U MacBookPro16,1:MacBook Pro Core i7/i9:Intel Core I7-9750H/I9-9880H/I9-9980HK MacBookPro16,2:MacBook Pro Core i5/i7:Intel Core I5-1038NG7/I7-1068NG7 MacBookPro16,3:MacBook Pro Core i5/i7:Intel Core I5-8257U/I7-8557U MacBookPro16,4:MacBook Pro Core i7/i9:Intel Core I7-9750H/I9-9880H/I9-9980HK MacBookPro17,1:MacBook Pro M1:Apple M1 MacBookPro18,1:MacBook Pro M1 Pro:Apple M1 Pro MacBookPro18,2:MacBook Pro M1 Max:Apple M1 Max MacBookPro18,3:MacBook Pro M1 Pro:Apple M1 Pro MacBookPro18,4:MacBook Pro M1 Max:Apple M1 Max Macmini1,1:Mac mini Core Solo/Duo:Intel Core Duo T2300/T2400 Solo T1200 Macmini2,1:Mac mini Core 2 Duo:Intel Core 2 Duo T5600/T7200 Macmini3,1:Mac mini Core 2 Duo:Intel Core 2 Duo P7350/P8400/P7550/P8700/P8800 Macmini4,1:Mac mini Core 2 Duo:Intel Core 2 Duo P8600/P8800 Macmini5,1:Mac mini Core i5:Intel Core I5-2415M Macmini5,2:Mac mini Core i5/i7:Intel Core I5-2520M/I7-2620M Macmini5,3:Mac mini Core i7:Intel Core I7-2635QM Macmini6,1:Mac mini Core i5:Intel Core I5-3210M Macmini6,2:Mac mini Core i7:Intel Core I7-3615QM/I7-3720QM Macmini7,1:Mac mini Core i5/i7:Intel Core I5-4260U/I5-4278U/I5-4308U/I7-4578U Macmini8,1:Mac mini Core i3/i5/i7:Intel Core I3-8100/I5-8500B/I7-8700B Macmini9,1:Mac mini M1:Apple M1 MacPro1,1:Mac Pro Quad Core:Intel Xeon 5130/5150/5160 MacPro2,1:Mac Pro Eight Core:Intel Xeon X5365 MacPro3,1:Mac Pro Quad/Eight Core:Intel Xeon E5462/E5472/X5482 MacPro4,1:Mac Pro Quad/Eight Core:Intel Xeon E5520/E5550/X5570/W3520/W3540/W3580 MacPro5,1:Mac Pro Quad/Six/Eight/Twelve Core:Intel Xeon E5620/E5645/W3530/W3565/W3680/X5650/X5670/X5675 MacPro6,1:Mac Pro Quad/Six/Eight/Twelve Core:Intel Xeon E5-1620v2/E5-1650v2/E5-1680v2/E5-2697v2 MacPro7,1:Mac Pro Eight/12/16/24/28 Core:Intel Xeon W-3223/W-3235/W-3245/W-3265M/W-3275M PowerBook1,1:PowerBook G3:PowerPC 750 (G3) PowerBook2,1:iBook G3:PowerPC 750 (G3) PowerBook2,2:iBook G3:PowerPC 750cx (G3) PowerBook2,3:iBook G3*:PowerPC 750cx (G3) PowerBook2,4:iBook G3*:PowerPC 750cx (G3) PowerBook3,1:PowerBook G3:PowerPC 750 (G3) PowerBook3,2:PowerBook G4:PowerPC 7410 (G4) PowerBook3,3:PowerBook G4:PowerPC 7440 (G4) PowerBook3,4:PowerBook G4:PowerPC 7451 (G4) PowerBook3,5:PowerBook G4:PowerPC 7455 (G4) PowerBook4,1:iBook G3:PowerPC 750cx (G3) PowerBook4,2:iBook G3 600:PowerPC 750cx (G3) PowerBook4,3:iBook G3:PowerPC 750fx (G3) PowerBook5,1:PowerBook G4:PowerPC 7455 (G4) PowerBook5,2:PowerBook G4:PowerPC 7447 (G4) PowerBook5,3:PowerBook G4:PowerPC 7447 (G4) PowerBook5,4:PowerBook G4:PowerPC 7447a (G4) PowerBook5,5:PowerBook G4:PowerPC 7447a (G4) PowerBook5,6:PowerBook G4:PowerPC 7447a (G4) PowerBook5,7:PowerBook G4:PowerPC 7447a (G4) PowerBook5,8:PowerBook G4:PowerPC 7447a (G4) PowerBook5,9:PowerBook G4:PowerPC 7447a (G4) PowerBook6,1:PowerBook G4:PowerPC 7455 (G4) PowerBook6,2:PowerBook G4:PowerPC 7447 (G4) PowerBook6,3:iBook G4:PowerPC 7457 (G4) PowerBook6,4:PowerBook G4:PowerPC 7447a (G4) PowerBook6,5:iBook G4:PowerPC 7447a (G4) PowerBook6,7:iBook G4:PowerPC 7447a (G4) PowerBook6,8:PowerBook G4:PowerPC 7447a (G4) PowerMac1,1:Power Macintosh/Mac Server G3:PowerPC 750 (G3) PowerMac1,2:Power Macintosh G4:PowerPC 7400 (G4) PowerMac2,1:iMac G3:PowerPC 750 (G3) PowerMac2,2:iMac G3:PowerPC 750 (G3) PowerMac3,1:Power Macintosh/Mac Server G4:PowerPC 7400 (G4) PowerMac3,2:Power Macintosh/Mac Server G4*:PowerPC 7400 (G4) PowerMac3,3:Power Macintosh/Mac Server G4:PowerPC 7400 (G4) PowerMac3,4:Power Macintosh/Mac Server G4:PowerPC 7410 (G4) PowerMac3,5:Power Macintosh/Mac Server G4:PowerPC 7450/7455 (G4) PowerMac3,6:Power Macintosh/Mac Server G4:PowerPC 7455 (G4) PowerMac4,1:iMac G3:PowerPC 750/750cx (G3) PowerMac4,2:iMac G4:PowerPC 7441/7445 (G4) PowerMac4,4:eMac G4:PowerPC 7441/7445 (G4) PowerMac4,5:iMac G4:PowerPC 7445 (G4) PowerMac5,1:Power Macintosh G4 Cube:PowerPC 7400 (G4) PowerMac6,1:iMac G4:PowerPC 7445 (G4) PowerMac6,3:iMac G4:PowerPC 7445 (G4) PowerMac6,4:eMac G4:PowerPC 7447a (G4) PowerMac7,2:Power Macintosh G5:PowerPC 970 (G5) PowerMac7,3:Power Macintosh G5:PowerPC 970fx (G5) PowerMac8,1:iMac G5:PowerPC 970 (G5) PowerMac8,2:iMac G5:PowerPC 970 (G5) PowerMac9,1:Power Macintosh G5:PowerPC 970fx (G5) PowerMac10,1:Mac mini G4:PowerPC 7447a (G4) PowerMac10,2:Mac mini G4:PowerPC 7447a (G4) PowerMac11,2:Power Macintosh G5 Dual/Quad Core:PowerPC 970MP (G5) PowerMac12,1:iMac G5:PowerPC 970fx (G5) RackMac1,1:Xserve G4:PowerPC 7455 (G4) RackMac1,2:Xserve G4:PowerPC 7455 (G4) RackMac3,1:Xserve G5:PowerPC 970fx (G5) Xserve1,1:Xserve Xeon Quad Core:Intel Xeon 5130/5150/5160 Xserve2,1:Xserve Xeon Quad/Eight Core:Intel Xeon E5462/E5472 Xserve3,1:Xserve Xeon Nehalem Quad/Eight Core:Intel Xeon E5520/E5550/E5570 phpsysinfo-3.4.4/data/cpus.ini000066400000000000000000000116311467431054600163240ustar00rootroot00000000000000[cpu] ; Qemu 0x0,0x51="QEMU TCG" ; Ampere Computing ;0xc0 ; ARM Limited 0x41,0x810="ARM810" 0x41,0x920="ARM920" 0x41,0x922="ARM922" 0x41,0x926="ARM926" 0x41,0x940="ARM940" 0x41,0x946="ARM946" 0x41,0x966="ARM966" 0x41,0xa20="ARM1020" 0x41,0xa22="ARM1022" 0x41,0xa26="ARM1026" 0x41,0xb02="ARM11 MPCore" 0x41,0xb36="ARM1136" 0x41,0xb56="ARM1156" 0x41,0xb76="ARM1176" 0x41,0xc05="Cortex-A5" 0x41,0xc07="Cortex-A7" 0x41,0xc08="Cortex-A8" 0x41,0xc09="Cortex-A9" 0x41,0xc0d="Cortex-A12" 0x41,0xc0f="Cortex-A15" 0x41,0xc0e="Cortex-A17" 0x41,0xc14="Cortex-R4" 0x41,0xc15="Cortex-R5" 0x41,0xc17="Cortex-R7" 0x41,0xc18="Cortex-R8" 0x41,0xc20="Cortex-M0" 0x41,0xc21="Cortex-M1" 0x41,0xc23="Cortex-M3" 0x41,0xc24="Cortex-M4" 0x41,0xc20="Cortex-M7" 0x41,0xc60="Cortex-M0+" 0x41,0xd01="Cortex-A32" 0x41,0xd02="Cortex-A34" 0x41,0xd03="Cortex-A53" 0x41,0xd04="Cortex-A35" 0x41,0xd05="Cortex-A55" 0x41,0xd06="Cortex-A65" 0x41,0xd07="Cortex-A57" 0x41,0xd08="Cortex-A72" 0x41,0xd09="Cortex-A73" 0x41,0xd0a="Cortex-A75" 0x41,0xd0b="Cortex-A76" 0x41,0xd0c="Neoverse-N1" 0x41,0xd0d="Cortex-A77" 0x41,0xd0e="Cortex-A76AE" 0x41,0xd13="Cortex-R52" 0x41,0xd15="Cortex-R82" 0x41,0xd20="Cortex-M23" 0x41,0xd21="Cortex-M33" 0x41,0xd22="Cortex-M55" 0x41,0xd23="Cortex-M85" 0x41,0xd40="Neoverse-V1" 0x41,0xd41="Cortex-A78" 0x41,0xd42="Cortex-A78AE" 0x41,0xd43="Cortex-A65AE" 0x41,0xd44="Cortex-X1" 0x41,0xd46="Cortex-A510" 0x41,0xd47="Cortex-A710" 0x41,0xd48="Cortex-X2" 0x41,0xd49="Neoverse-N2" 0x41,0xd4a="Neoverse-E1" 0x41,0xd4b="Cortex-A78C" 0x41,0xd4c="Cortex-X1C" 0x41,0xd4d="Cortex-A715" 0x41,0xd4e="Cortex-X3" 0x41,0xd4f="Neoverse-V2" 0x41,0xd80="Cortex-A520" 0x41,0xd81="Cortex-A720" 0x41,0xd82="Cortex-X4" 0x41,0xd83="Neoverse-V3AE" 0x41,0xd84="Neoverse-V3" 0x41,0xd85="Cortex-X925" 0x41,0xd87="Cortex-A725" 0x41,0xd8e="Neoverse-N3" ; Broadcom Corporation - ('B') cores. 0x42,0xf="Brahma B15" 0x42,0x100="Brahma B53" 0x42,0x516="Vulcan/ThunderX2 T99p1" ; Cavium Inc. - ('C') cores. 0x43,0xa0="ThunderX" 0x43,0xa1="ThunderX T88" 0x43,0xa2="Octeon TX T81" 0x43,0xa3="Octeon TX T83" 0x43,0xaf="ThunderX2 T99" 0x43,0xb0="Octeon TX2" 0x43,0xb1="Octeon TX2 T98" 0x43,0xb2="Octeon TX2 T93/T96" 0x43,0xb3="Octeon TX2 F95" 0x43,0xb4="Octeon TX2 F95N" 0x43,0xb5="Octeon TX2 F95MM" 0x43,0xb8="ThunderX3 T110" ; DEC - Digital Equipment Corporation 0x44,0xa10="SA110" 0x44,0xa11="SA1100" ; Fujitsu Ltd. 0x46,0x1="A64FX" ; HiSilicon Technologies, Inc. 0x48,0xd01="TSV110" 0x48,0xd40="Cortex-A76" ; Infineon Technologies AG ;0x49 ; Motorola or Freescale Semiconductor Inc. ;0x4d ; NVIDIA Corporation 0x4e,0x0="Denver" 0x4e,0x3="Denver 2" ; APM - Applied Micro Circuits Corporation - ('P') cores. 0x50,0x0="xgene1" ; Qualcomm Inc. - ('Q') cores. 0x51,0xf="Scorpion" 0x51,0x2d="Scorpion" 0x51,0x4d="Krait" 0x51,0x6f="Krait" 0x51,0x201="Kryo Silver" 0x51,0x205="Kryo Gold" 0x51,0x211="Kryo Silver" 0x51,0x800="Kryo 2xx Gold (Cortex-A73)" 0x51,0x801="Kryo 2xx Silver (Cortex-A53)" 0x51,0x802="Kryo 3xx Gold (Cortex-A75)" 0x51,0x803="Kryo 3xx Silver (Cortex-A55)" 0x51,0x804="Kryo 4xx Gold (Cortex-A76)" 0x51,0x805="Kryo 4xx/5xx Silver (Cortex-A55)" 0x51,0xc00="Falkor" 0x51,0xc01="Saphira" ; Samsung ('S') cores. 0x53,0x1="Exynos M1/M2 Mongoose" 0x53,0x1,0x1="Exynos M1 Mongoose" 0x53,0x1,0x4="Exynos M2 Mongoose" 0x53,0x2="Exynos M3 Mongoose" 0x53,0x3="Exynos M4 Mongoose" 0x53,0x4="Exynos M5 Mongoose" ; Texas Instruments 0x54,0x925="TI925" ; Marvell Semiconductor Inc. 0x56,0x131="Feroceon 88FR131" 0x56,0x581="PJ4/PJ4B" 0x56,0x584="PJ4B-MP/PJ4C" ; Apple Inc. 0x61,0x1="Cyclone" 0x61,0x2="Typhoon" 0x61,0x3="Typhoon/Capri" 0x61,0x4="Twister" 0x61,0x5="Twister/Elba/Malta" 0x61,0x6="Hurricane" 0x61,0x7="Hurricane/Myst" ; Faraday 0x66,0x526="FA526" 0x66,0x626="FA626" ; HXT 0x68,0x0="Phecda" ;Intel Corporation/Marvell 0x69,0x200="i80200" 0x69,0x210="PXA250A" 0x69,0x212="PXA210A" 0x69,0x242="i80321-400" 0x69,0x243="i80321-600" 0x69,0x290="PXA250B/PXA26x" 0x69,0x292="PXA210B" 0x69,0x2c2="i80321-400-B0" 0x69,0x2c3="i80321-600-B0" 0x69,0x2d0="PXA250C/PXA255/PXA26x" 0x69,0x2d2="PXA210C" 0x69,0x411="PXA27x" 0x69,0x41c="IPX425-533" 0x69,0x41d="IPX425-400" 0x69,0x41f="IPX425-266" 0x69,0x682="PXA32x" 0x69,0x683="PXA930/PXA935" 0x69,0x688="PXA30x" 0x69,0x689="PXA31x" 0x69,0xb11="SA1110" 0x69,0xc12="IPX1200" [manufacturer] AMDisbetter="AMD" AuthenticAMD="AMD" CentaurHauls="IDT WinChip/Centaur" CyrixInstead="Cyrix/STMicro./IBM" HygonGenuine="Hygon" GenuineIntel="Intel" TransmetaCPU="Transmeta" GenuineTMx86="Transmeta" GeodebyNSC="National Semiconductor" NexGenDriven="NexGen" RiseRiseRise="Rise" SiSSiSSiS="SiS" Shanghai="Zhaoxin" UMCUMCUMC="UMC" VIAVIAVIA="VIA" Vortex86SoC="DM&P Vortex" E2KMACHINE="MCST Elbrus" GenuineAO486="ao486 soft CPU" bhyvebhyve="bhyve" KVMKVMKVM="KVM" MicrosoftHv="Microsoft Hyper-V" lrpepyhvr="Parallels" VMwareVMware="VMware" XenVMMXenVMM="Xen HVM" ACRNACRNACRN="Project ACRN" TCGTCGTCGTCG="QEMU" QNXQVMBSQG="QNX Hypervisor" UnisysSpar64="Unisys sPar" VBoxVBoxVBox="Oracle VM VirtualBox" IBM/S390="IBM" phpsysinfo-3.4.4/data/distros.ini000066400000000000000000001117551467431054600170510ustar00rootroot00000000000000; linux-distros.ini - Defines known linux distros for phpSysInfo. ; http://phpsysinfo.sourceforge.net/ ; $Id: distros.ini 709 2012-12-05 11:20:40Z namiltd $ ; [solaris sunos] Image = "Solaris.png" [oraclesolaris sunos] Image = "Solaris.png" [smartos sunos] Image = "SmartOS.png" [opensolaris sunos] Image = "OpenSolaris.png" [openindiana sunos] Image = "OpenIndiana.png" [omnios sunos] Image = "OmniOS.png" [openstorage sunos] Image = "NexentaStor.png" Name = "NexentaStor" [openwrt] Image = "OpenWRT.png" Name = "OpenWrt" Mode = "Detection" Files = "/etc/openwrt_release" Files2 = "/etc/openwrt_release" ;detected in "/etc/os-release" [vmware photon os] Image = "Photon.png" Files = "/etc/photon-release" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" [guix system] Image = "Guix.png" ;detected in "/etc/os-release" [gobolinux] Image = "Gobo.png" Name = "GoboLinux" Files = "/etc/GoboLinuxVersion" [slitaz] Image = "SliTaz.png" Name = "SliTaz" Files = "/etc/slitaz-release" [eisfair] Image = "Eisfair.png" ;detected in "/etc/os-release" [eisfair project] Image = "Eisfair.png" Files = "/etc/eisfair-system" Files2 = "/etc/version" ;detected in "lsb_release -a" [tinycore] Image = "TinyCore.png" Name = "Tiny Core Linux" Files = "/usr/share/doc/tc/release.txt" [venom linux] Image = "Venom.png" Name = "Venom Linux" Files = "/etc/venom-release" ;detected in "/etc/os-release" [linux plop] Image = "Plop.png" ;detected in "/etc/os-release" [frugalware] Image = "Frugalware.png" Files = "/etc/frugalware-release" ;detected in "/etc/os-release" [rbos] Image = "RebeccaBlackOS.png" ;detected in "lsb_release -a" ;wrong in "/etc/debian_version" Debian [quemos] Image = "QuemOS.png" ;detected in "lsb_release -a" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [rebeccablackos] Image = "RebeccaBlackOS.png" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [proxmox] Image = "Proxmox.png" Name = "Proxmox" Files = "/usr/bin/pveversion" Mode = "Execute" ;wrong in "/etc/os-release" Debian GNU/Linux ;wrong in "/etc/debian_version" Debian [q4os] Image = "Q4OS.png" Name = "Q4OS" Files = "/etc/q4os_version" ;wrong in "lsb_release -a" Debian ;wrong in "/etc/os-release" Debian GNU/Linux ;wrong in "/etc/debian_version" Debian [siduction] Image = "Siduction.png" Files = "/etc/siduction-version" ;wrong in "lsb_release -a" Debian ;wrong in "/etc/os-release" Debian GNU/Linux ;wrong in "/etc/debian_version" Debian [sparkylinux] Image = "Sparky.png" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [sparky] Image = "Sparky.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/debian_version" Debian [regata os] Image = "Regata.png" ;detected in "lsb_release -a" ;detected in "/etc/os-release" [tuxedo] Image = "Tuxedo.png" Files = "/etc/tuxedo-os-version" ;detected in "lsb_release -a" ;wrong in "/etc/debian_version" Debian [ubuntu tuxedo] Image = "Tuxedo.png" ;detected in "/etc/lsb-release" [tuxedo os] Image = "Tuxedo.png" ;detected in "/etc/os-release" [ubuntu linspire] Image = "Linspire.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [ubuntu lxle] Image = "LXLE.png" ;detected in "lsb_release -a" ;wrong in "/etc/lsb-release" Ubuntu ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [ubuntu linux lite] Image = "LinuxLite.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [ubuntu bodhi] Image = "Bodhi.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [ubuntu linux kodachi] Image = "Kodachi.png" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [ubuntu kodachi] Image = "Kodachi.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/debian_version" Debian [robolinux] Image = "RoboLinux.png" ;detected in "/etc/lsb-release" ;wrong in "/etc/debian_version" Debian [ubuntu robolinux] Image = "RoboLinux.png" ;detected in "lsb_release -a" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [feren os classic] Image = "Feren.png" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [ubuntu feren] Image = "Feren.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/debian_version" Debian [debian gnu/linux armbian] Image = "Armbian.png" Name = "Armbian" Mode = "Detection" Files = "/etc/armbian-release;/etc/armbian-image-release" Files2 = "/etc/armbian-release;/etc/armbian-image-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [debian elive] Image = "Elive.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/debian_version" debian [elive] Image = "Elive.png" Mode = "Detection" Files = "/etc/elive-version" Files2 = "/etc/elive-version" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" debian [debian neptune] Image = "Neptune.png" ;detected in "/etc/lsb-release" ;wrong in "/etc/debian_version" debian [neptune] Image = "Neptune.png" ;detected in "lsb_release -a" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" debian [kaisen] Image = "Kaisen.png" ;detected in "lsb_release -a" ;wrong in "/etc/debian_version" debian [kaisen gnu/linux] Image = "Kaisen.png" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" debian [deepin extix] Image = "ExTiX.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" debian [mx] Image = "MX.png" Files = "/etc/mx-version" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/os-release" Debian GNU/Linux ;wrong in "/etc/antix-version" antiX ;wrong in "/etc/debian_version" Debian ; at the end because some distros may also have the same files (like MX) [antix] Image = "antiX.png" Files = "/etc/antix-version" ;wrong in "/etc/os-release" Debian GNU/Linux ;wrong in "/etc/debian_version" Debian [ipfire] Image = "IPFire.png" ;detected in "/etc/system-release" [qts] Image = "QTS.png" Name = "QTS" ;detected in "/etc/config/uLinux.conf" [4mlinux] Image = "4MLinux.png" Name = "4MLinux" Files = "/etc/4MLinux-version" [milis linux] Image = "Milis.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" [lunar linux] Image = "Lunar.png" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" [crux] Image = "Crux.png" Mode = "Execute" Files = "/usr/bin/crux" [omarine] Image = "Omarine.png" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" [foresight] Image = "Foresight.png" ;detected in "/etc/distro-release" [trustix] Image = "Trustix.png" Files = "/etc/trustix-release;/etc/trustix-version" [nixos] Image = "NixOS.png" ;detected in "/etc/os-release" [free-eos] Image = "FreeEOS.png" Files = "/etc/eos-release;/etc/eos-version" [nutyx] Image = "NuTyX.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" [generations] Image = "Generations.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" [generations linux] Image = "Generations.png" ;detected in "/etc/os-release" [dahliaos] Image = "dahliaOS.png" ;detected in "/etc/os-release" [laclin] Image = "Laclin.png" Mode = "Detection" Files = "/etc/laclin-release" Files2 = "/etc/laclin-release" ;detected in "/etc/os-release" but wrong name Slackware [artix] Image = "Artix.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" [artix linux] Image = "Artix.png" Mode = "Detection" Files = "/etc/artix-release" ;detected in "/etc/os-release" [xerolinux] Image = "XeroLinux.png" Mode = "Detection" Files = "/etc/xerolinux-release" ;detected in "/etc/os-release" [xerolinux-kde] Image = "XeroLinux.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/arch-release" none [cachyos linux] Image = "CachyOS.png" ;detected in "/etc/os-release" [cachyos] Image = "CachyOS.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/arch-release" none [archcraft] Image = "Archcraft.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/arch-release" none [snal linux] Image = "Snal.png" ;detected in "/etc/os-release" ;wrong in "/etc/arch-release" none [snal] Image = "Snal.png" Name = "Snal Linux" Files = "/etc/snal-release" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/arch-release" none [archman] Image = "Archman.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/arch-release" none [rebornos] Image = "RebornOS.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/os-release" Arch ;wrong in "/etc/arch-release" Arch [rebornos linux] Image = "RebornOS.png" ;wrong in "/etc/os-release" [bluestarlinux] Image = "Bluestar.png" ;detected in "/etc/lsb-release" ;wrong in "/etc/os-release" Arch ;wrong in "/etc/arch-release" Arch [endeavouros] Image = "EndeavourOS.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/arch-release" Arch [arcolinux] Image = "Arco.png" Mode = "Detection" Files = "/etc/arcolinux-release" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/arch-release" Arch [garuda] Image = "Garuda.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/arch-release" Arch [garuda linux] Image = "Garuda.png" ;detected in "/etc/os-release" [ubuntu biglinux] Image = "BigLinux.png" ;detected in "lsb_release -a" ;wrong in "/etc/debian_version" Debian [biglinux based in ubuntu] Image = "BigLinux.png" ;detected in "/etc/os-release" [biglinux based in ubuntu 19.04] Image = "BigLinux.png" ;detected in "/etc/lsb-release" [deepin biglinux] Image = "BigLinux.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/deepin-version" Deepin ;wrong in "/etc/os-release" Deepin ;wrong in "/etc/debian_version" Debian [biglinux based in manjaro linux] Image = "BigLinux.png" Name = "BigLinux" Files = "/etc/big-release" Mode = "Detection" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/arch-release" Manjaro ;wrong in "/etc/manjaro-release" Manjaro [maboxlinux] Image = "Mabox.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/os-release" Manjaro ;wrong in "/etc/manjaro-release" Manjaro ;wrong in "/etc/arch-release" Arch | Manjaro [netrunner] Image = "Netrunner.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [netrunnerse] Image = "Netrunner.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/debian_version" Debian [netrunner rolling] Image = "Netrunner.png" ;detected in "/etc/os-release" ;wrong in "/etc/manjaro-release" Manjaro [voidlinux] Image = "Void.png" ;detected in "lsb_release -a"" [void] Image = "Void.png" ;detected in "/etc/os-release" [arch] Image = "Arch.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" [cobalt] Image = "Cobalt.png" Files = "/etc/cobalt-release" [linuxfromscratch] Image = "LFS.png" Files = "/etc/lfs-release" [rubix] Image = "Rubix.png" Files = "/etc/rubix-version" [tails] Image = "Tails.png" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [tanglu] Image = "Tanglu.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/debian_version" Debian [tanglu gnu/linux] Image = "Tanglu.png" ;detected in "/etc/os-release" [gnoppix] Image = "Gnoppix.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [kali] Image = "Kali.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/debian_version" Debian [kali gnu/linux] Image = "Kali.png" ;detected in "/etc/os-release" [urukos] Image = "Uruk.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [pureos] Image = "PureOS.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [pureos gnu/linux] Image = "PureOS.png" ;detected in "/etc/os-release" [septor] Image = "Septor.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [salentos] Image = "SalentOS.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [pop] Image = "Pop.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/debian_version" Debian [pop!_os] Image = "Pop.png" ;detected in "/etc/os-release" [mer] Image = "Mer.png" Mode = "Analyse" Files = "/etc/mer-release;/etc/meego-release;/etc/moblin-release" ;detected in "lsb_release -a" ;detected in "/etc/system-release" [kaos] Image = "KaOS.png" Files = "/etc/KaOS-release" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" [openmamba] Image = "OpenMamba.png" Files = "/etc/openmamba-release" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;detected in "/etc/system-release" [coreos] Image = "CoreOS.png" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" [container linux by coreos] Image = "Container.png" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" [parrot] Image = "Parrot.png" ;detected in "lsb_release -a" ;wrong in "/etc/debian_version" Debian [parrot os] Image = "Parrot.png" ;detected in "/etc/os-release" [boss] Image = "BOSS.png" Name = "BOSS GNU/Linux" Files = "/etc/boss_version" ;detected in "lsb_release -a" ;wrong in "/etc/debian_version" Debian [boss gnu/linux] Image = "BOSS.png" ;detected in "/etc/os-release" [boss server beta] Image = "BOSS.png" ;detected in "lsb_release -a" [solus] Image = "Solus.png" Files = "/etc/solus-release" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" [solus operating system] Image = "Solus.png" ;detected in "/etc/os-release" [canaima] Image = "Canaima.png" Name = "Canaima GNU/Linux" Files = "/etc/canaima_version" ;detected in "lsb_release -a" ;wrong in "/etc/debian_version" Debian [canaima gnu/linux] Image = "Canaima.png" ;detected in "/etc/os-release" [ubuntu runtu] Image = "Runtu.png" ;detected in "/etc/lsb-release" ;wrong detected in "lsb_release -a" Ubuntu ;wrong in "/etc/os-release" Ubuntu ;wrong in "/etc/debian_version" Debian [semplice] Image = "Semplice.png" Name = "Semplice" Files = "/etc/semplice_version" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [solydxk] Image = "SolydXK.png" Name = "SolydXK" Mode = "Detection" Files = "/etc/solydxk/info" Files2 = "/etc/solydxk/info" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/os-release" Debian GNU/Linux ;wrong in "/etc/debian_version" Debian [handylinux] Image = "Handy.png" Files = "/etc/handylinux_version" ;detected in "lsb_release -a" ;wrong in "/etc/os-release" Debian GNU/Linux ;wrong in "/etc/debian_version" Debian [parsix gnu/linux] Image = "Parsix.png" ;detected in "/etc/os-release" but sometimes wrong version ;wrong in "/etc/debian_version" Debian [parsix] Image = "Parsix.png" Files = "/etc/parsix-version" ;detected in "lsb_release -a" ;wrong in "/etc/debian_version" Debian [linaro] Image = "Linaro.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [endless] Image = "Endless.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [uos] Image = "UOS.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [deepin] Image = "Deepin.png" Files = "/etc/deepin-version" Mode = "Detection" Files2 = "/etc/deepin-version" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [linuxdeepin] Image = "Deepin.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/os-release" Debian GNU/Linux ;wrong in "/etc/debian_version" Debian [ultimate_edition] Image = "UltimateEdition.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [elementary] Image = "elementaryOS.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/debian_version" Debian [elementary os] Image = "elementaryOS.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [jingos] Image = "JingOS.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [kde neon] Image = "KDEneon.png" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [kde] Image = "KDEneon.png" ;detected in "lsb_release -a" [neon] Image = "KDEneon.png" ;detected in "/etc/lsb-release" [pearlinux] Image = "Pear.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/os-release" Ubuntu ;wrong in "/etc/debian_version" Debian [pear linux] Image = "Pear.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/os-release" Ubuntu ;wrong in "/etc/debian_version" Debian [pearos] Image = "Pear.png" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" (simetimes wrong Ubuntu) ;wrong in "/etc/debian_version" Debian [neon pearos] Image = "Pear.png" ;detected in "lsb_release -a" ;wrong in "/etc/debian_version" Debian [solusos] Image = "SolusOS.png" Files = "/etc/solusos_version" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/os-release" Debian GNU/Linux ;wrong in "/etc/debian_version" Debian [linuxmint] Image = "Mint.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/os-release" Ubuntu ;wrong in "/etc/debian_version" Debian [linux mint] Image = "Mint.png" ;detected in "/etc/os-release [lmde] Image = "Mint.png" ;detected in "/etc/os-release" [trisquel] Image = "Trisquel.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/os-release" Ubuntu ;wrong in "/etc/debian_version" Debian [zorin] Image = "Zorin.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong or almost in "/etc/os-release" Ubuntu | Zorin OS ;wrong in "/etc/debian_version" Debian [zorin os] Image = "Zorin.png" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [peppermint] Image = "Peppermint.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [nitrux] Image = "Nitrux.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [ubuntu vanillaos] Image = "Vanilla.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" [vanillaos] Image = "Vanilla.png" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [makululinux] Image = "Makulu.png" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [ubuntu makululinux] Image = "Makulu.png" ;detected in "lsb_release -a" [linuxfx] Image = "Linuxfx.png" Name="Linuxfx" Files = "/etc/fx.version" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [ubuntu linuxfx] Image = "Linuxfx.png" ;detected in "lsb_release -a" [ubuntu] Image = "Ubuntu.png" Test = "nolsbfirst" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/debian_version" Debian [chakra] Image = "Chakra.png" Files = "/etc/chakra-release" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" [the chakra-project] Image = "Chakra.png" ;detected in "/etc/os-release" [iycc] Image = "IYCC.png" ;detected in "/etc/lsb-release" [openeuler] Image = "openEuler.png" Files = "/etc/openEuler-release" ;detected in "lsb_release -a" ;detected in "/etc/os-release" ;detected in "/etc/system-release" [risios] Image = "risiOS.png" ;detected in "lsb_release -a" ;detected in "/etc/fedora-release" ;detected in "/etc/os-release" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [hipserv] Image = "HipServ.png" ;detected in "/etc/redhat-release" [neokylin] Image = "NeoKylin.png" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [neokylin linux desktop] Image = "NeoKylin.png" Files = "/etc/neokylin-release;/etc/cs2c-release" ;detected in "lsb_release -a" ;detected in "/etc/os-release" [mageia] Image = "Mageia.png" Files = "/etc/mageia-release" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/mandriva-release" ;detected in "/etc/mandrake-release;/etc/mandrakelinux-release" ;detected in "/etc/redhat-release" ;detected in "/etc/os-release" [pld linux] Image = "PLD.png" Files = "/etc/pld-release" ;detected in "/etc/os-release" [lfs] Image = "lfs.png" Files = "/etc/lfs-release;/etc/lfs_version" [hlfs] Image = "lfs.png" Files = "/etc/hlfs-release;/etc/hlfs_version" [synology] Image = "Synology.png" Mode = "Detection" Files = "/etc/synoinfo.conf" Files2 = "/etc/VERSION" [alpine] Image = "Alpine.png" Name = "Alpine" Files = "/etc/alpine-release" [fatdog64 linux] Image = "Fatdog.png" ;detected in "/etc/os-release" [fatdog64] Image = "Fatdog.png" Name = "Fatdog64 Linux" Files = "/etc/fatdog-version" ;detected in "/etc/DISTRO_SPECS" [puppy] Image = "Puppy.png" Name = "Puppy" ;detected in "/etc/os-release" ;detected in "/etc/DISTRO_SPECS" [lucid] Image = "Puppy.png" Name = "Lucid Puppy" ;detected in "/etc/DISTRO_SPECS" [slacko puppy] Image = "Puppy.png" ;detected in "/etc/DISTRO_SPECS" [wary puppy] Image = "Puppy.png" ;detected in "/etc/DISTRO_SPECS" [quirky] Image = "EasyOS.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" [easyos] Image = "EasyOS.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" [easy os] Image = "EasyOS.png" ;detected in "/etc/DISTRO_SPECS" [easy beaver] Image = "EasyOS.png" ;detected in "/etc/DISTRO_SPECS" [easy pyro64] Image = "EasyOS.png" ;detected in "/etc/DISTRO_SPECS" [easy buster64] Image = "EasyOS.png" ;detected in "/etc/DISTRO_SPECS" [easy dunfell64] Image = "EasyOS.png" ;detected in "/etc/DISTRO_SPECS" [easyos kirkstone64] Image = "EasyOS.png" ;detected in "/etc/DISTRO_SPECS" [turbolinux] Image = "Turbo.png" Files = "/etc/turbolinux-release" [amazon] Image = "Amazon.png" ;detected in "/etc/system-release" [amazonami] Image = "Amazon.png" ;detected in "lsb_release -a" [amazon linux ami] Image = "Amazon.png" ;detected in /etc/os-release [redflag] Image = "RedFlag.png" Files = "/etc/redflag-release" ;detected in "/etc/system-release" [red flag inwise] Image = "RedFlag.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" [startos] Image = "StartOS.png" Files = "/etc/startos-release" ;detected in "lsb_release -a" [openelec] Image = "OpenELEC.png" ;detected in "lsb_release -a" ;detected in "/etc/os-release" [libreelec] Image = "LibreELEC.png" ;detected in "lsb_release -a" ;detected in "/etc/os-release" [lakka] Image = "Lakka.png" ;detected in "lsb_release -a" ;detected in "/etc/os-release" [pisilinux] Image = "Pisi.png" Files = "/etc/pisilinux-release" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" [pisi_linux] Image = "Pisi.png" ;detected in "/etc/system-release" [springdale linux] Image = "Springdale.png" ;detected in "/etc/os-release" [springdale] Image = "Springdale.png" Files = "/etc/PU_IAS-release;/etc/puias-release;/etc/springdale-release" ;detected in "lsb_release -a" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [nethserver] Image = "NethServer.png" Files = "/etc/nethserver-release" ;detected in "/etc/os-release" ;wrong in "/etc/centos-release" CentOS ;wrong in "/etc/redhat-release" CentOS ;wrong in "/etc/system-release" CentOS [sme] Image = "SMEServer.png" Files = "/etc/e-smith-release" ;wrong in "/etc/centos-release" CentOS ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [smeserver] Image = "SMEServer.png" ;detected in "lsb_release -a" [koozali sme server] Image = "SMEServer.png" ;detected in "/etc/os-release" [scientific] Image = "Scientific.png" ;detected in "lsb_release -a" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [scientificsl] Image = "Scientific.png" ;detected in "lsb_release -a" [scientificcernslc] Image = "Scientific.png" ;detected in "lsb_release -a" [scientificfermi] Image = "Scientific.png" ;detected in "lsb_release -a" [scientificfermilts] Image = "Scientific.png" ;detected in "lsb_release -a" [scientificslf] Image = "Scientific.png" ;detected in "lsb_release -a" [clear linux os] Image = "Clear.png" ;detected in "/etc/os-release" [clearos] Image = "ClearOS.png" Files = "/etc/clearos-release" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [cloudlinuxserver] Image = "Cloud.png" ;detected in "lsb_release -a" [cloudlinux] Image = "Cloud.png" Files = "/etc/CloudLinux-release" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [almalinux] Image = "Alma.png" Files = "/etc/almalinux-release" ;detected in "lsb_release -a" ;wrong in "/etc/centos-release" CentOS ;detected in "/etc/os-release" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [virtuozzo linux] Image = "Virtuozzo.png" ;detected in "/etc/os-release" [virtuozzo] Image = "Virtuozzo.png" Files = "/etc/vzlinux-release" ;detected in "lsb_release -a" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [rocky linux] Image = "Rocky.png" ;detected in "/etc/os-release" [rocky] Image = "Rocky.png" Files = "/etc/rocky-release" ;detected in "lsb_release -a" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [eurolinux] Image = "EuroLinux.png" Files = "/etc/el-release" ;detected in "lsb_release -a" ;detected in "/etc/os-release" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [centosstream] Image = "CentOS.png" ;detected in "lsb_release -a" [centos stream] Image = "CentOS.png" ;detected in "/etc/os-release" [centos linux] Image = "CentOS.png" ;detected in "/etc/os-release" ; at the end because some distros may also have the same files (like SMEServer, AlmaLinux, NethServer) [centos] Image = "CentOS.png" Test = "nolsbfirst" Files = "/etc/centos-release" ;detected in "lsb_release -a" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [oracle] Image = "Oracle.png" Files = "/etc/oracle-release;/etc/enterprise-release" ;detected in "/etc/system-release" ;wrong in "/etc/redhat-release" RedHat [oracleserver] Image = "Oracle.png" ;detected in "lsb_release -a" [enterpriseenterpriseserver] Image = "Oracle.png" ;detected in "lsb_release -a" [pclinuxos] Image = "PCLinuxOS.png" Files = "/etc/pclinuxos-release" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/mandriva-release" ;detected in "/etc/mandrake-release;/etc/mandrakelinux-release" ;detected in "/etc/redhat-release" [absolute] Image = "Absolute.png" ;delected in "/etc/os-release" ;wrong in "/etc/slackware-version" Slackware [salix] Image = "Salix.png" Mode = "Detection" Files = "/etc/salix-update-notifier.conf" Files2 = "/etc/slackware-version" ;wrong in "/etc/os-release" Slackware ;wrong in "/etc/slackware-version" Slackware [slax] Image = "Slax.png" Files = "/etc/slax-version" ;wrong in "/etc/os-release" Slackware ;wrong in "/etc/slackware-version" Slackware [sms] Image = "SMS.png" Files = "/etc/sms-version" ;detected in "/etc/os-release" ;wrong in "/etc/slackware-version" Slackware [porteus] Image = "Porteus.png" Files = "/etc/porteus-version" ;wrong in "/etc/os-release" Slackware ;wrong in "/etc/slackware-version" Slackware [vector] Image = "Vector.png" Files = "/etc/vector-version" ;wrong in "/etc/slackware-version" Slackware [zenwalk] Image = "Zenwalk.png" Name = "Zenwalk" Files = "/etc/zenwalk-version" ;detected in "/etc/os-release" ;wrong in "/etc/slackware-version" Slackware [slackware] Image = "Slackware.png" Files = "/etc/slackware-release" ;detected in "/etc/os-release" ;detected in "/etc/slackware-version" [calculate] Image = "Calculate.png" ;detected in "/etc/gentoo-release" ;wrong in "/etc/os-release" Gentoo [redcore] Image = "Redcore.png" ;detected in "/etc/gentoo-release" ;detected in "/etc/os-release" [exherbo] Image = "Exherbo.png" Name = "Exherbo Linux" Mode = "Detection" Files = "/etc/exherbo-release" ;detected in "/etc/os-release" [tizen] Image = "Tizen.png" Files = "/etc/tizen-release" ;detected in "/etc/system-release" ;detected in "/etc/os-release" [sabayon] Image = "Sabayon.png" Files = "/etc/sabayon-release" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/system-release" ;detected in "/etc/os-release" ;wrong in "/etc/gentoo-release" Gentoo [vortexbox] Image = "VortexBox.png" Name = "VortexBox" Files = "/etc/vortexbox/vortexbox-version" ;wrong in "/etc/fedora-release" Fedora ;wrong in "/etc/redhat-release" Fedora ;wrong in "/etc/system-release" Fedora ;wrong in "/etc/os-release" Fedora [nobara] Image = "Nobara.png" Files = "/etc/nobara-release" ;detected in "lsb_release -a" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [nobara linux] Image = "Nobara.png" ;detected in "/etc/os-release" [ultramarine] Image = "Ultramarine.png" Files = "/etc/ultramarine-release" ;detected in "lsb_release -a" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [ultramarine linux] Image = "Ultramarine.png" ;detected in "/etc/os-release" [alt] Image = "ALT.png" Files = "/etc/altlinux-release" ;detected in "/etc/fedora-release" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [alt linux] Image = "ALT.png" ;detected in "/etc/os-release" [simply] Image = "ALT.png" ;detected in "/etc/fedora-release" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [simply linux] Image = "ALT.png" ;detected in "/etc/os-release" [fuduntu] Image = "Fuduntu.png" Files = "/etc/fuduntu-release" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/fedora-release" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" [gnewsense] Image = "gNewSense.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/debian_version" Debian [steamos] Image = "SteamOS.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;wrong in "/etc/debian_version" Debian [steamos gnu/linux] Image = "SteamOS.png" ;detected in "/etc/os-release" [raspbian] Image = "Raspbian.png" ;detected in "lsb_release -a" ;wrong in "/etc/debian_version" Debian [raspbian gnu/linux] Image = "Raspbian.png" ;detected in "/etc/os-release" [devuan] Image = "Devuan.png" Name = "Devuan" Files = "/etc/devuan_version" ;detected in "lsb_release -a" ;wrong in "/etc/debian_version" Debian [devuan gnu/linux] Image = "Devuan.png" ;detected in "/etc/os-release" [debian] Image = "Debian.png" Test = "nolsbfirst" Name = "Debian" Files = "/etc/debian_release" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/debian_version" [debian gnu/linux] Image = "Debian.png" ;detected in "/etc/os-release" [opensuse] Image = "openSUSE.png" ;detected in "/etc/os-release" ;detected in "/etc/SuSE-release" [opensuse leap] Image = "openSUSE.png" ;detected in "/etc/os-release" [opensuse tumbleweed] Image = "openSUSE.png" ;detected in "/etc/os-release" [opensuse project] Image = "openSUSE.png" ;detected in "lsb_release -a" [suse linux opensuse] Image = "openSUSE.png" ;detected in "lsb_release -a" [suse] Image = "SUSE.png" ;detected in "/etc/SuSE-release" [sles] Image = "SUSE.png" ;detected in "/etc/os-release" ; at the end because some distros may also have the same files (like openSUSE, SUSE) [suse linux] Image = "SUSE.png" Mode = "Analyse" Files = "/etc/SuSE-release;/etc/UnitedLinux-release" ; at the end because some distros may also have the same files (like Sabayon, Calculate) [gentoo] Image = "Gentoo.png" Mode = "Analyse" Files = "/etc/gentoo-release" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" [qubes] Image = "Qubes.png" Files = "/etc/qubes-release" ;detected in "/etc/fedora-release" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" ;detected in "/etc/os-release" [korora] Image = "Korora.png" ;detected in "lsb_release -a" ;detected in "/etc/fedora-release" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" ;detected in "/etc/os-release" ; at the end because some distros may also have the same files (like Fuduntu, ALT, VortexBox, Qubes, Korora) [fedora] Image = "Fedora.png" Mode = "Analyse" Files = "/etc/fedora-release" ;detected in "lsb_release -a" ;detected in "/etc/redhat-release" ;detected in "/etc/system-release" ;detected in "/etc/os-release" [fedoracore] Image = "Fedora.png" ;detected in "/etc/lsb-release" [openmandriva] Image = "OpenMandriva.png" ;detected in "/etc/rosa-release" ;detected in "/etc/mandriva-release" ;detected in "/etc/mandrake-release;/etc/mandrakelinux-release" ;detected in "/etc/redhat-release" ;detected in "/etc/distro-release" ;detected in "/etc/system-release" [openmandriva lx] Image = "OpenMandriva.png" ;detected in "/etc/os-release" [openmandrivalinux] Image = "OpenMandriva.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" [rosa marathonlinux] Image = "ROSA.png" ;detected in "/etc/lsb-release" [rosadesktop.marathon] Image = "ROSA.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" [rosadesktop.fresh] Image = "ROSA.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" [rosa desktop fresh] Image = "ROSA.png" ;detected in "/etc/os-release" [rosa marathon] Image = "ROSA.png" ;detected in "/etc/os-release" [rosaenterpriseserver] Image = "ROSA.png" ;detected in "lsb_release -a" [manjarolinux] Image = "Manjaro.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" [manjaro-arm] Image = "Manjaro.png" Name = "Manjaro ARM" Files = "/etc/manjaro-arm-version" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ;detected in "/etc/os-release" ;wrong in "/etc/arch-release" Arch ; at the end because some distros may also have the same files (like BigLinux, Mabox, Netrunner) [manjaro linux] Image = "Manjaro.png" Files = "/etc/manjaro-release" ;detected in "/etc/os-release" [arch linux arm] Image = "Arch.png" ;detected in "/etc/os-release" ; at the end because some distros may also have the same files (like XeroLinux-KDE, CachyOS, Archcraft, Snal, Archman, RebornOS, BluestarLinux, EndeavourOS, Arco, Garuda, BigLinux, Mabox, Manjaro ARM) [arch linux] Image = "Arch.png" Mode = "Analyse" Files = "/etc/arch-release" ;detected in "/etc/os-release" ; at the end because some distros may also have the same files (like OpenMandriva) [rosa] Image = "ROSA.png" Mode = "Analyse" Files = "/etc/rosa-release" ;detected in "lsb_release -a" ;detected in "/etc/system-release" ;detected in "/etc/mandriva-release" ;detected in "/etc/mandrake-release;/etc/mandrakelinux-release" ;detected in "/etc/redhat-release" [mandrivalinux] Image = "Mandrake.png" ;detected in "lsb_release -a" ;detected in "/etc/lsb-release" ; at the end because some distros may also have the same files (like Mageia, PCLinuxOS, ROSA, OpenMandriva) [mandriva] Image = "Mandrake.png" Mode = "Analyse" Files = "/etc/mandriva-release" ;detected in "/etc/mandrake-release;/etc/mandrakelinux-release" ;detected in "/etc/redhat-release" ; at the end because some distros may also have the same files (like Mandriva, Mageia, PCLinuxOS, ROSA, OpenMandriva) [mandrake] Image = "Mandrake.png" Mode = "Analyse" Files = "/etc/mandrake-release;/etc/mandrakelinux-release" ; at the end because some distros may also have the same files (like SMEServer, Fuduntu, ALT, VortexBox, Qubes, Korora, Fedora, CentOS, Oracle, Scientific, CloudLinux, Mandrake, MandrivaLinux, Mageia, PCLinuxOS, ROSA, OpenMandriva, HipServ, NeoKylin, Springdale, Rocky, EuroLinux, AlmaLinux, Virtuozzo, NethServer) [redhat] Image = "RedHat.png" Mode = "Analyse" Files = "/etc/redhat-release;/etc/redhat_version" ;detected in "/etc/system-release" [red hat enterprise linux server] Image = "RedHat.png" ;detected in "/etc/os-release" [red hat enterprise linux everything] Image = "RedHat.png" ;detected in "/etc/os-release" [redhatenterprisees] Image = "RedHat.png" ;detected in "lsb_release -a" [redhatenterpriseas] Image = "RedHat.png" ;detected in "lsb_release -a" [redhatenterpriseserver] Image = "RedHat.png" ;detected in "lsb_release -a" [redhatenterpriseclient] Image = "RedHat.png" ;detected in "lsb_release -a" phpsysinfo-3.4.4/data/languages.ini000066400000000000000000000606311467431054600173240ustar00rootroot00000000000000[WINNT] 1="Arabic" 4="Simplified Chinese - China" 9="English" 1025="Arabic - Saudi Arabia" 1026="Bulgarian" 1027="Catalan" 1028="Traditional Chinese - Taiwan" 1029="Czech" 1030="Danish" 1031="German - Germany" 1032="Greek" 1033="English - United States" 1034="Spanish - Traditional Sort" 1035="Finnish" 1036="French - France" 1037="Hebrew" 1038="Hungarian" 1039="Icelandic" 1040="Italian - Italy" 1041="Japanese" 1042="Korean" 1043="Dutch - Netherlands" 1044="Norwegian - Bokmal" 1045="Polish" 1046="Portuguese - Brazil" 1047="Rhaeto-Romanic" 1048="Romanian" 1049="Russian" 1050="Croatian" 1051="Slovak" 1052="Albanian" 1053="Swedish" 1054="Thai" 1055="Turkish" 1056="Urdu" 1057="Indonesian" 1058="Ukrainian" 1059="Belarusian" 1060="Slovenian" 1061="Estonian" 1062="Latvian" 1063="Lithuanian" 1065="Persion" 1066="Vietnamese" 1069="Basque" 1070="Serbian" 1071="Macedonian (FYROM)" 1072="Sutu" 1073="Tsonga" 1074="Tswana" 1076="Xhosa" 1077="Zulu" 1078="Afrikaans" 1080="Faeroese" 1081="Hindi" 1082="Maltese" 1084="Scottish Gaelic" 1085="Yiddish" 1086="Malay - Malaysia" 2049="Arabic - Iraq" 2052="Simplified Chinese - PRC" 2055="German - Switzerland" 2057="English - United Kingdom" 2058="Spanish - Mexico" 2060="French - Belgium" 2064="Italian - Switzerland" 2067="Dutch - Belgium" 2068="Norwegian - Nynorsk" 2070="Portuguese - Portugal" 2072="Romanian - Moldova" 2073="Russian - Moldova" 2074="Serbian - Latin" 2077="Swedish - Finland" 3073="Arabic - Egypt" 3076="Traditional Chinese - Hong Kong SAR" 3079="German - Austria" 3081="English - Australia" 3082="Spanish - International Sort" 3084="French - Canada" 3098="Serbian - Cyrillic" 4097="Arabic - Libya" 4100="Simplified Chinese - Singapore" 4103="German - Luxembourg" 4105="English - Canada" 4106="Spanish - Guatemala" 4108="French - Switzerland" 5121="Arabic - Algeria" 5127="German - Liechtenstein" 5129="English - New Zealand" 5130="Spanish - Costa Rica" 5132="French - Luxembourg" 6145="Arabic - Morocco" 6153="English - Ireland" 6154="Spanish - Panama" 7169="Arabic - Tunisia" 7177="English - South Africa" 7178="Spanish - Dominican Republic" 8193="Arabic - Oman" 8201="English - Jamaica" 8202="Spanish - Venezuela" 9217="Arabic - Yemen" 9226="Spanish - Colombia" 10241="Arabic - Syria" 10249="English - Belize" 10250="Spanish - Peru" 11265="Arabic - Jordan" 11273="English - Trinidad" 11274="Spanish - Argentina" 12289="Arabic - Lebanon" 12298="Spanish - Ecuador" 13313="Arabic - Kuwait" 13322="Spanish - Chile" 14337="Arabic - U.A.E." 14346="Spanish - Uruguay" 15361="Arabic - Bahrain" 15370="Spanish - Paraguay" 16385="Arabic - Qatar" 16394="Spanish - Bolivia" 17418="Spanish - El Salvador" 18442="Spanish - Honduras" 19466="Spanish - Nicaragua" 20490="Spanish - Puerto Rico" [Linux] _aa="Afar" _aa_DJ="Afar Djibouti" _aa_ER="Afar Eritrea" _aa_ER_SAAHO="Afar Eritrea Saho" _aa_ET="Afar Ethiopia" _aar="Afar" _aar_DJ="Afar Djibouti" _aar_ER="Afar Eritrea" _aar_ER_SAAHO="Afar Eritrea Saho" _aar_ET="Afar Ethiopia" _af="Afrikaans" _af_NA="Afrikaans Namibia" _afr="Afrikaans" _afr_NA="Afrikaans Namibia" _afr_ZA="Afrikaans South Africa" _af_ZA="Afrikaans South Africa" _aka="Akan" _aka_GH="Akan Ghana" _ak="Akan" _ak_GH="Akan Ghana" _alb_AL="Albanian Albania" _alb="Albanian" _am="Amharic" _am_ET="Amharic Ethiopia" _amh="Amharic" _amh_ET="Amharic Ethiopia" _ara_AE="Arabic United Arab Emirates" _ara="Arabic" _ara_BH="Arabic Bahrain" _ara_DZ="Arabic Algeria" _ar_AE="Arabic United Arab Emirates" _ara_EG="Arabic Egypt" _ara_IQ="Arabic Iraq" _ara_JO="Arabic Jordan" _ara_KW="Arabic Kuwait" _ara_LB="Arabic Lebanon" _ara_LY="Arabic Libya" _ara_MA="Arabic Morocco" _ara_OM="Arabic Oman" _ara_QA="Arabic Qatar" _ar="Arabic" _ara_SA="Arabic Saudi Arabia" _ara_SD="Arabic Sudan" _ara_SY="Arabic Syria" _ara_TN="Arabic Tunisia" _ara_YE="Arabic Yemen" _ar_BH="Arabic Bahrain" _ar_DZ="Arabic Algeria" _ar_EG="Arabic Egypt" _ar_IQ="Arabic Iraq" _ar_JO="Arabic Jordan" _ar_KW="Arabic Kuwait" _ar_LB="Arabic Lebanon" _ar_LY="Arabic Libya" _ar_MA="Arabic Morocco" _arm_AM="Armenian Armenia" _arm_AM_REVISED="Armenian Armenia Revised Orthography" _arm="Armenian" _ar_OM="Arabic Oman" _ar_QA="Arabic Qatar" _ar_SA="Arabic Saudi Arabia" _ar_SD="Arabic Sudan" _ar_SY="Arabic Syria" _ar_TN="Arabic Tunisia" _ar_YE="Arabic Yemen" _as="Assamese" _as_IN="Assamese India" _asm="Assamese" _asm_IN="Assamese India" _az_AZ="Azerbaijani Azerbaijan" _az="Azerbaijani" _az_Cyrl_AZ="Azerbaijani Azerbaijan (Cyrillic)" _az_Cyrl="Azerbaijani (Cyrillic)" _aze_AZ="Azerbaijani Azerbaijan" _aze_AZ_Cyrl="Azerbaijani Azerbaijan (Cyrillic)" _aze="Azerbaijani" _aze_AZ_Latn="Azerbaijani Azerbaijan (Latin)" _aze_Cyrl="Azerbaijani (Cyrillic)" _aze_Latn="Azerbaijani (Latin)" _az_Latn_AZ="Azerbaijani Azerbaijan (Latin)" _az_Latn="Azerbaijani (Latin)" _baq="Basque" _baq_ES="Basque Spain" _be="Belarusian" _be_BY="Belarusian Belarus" _bel="Belarusian" _bel_BY="Belarusian Belarus" _ben_BD="Bengali Bangladesh" _ben="Bengali" _ben_IN="Bengali India" _bg_BG="Bulgarian Bulgaria" _bg="Bulgarian" _bn_BD="Bengali Bangladesh" _bn="Bengali" _bn_IN="Bengali India" _bokmal="Norwegian Bokmål" _bokmål="Norwegian Bokmål" _bos_BA="Bosnian Bosnia and Herzegovina" _bos="Bosnian" _bs_BA="Bosnian Bosnia and Herzegovina" _bs="Bosnian" _bul_BG="Bulgarian Bulgaria" _bul="Bulgarian" _bur="Burmese" _bur_MM="Burmese Myanmar" _byn="Blin" _byn_ER="Blin Eritrea" _ca="Catalan" _ca_ES="Catalan Spain" _catalan="Catalan Spain" _cat="Catalan" _cat_ES="Catalan Spain" _cch="Atsam" _cch_NG="Atsam Nigeria" _C="English United States Computer" _chi="Chinese" _chi_CN="Chinese China" _chi_CN_Hans="Chinese China (Simplified Han)" _chi_Hans="Chinese (Simplified Han)" _chi_Hant="Chinese (Traditional Han)" _chi_HK="Chinese Hong Kong SAR China" _chi_HK_Hans="Chinese Hong Kong SAR China (Simplified Han)" _chi_HK_Hant="Chinese Hong Kong SAR China (Traditional Han)" _chi_MO="Chinese Macau SAR China" _chi_MO_Hans="Chinese Macau SAR China (Simplified Han)" _chi_MO_Hant="Chinese Macau SAR China (Traditional Han)" _chi_SG="Chinese Singapore" _chi_SG_Hans="Chinese Singapore (Simplified Han)" _chi_TW="Chinese Taiwan" _chi_TW_Hant="Chinese Taiwan (Traditional Han)" _cop="Coptic" _cor="Cornish" _cor_GB="Cornish United Kingdom" _croatian="Croatian" _cs_CZ="Czech Czech Republic" _cs="Czech" _cy_GB="Welsh United Kingdom" _cy="Welsh" _czech="Czech" _cze_CZ="Czech Czech Republic" _cze="Czech" _da="Danish" _da_DK="Danish Denmark" _dan="Danish" _dan_DK="Danish Denmark" _danish="Danish" _dansk="Danish" _de_AT="German Austria" _de_BE="German Belgium" _de_CH="German Switzerland" _de_DE="German Germany" _de="German" _de_LI="German Liechtenstein" _de_LU="German Luxembourg" _deutsch="German" _div="Divehi" _div_MV="Divehi Maldives" _dut_BE="Dutch Belgium" _dutch="Dutch" _dut="Dutch" _dut_NL="Dutch Netherlands" _dv="Divehi" _dv_MV="Divehi Maldives" _dz_BT="Dzongkha Bhutan" _dz="Dzongkha" _dzo_BT="Dzongkha Bhutan" _dzo="Dzongkha" _ee="Ewe" _ee_GH="Ewe Ghana" _eesti="Estonian" _ee_TG="Ewe Togo" _el_CY="Greek Cyprus" _el="Greek" _el_GR="Greek Greece" _el_POLYTON="Greek" _en_AS="English American Samoa" _en_AU="English Australia" _en_BE="English Belgium" _en_BW="English Botswana" _en_BZ="English Belize" _en_CA="English Canada" _en_DK="English Denmark" _en_Dsrt="English (Deseret)" _en_Dsrt_US="English United States (Deseret)" _en="English" _eng_AS="English American Samoa" _eng_AU="English Australia" _eng_BE="English Belgium" _en_GB="English United Kingdom" _eng_BW="English Botswana" _eng_BZ="English Belize" _eng_CA="English Canada" _eng_Dsrt="English (Deseret)" _eng="English" _eng_GB="English United Kingdom" _eng_GU="English Guam" _eng_HK="English Hong Kong SAR China" _eng_IE="English Ireland" _eng_IN="English India" _eng_JM="English Jamaica" _eng_MH="English Marshall Islands" _eng_MP="English Northern Mariana Islands" _eng_MT="English Malta" _eng_NA="English Namibia" _eng_NZ="English New Zealand" _eng_PH="English Philippines" _eng_PK="English Pakistan" _eng_SG="English Singapore" _eng_Shaw="English (Shavian)" _eng_TT="English Trinidad and Tobago" _en_GU="English Guam" _eng_UM="English United States Minor Outlying Islands" _eng_US_Dsrt="English United States (Deseret)" _eng_US="English United States" _eng_US_POSIX="English United States Computer" _eng_VI="English U.S. Virgin Islands" _eng_ZA="English South Africa" _eng_ZW="English Zimbabwe" _en_HK="English Hong Kong SAR China" _en_IE="English Ireland" _en_IN="English India" _en_JM="English Jamaica" _en_MH="English Marshall Islands" _en_MP="English Northern Mariana Islands" _en_MT="English Malta" _en_NA="English Namibia" _en_NZ="English New Zealand" _en_PH="English Philippines" _en_PK="English Pakistan" _en_SG="English Singapore" _en_Shaw="English (Shavian)" _en_TT="English Trinidad and Tobago" _en_UM="English United States Minor Outlying Islands" _en_US="English United States" _en_US_POSIX="English United States Computer" _en_VI="English U.S. Virgin Islands" _en_ZA="English South Africa" _en_ZW="English Zimbabwe" _eo="Esperanto" _epo="Esperanto" _es_AR="Spanish Argentina" _es_BO="Spanish Bolivia" _es_CL="Spanish Chile" _es_CO="Spanish Colombia" _es_CR="Spanish Costa Rica" _es_DO="Spanish Dominican Republic" _es_EC="Spanish Ecuador" _es_ES="Spanish Spain" _es_GT="Spanish Guatemala" _es_HN="Spanish Honduras" _es_MX="Spanish Mexico" _es_NI="Spanish Nicaragua" _es_PA="Spanish Panama" _es_PE="Spanish Peru" _es_PR="Spanish Puerto Rico" _es_PY="Spanish Paraguay" _es="Spanish" _es_SV="Spanish El Salvador" _est_EE="Estonian Estonia" _est="Estonian" _estonian="Estonian" _es_US="Spanish United States" _es_UY="Spanish Uruguay" _es_VE="Spanish Venezuela" _et_EE="Estonian Estonia" _et="Estonian" _eu="Basque" _eu_ES="Basque Spain" _ewe="Ewe" _ewe_GH="Ewe Ghana" _ewe_TG="Ewe Togo" _fa_AF="Persian Afghanistan" _fa_IR="Persian Iran" _fao="Faroese" _fao_FO="Faroese Faroe Islands" _fa="Persian" _fi_FI="Finnish Finland" _fi="Finnish" _fil="Filipino" _fil_PH="Filipino Philippines" _fin_FI="Finnish Finland" _fin="Finnish" _finnish="finnish" _fo="Faroese" _fo_FO="Faroese Faroe Islands" _français="French" _fr_BE="French Belgium" _fr_CA="French Canada" _fr_CH="French Switzerland" _fre_BE="French Belgium" _fre_CA="French Canada" _fre_CH="French Switzerland" _fre="French" _fre_FR="French France" _fre_LU="French Luxembourg" _fre_MC="French Monaco" _french="French" _fre_SN="French Senegal" _fr="French" _fr_FR="French France" _fr_LU="French Luxembourg" _fr_MC="French Monaco" _fr_SN="French Senegal" _fur="Friulian" _fur_IT="Friulian Italy" _gaa="Ga" _gaa_GH="Ga Ghana" _ga_IE="Irish Ireland" _ga="Irish" _galego="Galician" _galician="Galician" _geo_GE="Georgian Georgia" _geo="Georgian" _ger_AT="German Austria" _ger_BE="German Belgium" _ger_CH="German Switzerland" _ger_DE="German Germany" _ger="German" _ger_LI="German Liechtenstein" _ger_LU="German Luxembourg" _german="German" _gez_ER="Geez Eritrea" _gez_ET="Geez Ethiopia" _gez="Geez" _gle_IE="Irish Ireland" _gle="Irish" _gl_ES="Galician Spain" _gl="Galician" _glg_ES="Galician Spain" _glg="Galician" _glv_GB="Manx United Kingdom" _glv="Manx" _gre_CY="Greek Cyprus" _greek="Greek" _gre="Greek" _gre_GR="Greek Greece" _gre_POLYTON="Greek" _gu="Gujarati" _gu_IN="Gujarati India" _guj="Gujarati" _guj_IN="Gujarati India" _gv_GB="Manx United Kingdom" _gv="Manx" _ha_Arab="Hausa (Arabic)" _ha_Arab_NG="Hausa Nigeria (Arabic)" _ha_Arab_SD="Hausa Sudan (Arabic)" _ha_GH="Hausa Ghana" _ha="Hausa" _ha_Latn_GH="Hausa Ghana (Latin)" _ha_Latn="Hausa (Latin)" _ha_Latn_NE="Hausa Niger (Latin)" _ha_Latn_NG="Hausa Nigeria (Latin)" _ha_NE="Hausa Niger" _ha_NG="Hausa Nigeria" _ha_SD="Hausa Sudan" _hau_Arab="Hausa (Arabic)" _hau_GH="Hausa Ghana" _hau_GH_Latn="Hausa Ghana (Latin)" _hau="Hausa" _hau_Latn="Hausa (Latin)" _hau_NE="Hausa Niger" _hau_NE_Latn="Hausa Niger (Latin)" _hau_NG_Arab="Hausa Nigeria (Arabic)" _hau_NG="Hausa Nigeria" _hau_NG_Latn="Hausa Nigeria (Latin)" _hau_SD_Arab="Hausa Sudan (Arabic)" _hau_SD="Hausa Sudan" _haw="Hawaiian" _haw_US="Hawaiian United States" _heb="Hebrew" _heb_IL="Hebrew Israel" _hebrew="Hebrew" _he="Hebrew" _he_IL="Hebrew Israel" _hi="Hindi" _hi_IN="Hindi India" _hin="Hindi" _hin_IN="Hindi India" _hr="Croatian" _hr_HR="Croatian Croatia" _hrvatski="Croatian" _hrv="Croatian" _hrv_HR="Croatian Croatia" _hu_HU="Hungarian Hungary" _hu="Hungarian" _hungarian="Hungarian" _hun_HU="Hungarian Hungary" _hun="Hungarian" _hy_AM="Armenian Armenia" _hy_AM_REVISED="Armenian Armenia Revised Orthography" _hy="Armenian" _ia="Interlingua" _ibo="Igbo" _ibo_NG="Igbo Nigeria" _ice="Icelandic" _ice_IS="Icelandic Iceland" _icelandic="Icelandic" _id_ID="Indonesian Indonesia" _id="Indonesian" _ig="Igbo" _ig_NG="Igbo Nigeria" _ii_CN="Sichuan Yi China" _iii_CN="Sichuan Yi China" _iii="Sichuan Yi" _ii="Sichuan Yi" _iku="Inuktitut" _ina="Interlingua" _ind_ID="Indonesian Indonesia" _ind="Indonesian" _is="Icelandic" _is_IS="Icelandic Iceland" _ita_CH="Italian Switzerland" _ita="Italian" _ita_IT="Italian Italy" _italian="Italian" _it_CH="Italian Switzerland" _it="Italian" _it_IT="Italian Italy" _iu="Inuktitut" _iw="Hebrew" _iw_IL="Hebrew Israel" _ja="Japanese" _ja_JP="Japanese Japan" _japanese="Japanese" _jpn="Japanese" _jpn_JP="Japanese Japan" _ka_GE="Georgian Georgia" _ka="Georgian" _kaj="Jju" _kaj_NG="Jju Nigeria" _kal_GL="Kalaallisut Greenland" _kal="Kalaallisut" _kam="Kamba" _kam_KE="Kamba Kenya" _kan_IN="Kannada India" _kan="Kannada" _kaz_Cyrl="Kazakh (Cyrillic)" _kaz="Kazakh" _kaz_KZ_Cyrl="Kazakh Kazakhstan (Cyrillic)" _kaz_KZ="Kazakh Kazakhstan" _kcg_NG="Tyap Nigeria" _kcg="Tyap" _kfo_CI="Koro Ivory Coast" _kfo="Koro" _khm_KH="Khmer Cambodia" _khm="Khmer" _kin="Kinyarwanda" _kin_RW="Kinyarwanda Rwanda" _kir_KG="Kirghiz Kyrgyzstan" _kir="Kirghiz" _kk_Cyrl="Kazakh (Cyrillic)" _kk_Cyrl_KZ="Kazakh Kazakhstan (Cyrillic)" _kk="Kazakh" _kk_KZ="Kazakh Kazakhstan" _kl_GL="Kalaallisut Greenland" _kl="Kalaallisut" _km_KH="Khmer Cambodia" _km="Khmer" _kn_IN="Kannada India" _kn="Kannada" _kok_IN="Konkani India" _kok="Konkani" _ko="Korean" _ko_KR="Korean South Korea" _korean="Korean" _kor="Korean" _kor_KR="Korean South Korea" _kpe_GN="Kpelle Guinea" _kpe="Kpelle" _kpe_LR="Kpelle Liberia" _ku_Arab="Kurdish (Arabic)" _ku="Kurdish" _ku_Latn="Kurdish (Latin)" _ku_Latn_TR="Kurdish Turkey (Latin)" _kur_Arab="Kurdish (Arabic)" _kur="Kurdish" _kur_Latn="Kurdish (Latin)" _kur_TR="Kurdish Turkey" _kur_TR_Latn="Kurdish Turkey (Latin)" _ku_TR="Kurdish Turkey" _kw="Cornish" _kw_GB="Cornish United Kingdom" _ky_KG="Kirghiz Kyrgyzstan" _ky="Kirghiz" _lao_LA="Lao Laos" _lao="Lao" _lav="Latvian" _lav_LV="Latvian Latvia" _lin_CD="Lingala Congo - Kinshasa" _lin_CG="Lingala Congo - Brazzaville" _lin="Lingala" _lithuanian="Lithuanian" _lit="Lithuanian" _lit_LT="Lithuanian Lithuania" _ln_CD="Lingala Congo - Kinshasa" _ln_CG="Lingala Congo - Brazzaville" _ln="Lingala" _lo_LA="Lao Laos" _lo="Lao" _lt="Lithuanian" _lt_LT="Lithuanian Lithuania" _lv="Latvian" _lv_LV="Latvian Latvia" _mac="Macedonian" _mac_MK="Macedonian Macedonia" _mal_IN="Malayalam India" _mal="Malayalam" _mar_IN="Marathi India" _mar="Marathi" _may_BN="Malay Brunei" _may="Malay" _may_MY="Malay Malaysia" _mk="Macedonian" _mk_MK="Macedonian Macedonia" _ml_IN="Malayalam India" _ml="Malayalam" _mlt="Maltese" _mlt_MT="Maltese Malta" _mn_CN="Mongolian China" _mn_Cyrl_MN="Mongolian Mongolia (Cyrillic)" _mn_Cyrl="Mongolian (Cyrillic)" _mn_MN="Mongolian Mongolia" _mn_Mong_CN="Mongolian China (Mongolian)" _mn_Mong="Mongolian (Mongolian)" _mn="Mongolian" _mol="Moldavian" _mo="Moldavian" _mon_CN_Mong="Mongolian China (Mongolian)" _mon_CN="Mongolian China" _mon_Cyrl="Mongolian (Cyrillic)" _mon_MN_Cyrl="Mongolian Mongolia (Cyrillic)" _mon_MN="Mongolian Mongolia" _mon_Mong="Mongolian (Mongolian)" _mon="Mongolian" _mr_IN="Marathi India" _mr="Marathi" _ms_BN="Malay Brunei" _ms="Malay" _ms_MY="Malay Malaysia" _mt="Maltese" _mt_MT="Maltese Malta" _my="Burmese" _my_MM="Burmese Myanmar" _nbl="South Ndebele" _nbl_ZA="South Ndebele South Africa" _nb_NO="Norwegian Bokmål Norway" _nb="Norwegian Bokmål" _ne_IN="Nepali India" _ne="Nepali" _ne_NP="Nepali Nepal" _nep_IN="Nepali India" _nep="Nepali" _nep_NP="Nepali Nepal" _nl_BE="Dutch Belgium" _nl="Dutch" _nl_NL="Dutch Netherlands" _nn_NO="Norwegian Nynorsk Norway" _nn="Norwegian Nynorsk" _nno_NO="Norwegian Nynorsk Norway" _nno="Norwegian Nynorsk" _nob_NO="Norwegian BokmÃ¥l Norway" _nob="Norwegian BokmÃ¥l" _no_NO="Norwegian Nynorsk Norway" _no_NO_NY="Norwegian Nynorsk Norway" _no="Norwegian" _nor="Norwegian" _norwegian="Norwegian" _nr="South Ndebele" _nr_ZA="South Ndebele South Africa" _nso="Northern Sotho" _nso_ZA="Northern Sotho South Africa" _nya_MW="Nyanja Malawi" _nya="Nyanja" _ny_MW="Nyanja Malawi" _nynorsk="Norwegian Nynorsk" _ny="Nyanja" _om_ET="Oromo Ethiopia" _om_KE="Oromo Kenya" _om="Oromo" _ori_IN="Oriya India" _or_IN="Oriya India" _ori="Oriya" _orm_ET="Oromo Ethiopia" _orm_KE="Oromo Kenya" _orm="Oromo" _or="Oriya" _pa_Arab_PK="Punjabi Pakistan (Arabic)" _pa_Arab="Punjabi (Arabic)" _pa_Guru_IN="Punjabi India (Gurmukhi)" _pa_Guru="Punjabi (Gurmukhi)" _pa_IN="Punjabi India" _pan_Arab="Punjabi (Arabic)" _pan_Guru="Punjabi (Gurmukhi)" _pan_IN_Guru="Punjabi India (Gurmukhi)" _pan_IN="Punjabi India" _pan_PK_Arab="Punjabi Pakistan (Arabic)" _pan_PK="Punjabi Pakistan" _pan="Punjabi" _pa_PK="Punjabi Pakistan" _pa="Punjabi" _per_AF="Persian Afghanistan" _per_IR="Persian Iran" _per="Persian" _pl_PL="Polish Poland" _pl="Polish" _polish="Polish" _pol_PL="Polish Poland" _pol="Polish" _por_BR="Portuguese Brazil" _por="Portuguese" _por_PT="Portuguese Portugal" _portuguese="Portuguese" _POSIX="English United States Computer" _ps_AF="Pashto Afghanistan" _ps="Pashto" _pt_BR="Portuguese Brazil" _pt="Portuguese" _pt_PT="Portuguese Portugal" _pus_AF="Pashto Afghanistan" _pus="Pashto" _romanian="Romanian" _ro_MD="Romanian Moldova" _root="Root" _ro="Romanian" _ro_RO="Romanian Romania" _rum_MD="Romanian Moldova" _rum="Romanian" _rum_RO="Romanian Romania" _ru_RU="Russian Russia" _ru="Russian" _rus_RU="Russian Russia" _rus="Russian" _russian="Russian" _rus_UA="Russian Ukraine" _ru_UA="Russian Ukraine" _rw="Kinyarwanda" _rw_RW="Kinyarwanda Rwanda" _sa_IN="Sanskrit India" _san_IN="Sanskrit India" _san="Sanskrit" _sa="Sanskrit" _se_FI="Northern Sami Finland" _se_NO="Northern Sami Norway" _se="Northern Sami" _sh_BA="Serbo-Croatian Bosnia and Herzegovina" _sh_CS="Serbo-Croatian Serbia and Montenegro" _sh="Serbo-Croatian" _sh_YU="Serbo-Croatian" _sid_ET="Sidamo Ethiopia" _sid="Sidamo" _si_LK="Sinhala Sri Lanka" _sin_LK="Sinhala Sri Lanka" _sin="Sinhala" _si="Sinhala" _sk_SK="Slovak Slovakia" _sk="Slovak" _slo_SK="Slovak Slovakia" _slo="Slovak" _slovak="Slovak" _slovene="Slovenian" _slovenian="Slovenian" _sl_SI="Slovenian Slovenia" _sl="Slovenian" _slv_SI="Slovenian Slovenia" _slv="Slovenian" _sme_FI="Northern Sami Finland" _sme_NO="Northern Sami Norway" _sme="Northern Sami" _so_DJ="Somali Djibouti" _so_ET="Somali Ethiopia" _so_KE="Somali Kenya" _som_DJ="Somali Djibouti" _som_ET="Somali Ethiopia" _som_KE="Somali Kenya" _som="Somali" _som_SO="Somali Somalia" _so="Somali" _so_SO="Somali Somalia" _sot_LS="Southern Sotho Lesotho" _sot="Southern Sotho" _sot_ZA="Southern Sotho South Africa" _spa_AR="Spanish Argentina" _spa_BO="Spanish Bolivia" _spa_CL="Spanish Chile" _spa_CO="Spanish Colombia" _spa_CR="Spanish Costa Rica" _spa_DO="Spanish Dominican Republic" _spa_EC="Spanish Ecuador" _spa_ES="Spanish Spain" _spa_GT="Spanish Guatemala" _spa_HN="Spanish Honduras" _spa_MX="Spanish Mexico" _spanish="Spanish" _spa_NI="Spanish Nicaragua" _spa_PA="Spanish Panama" _spa_PE="Spanish Peru" _spa_PR="Spanish Puerto Rico" _spa_PY="Spanish Paraguay" _spa="Spanish" _spa_SV="Spanish El Salvador" _spa_US="Spanish United States" _spa_UY="Spanish Uruguay" _spa_VE="Spanish Venezuela" _sq_AL="Albanian Albania" _sq="Albanian" _sr_BA="Serbian Bosnia and Herzegovina" _sr_CS="Serbian Serbia and Montenegro" _sr_Cyrl_BA="Serbian Bosnia and Herzegovina (Cyrillic)" _sr_Cyrl_CS="Serbian Serbia and Montenegro (Cyrillic)" _sr_Cyrl_ME="Serbian Montenegro (Cyrillic)" _sr_Cyrl_RS="Serbian Serbia (Cyrillic)" _sr_Cyrl="Serbian (Cyrillic)" _sr_Cyrl_YU="Serbian (Cyrillic)" _sr_Latn_BA="Serbian Bosnia and Herzegovina (Latin)" _sr_Latn_CS="Serbian Serbia and Montenegro (Latin)" _sr_Latn_ME="Serbian Montenegro (Latin)" _sr_Latn_RS="Serbian Serbia (Latin)" _sr_Latn="Serbian (Latin)" _sr_Latn_YU="Serbian (Latin)" _sr_ME="Serbian Montenegro" _srp_BA_Cyrl="Serbian Bosnia and Herzegovina (Cyrillic)" _srp_BA_Latn="Serbian Bosnia and Herzegovina (Latin)" _srp_BA="Serbian Bosnia and Herzegovina" _srp_CS_Cyrl="Serbian Serbia and Montenegro (Cyrillic)" _srp_CS_Latn="Serbian Serbia and Montenegro (Latin)" _srp_CS="Serbian Serbia and Montenegro" _srp_Cyrl="Serbian (Cyrillic)" _srp_Latn="Serbian (Latin)" _srp_ME_Cyrl="Serbian Montenegro (Cyrillic)" _srp_ME_Latn="Serbian Montenegro (Latin)" _srp_ME="Serbian Montenegro" _srp_RS_Cyrl="Serbian Serbia (Cyrillic)" _srp_RS_Latn="Serbian Serbia (Latin)" _srp_RS="Serbian Serbia" _srp="Serbian" _srp_YU_Cyrl="Serbian (Cyrillic)" _srp_YU_Latn="Serbian (Latin)" _srp_YU="Serbian" _sr_RS="Serbian Serbia" _sr="Serbian" _sr_YU="Serbian" _ss="Swati" _ss_SZ="Swati Swaziland" _ssw="Swati" _ssw_SZ="Swati Swaziland" _ssw_ZA="Swati South Africa" _ss_ZA="Swati South Africa" _st_LS="Southern Sotho Lesotho" _st="Southern Sotho" _st_ZA="Southern Sotho South Africa" _sv_FI="Swedish Finland" _sv_SE="Swedish Sweden" _sv="Swedish" _swa_KE="Swahili Kenya" _swa="Swahili" _swa_TZ="Swahili Tanzania" _swedish="Swedish" _swe_FI="Swedish Finland" _swe_SE="Swedish Sweden" _swe="Swedish" _sw_KE="Swahili Kenya" _sw="Swahili" _sw_TZ="Swahili Tanzania" _syr="Syriac" _syr_SY="Syriac Syria" _ta_IN="Tamil India" _tam_IN="Tamil India" _tam="Tamil" _ta="Tamil" _tat_RU="Tatar Russia" _tat="Tatar" _te_IN="Telugu India" _tel_IN="Telugu India" _tel="Telugu" _te="Telugu" _tg_Cyrl="Tajik (Cyrillic)" _tg_Cyrl_TJ="Tajik Tajikistan (Cyrillic)" _tgk_Cyrl="Tajik (Cyrillic)" _tgk="Tajik" _tgk_TJ_Cyrl="Tajik Tajikistan (Cyrillic)" _tgk_TJ="Tajik Tajikistan" _tgl="Tagalog" _tg="Tajik" _tg_TJ="Tajik Tajikistan" _thai="Thai" _tha="Thai" _tha_TH="Thai Thailand" _th="Thai" _th_TH="Thai Thailand" _ti_ER="Tigrinya Eritrea" _ti_ET="Tigrinya Ethiopia" _tig_ER="Tigre Eritrea" _tig="Tigre" _tir_ER="Tigrinya Eritrea" _tir_ET="Tigrinya Ethiopia" _tir="Tigrinya" _ti="Tigrinya" _tl="Tagalog" _tn="Tswana" _tn_ZA="Tswana South Africa" _ton="Tonga" _ton_TO="Tonga Tonga" _to="Tonga" _to_TO="Tonga Tonga" _tr_TR="Turkish Turkey" _tr="Turkish" _tsn="Tswana" _tsn_ZA="Tswana South Africa" _tso="Tsonga" _tso_ZA="Tsonga South Africa" _ts="Tsonga" _ts_ZA="Tsonga South Africa" _tt_RU="Tatar Russia" _tt="Tatar" _turkish="Turkish" _tur_TR="Turkish Turkey" _tur="Turkish" _ug_Arab_CN="Uighur China (Arabic)" _ug_Arab="Uighur (Arabic)" _ug_CN="Uighur China" _ug="Uighur" _uig_Arab="Uighur (Arabic)" _uig_CN_Arab="Uighur China (Arabic)" _uig_CN="Uighur China" _uig="Uighur" _ukr_UA="Ukrainian Ukraine" _ukr="Ukrainian" _uk_UA="Ukrainian Ukraine" _uk="Ukrainian" _urd_IN="Urdu India" _urd_PK="Urdu Pakistan" _urd="Urdu" _ur_IN="Urdu India" _ur_PK="Urdu Pakistan" _ur="Urdu" _uz_AF="Uzbek Afghanistan" _uz_Arab_AF="Uzbek Afghanistan (Arabic)" _uz_Arab="Uzbek (Arabic)" _uzb_AF_Arab="Uzbek Afghanistan (Arabic)" _uzb_AF="Uzbek Afghanistan" _uzb_Arab="Uzbek (Arabic)" _uzb_Cyrl="Uzbek (Cyrillic)" _uzb_Latn="Uzbek (Latin)" _uzb="Uzbek" _uzb_UZ_Cyrl="Uzbek Uzbekistan (Cyrillic)" _uzb_UZ_Latn="Uzbek Uzbekistan (Latin)" _uzb_UZ="Uzbek Uzbekistan" _uz_Cyrl="Uzbek (Cyrillic)" _uz_Cyrl_UZ="Uzbek Uzbekistan (Cyrillic)" _uz_Latn="Uzbek (Latin)" _uz_Latn_UZ="Uzbek Uzbekistan (Latin)" _uz="Uzbek" _uz_UZ="Uzbek Uzbekistan" _ven="Venda" _ven_ZA="Venda South Africa" _ve="Venda" _ve_ZA="Venda South Africa" _vie="Vietnamese" _vie_VN="Vietnamese Vietnam" _vi="Vietnamese" _vi_VN="Vietnamese Vietnam" _wal_ET="Walamo Ethiopia" _wal="Walamo" _wel_GB="Welsh United Kingdom" _wel="Welsh" _wo_Latn_SN="Wolof Senegal (Latin)" _wo_Latn="Wolof (Latin)" _wol_Latn="Wolof (Latin)" _wol_SN_Latn="Wolof Senegal (Latin)" _wol_SN="Wolof Senegal" _wol="Wolof" _wo_SN="Wolof Senegal" _wo="Wolof" _xho="Xhosa" _xho_ZA="Xhosa South Africa" _xh="Xhosa" _xh_ZA="Xhosa South Africa" _yo_NG="Yoruba Nigeria" _yor_NG="Yoruba Nigeria" _yor="Yoruba" _yo="Yoruba" _zh="Chinese" _zh_CN="Chinese China" _zh_Hans="Chinese (Simplified Han)" _zh_Hans_CN="Chinese China (Simplified Han)" _zh_Hans_HK="Chinese Hong Kong SAR China (Simplified Han)" _zh_Hans_MO="Chinese Macau SAR China (Simplified Han)" _zh_Hans_SG="Chinese Singapore (Simplified Han)" _zh_Hant="Chinese (Traditional Han)" _zh_Hant_HK="Chinese Hong Kong SAR China (Traditional Han)" _zh_Hant_MO="Chinese Macau SAR China (Traditional Han)" _zh_Hant_TW="Chinese Taiwan (Traditional Han)" _zh_HK="Chinese Hong Kong SAR China" _zh_MO="Chinese Macau SAR China" _zh_SG="Chinese Singapore" _zh_TW="Chinese Taiwan" _zul_ZA="Zulu South Africa" _zul="Zulu" _zu_ZA="Zulu South Africa" _zu="Zulu" phpsysinfo-3.4.4/data/osnames.ini000066400000000000000000000016451467431054600170230ustar00rootroot00000000000000[Android] 1.0="Apple Pie" 1.1="Banana Bread" 1.5="Cupcake" 1.6="Donut" 2.0="Eclair" 2.1="Eclair" 2.2="Froyo" 2.3="Gingerbread" 3.0="Honeycomb" 3.1="Honeycomb" 3.2="Honeycomb" 4.0="Ice Cream Sandwich" 4.1="Jelly Bean" 4.2="Jelly Bean" 4.3="Jelly Bean" 4.4="KitKat" 5.0="Lollipop" 5.1="Lollipop" 6.0="Marshmallow" 7.0="Nougat" 7.1="Nougat" 8.0="Oreo" 8.1="Oreo" 9.0="Pie" [macOS] 10.0="Cheetah" 10.1="Puma" 10.2="Jaguar" 10.3="Panther" 10.4="Tiger" 10.5="Leopard" 10.6="Snow Leopard" 10.7="Lion" 10.8="Mountain Lion" 10.9="Mavericks" 10.10="Yosemite" 10.11="El Capitan" 10.12="Sierra" 10.13="High Sierra" 10.14="Mojave" 10.15="Catalina" 11="Big Sur" 12="Monterey" 13="Ventura" 14="Sonoma" [win10] 10240="1507" 10586="1511" 14393="1607" 15063="1703" 16299="1709" 17134="1803" 17763="1809" 18362="1903" 18363="1909" 19041="2004" 19042="20H2" 19043="21H1" 19044="21H2" 19045="22H2" 21996="leaked" 22000="21H2" 22621="22H2" 22631="23H2" phpsysinfo-3.4.4/data/raspberry.ini000066400000000000000000000013671467431054600173700ustar00rootroot00000000000000[old] 2="B (PCB 1.0 Egoman)" 3="B ECN0001 (PCB 1.0 Egoman)" 4="B (PCB 2.0 Sony UK)" 5="B (PCB 2.0 Qisda)" 6="B (PCB 2.0 Egoman)" 7="A (PCB 2.0 Egoman)" 8="A (PCB 2.0 Sony UK)" 9="A (PCB 2.0 Qisda)" 13="B (PCB 2.0 Egoman)" 14="B (PCB 2.0 Sony UK)" 15="B (PCB 2.0 Qisda)" 16="B+ (PCB 1.0 Sony UK)" 17="Compute Module (PCB 1.0 Sony UK)" 18="A+ (PCB 1.1 Sony UK)" 19="B+ (PCB 1.2 Embest)" 20="Compute Module (PCB 1.0 Embest)" 21="A+ (PCB 1.1 Embest)" [model] 0="A" 1="B" 2="A+" 3="B+" 4="2 B" 5="Alpha" 6="Compute Module" 8="3 B" 9="Zero" 10="Compute Module 3" 12="Zero W" 13="3 B+" 14="3 A+" 16="Compute Module 3+" 17="4 B" 19="400" 20="Compute Module 4" 21="Compute Module 4S" 23="5" [manufacturer] 0="Sony UK" 1="Egoman" 2="Embest" 3="Sony Japan" 4="Embest" phpsysinfo-3.4.4/gfx/000077500000000000000000000000001467431054600145225ustar00rootroot00000000000000phpsysinfo-3.4.4/gfx/ajax-loader.gif000066400000000000000000000006241467431054600174020ustar00rootroot00000000000000GIF89a+ EE! NETSCAPE2.0!Created with ajaxload.info! ,+ 2˖؃ V˅6XYf'}ޚ g-Iׇ.ij> 2L! ,+ =Ď acǬ|adʡJCJp,kͱ$eoX}N,bRǯ! ,+ =0acj[o yyԠ Lc6R50G,bR! ,+ @˖ؘ~eL4GQ*t'Ů6dC]+JvE`";phpsysinfo-3.4.4/gfx/ajaxLoader.gif000066400000000000000000000110631467431054600172640ustar00rootroot00000000000000GIF89a++󦦦徾̲! NETSCAPE2.0! ,++Ik%˻gvH3YdRn3CT9P#p$a0&APL@Rʭr hvJ= V"x !+I <G|o { &rO'~0qk1& fRN|ȧ`J;1) V : B2 Z5 Atg (y4hdpf(B}o0-,89'J.1yʛ'@ q7axYm O,}7 |Z pN" Ԝ  , " d  !C_!xp@ 2*1 n@@ {$ AĈI $$+YJh&9`rK^"AЉP =xVIJ0  LrÀZ  i[ M _؈"! ,)+I49֍0VhX Gi=W8J@,(&0T)Bߍ9A8J$x W`K>Y+]Fv6'$hU ~w<a_ Ylbu~jXX< ſɽ ҬP G  b \'ΑgA>}\ 2"4@s(4 @`b0!I ހ&m hę1$@((Cb & N'عji^leMNjI j 8 FRܰpN sU! ,++Ik 8{Ϛ'r@i[8nyeb :VFo\f R$fՠ(aK"*[AIYA $⺂0{0{{~+zWz}"z?+@ff @ 6 _~  I_  X  Xң X } *$f($`G *W= 80dXNG[Y$<F>|@"/6 #8 "uX QMpTmR@+') jZf!Q'! ,++Ik{Ϛ'WfLHh0î.:&ûQMr邛!'#!X_`pރiN]I_ n@7Lx`1 utj zb e$tk qtwHGH Hf#´ŷΫ};; " ٦" q  Aٲ x *(fM,,!Ch <$"$ܼFD,., dbdĔ$&$464  trt!, 1H*\ # |PbC @aƊb1dA#K+t2Ö._j93gM#sri1h B(` PgĠ.aD/ g3l۷q2aB< Woa}- X(aCX Xc̙%j2PҞ?W,bl  ƌȓ+_|.Йڜn2 ;phpsysinfo-3.4.4/gfx/blank.gif000066400000000000000000000000611467431054600162750ustar00rootroot00000000000000GIF89a!,T;phpsysinfo-3.4.4/gfx/body.gif000066400000000000000000000010471467431054600161500ustar00rootroot00000000000000GIF89a28@<3?!,2pi('ͻ`(dihlp,tmx|T r:ШtJZجvzMţr<`bzn|N#I3}vxygVz\0xōd=cK݉M_1W*,F‡#Jċ3jS1Ə Cd)#S\ɒWIL  (ѣH3ӧƘBJj+Vj: +ׯ`*ٳ]Ȣ]˶nʝ%Lt.߿ L+xHCLʘ3牜?-04ӨNͺծcˆ{j͛-vO<μP:N]سA;phpsysinfo-3.4.4/gfx/bullet_toggle_minus.gif000066400000000000000000000015551467431054600212620ustar00rootroot00000000000000GIF89atrl|Ԕ|~t¼|vtľ|!,J H*\( ‚$JX@ t $tЀ"0ɳϞ;phpsysinfo-3.4.4/gfx/bullet_toggle_plus.gif000066400000000000000000000015571467431054600211140ustar00rootroot00000000000000GIF89atrl|Ԕ|~t¼|vtľ|!,L H*\( ‚$ $2q0^A ϟ@;phpsysinfo-3.4.4/gfx/close.gif000066400000000000000000000001061467431054600163130ustar00rootroot00000000000000GIF89a !, mڊ.sV}eZ(a[;phpsysinfo-3.4.4/gfx/down_black.gif000066400000000000000000000001011467431054600173040ustar00rootroot00000000000000GIF89a!,j/?MQqQ`.;phpsysinfo-3.4.4/gfx/down_gray.gif000066400000000000000000000001011467431054600171720ustar00rootroot00000000000000GIF89a!,j/?MQqQ`.;phpsysinfo-3.4.4/gfx/favicon.gif000066400000000000000000000016351467431054600166430ustar00rootroot00000000000000GIF89a ~|NL64fd*,dfd"$Z\ vt,.,BD&$ nl24bdDFD LNLjl.,lnl$"$^\ z|424$&$LJL!,zH*ThAĈ D`Ap0 `%Fp@pdI0`Kp ( I': D@Aї'x@ yÁ8 `ЅhӢ ;phpsysinfo-3.4.4/gfx/favicon.ico000066400000000000000000000353561467431054600166570ustar00rootroot00000000000000 h6 00 %F(  @)))--22""44**FFFttnnhh IIZZTTFFF33 TTWWcccEEETTssTTWWMM}} ss++PPPPFFFPPP[[uu33TTWWFFF!!!LLLrr==,,BBOOJJ|| VVaaIIAA,,BB++;;;WWW[[[;;; 55JJ@@$$!!QQFF!!!$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%""")))******************************************)))////////////////////////////////////////////////444333333333333333333333333333333333333333333444( @ QO111>>>(((!!99GGNNFF4499ccQQ##rrrcc EEyy LLffJJrrrdd WWDD??FFjj ??vv,,EE\\rrrVV jjuu::__]]rrr@@ yy uu++CC]]xxx###]] jjuu++CC]][[[RR JJuu;;__]]VVV33XX VVuu++CC]]AAAEEEMMMqqq'''""aa rrDDuu++CC]]rrr(((ttt((ss __55uu;;^^]]rrrEE CCuu++DD]]rrrZZ __''rr''??hhrrr777jjjRR ``XXQQ&&pp//WWWVVV]]]77 RR11//66BBSS mm//[[EEAAAQQ ~~ ||  22^^LL$$nn22FFFsssooo;;;55\\mmppggXX22%%oollooUU !!!!!!!!!!!!!!!!!!!!!!!!!!!$$ '' !!!!!!!!!!!!!!!!!!,,<<55 !!!###########################################################################"""$$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%&&&(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++***.............................................................................................---000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000///333222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222555666U666444444444444444444444444444444444444444444444444444444444444444444444444444444444444555888U(0` % us$$$ic$$333QQQQQQ;;;**CCWWaajjddXXKK1122vv CCHHzz qq99tt FFkk mm >> XX(( @@AA nnEE))''GG{{ -- MM EE,,##~~ RR MM<<]] EEXX hh MM EERR ss MM EEnn __ MM EE666666,,,BB JJ MM EEggg  VV   MM??]] EEbbb//]] 44 MM EEuuuEEuu tt,, MM EEZZZ888..uu uuCC MM EE:::++ dd33 MM??ZZ EExx cc&& MM!! EEttt** QQ MM EE|||??  LL HHCC vvSS 22tt \\\|||..  WW'' GG???&&& hh%%RR // 77zz^^HHH@@ eeWWZZiiyy HH%% @@ UU666SS qqxxwwKK 33DDDxxx222--ffooGG##00 ^^mm \\ $$3300"" ..ddyymmEE!!!"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!!!##################################################################################################################""""""%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"""$$$''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&&&$$$(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*********************************************************************************************************************************************))),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+++.............................................................................................................................................---000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222666333q444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444:::m999 <<<777555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555<<<}??? phpsysinfo-3.4.4/gfx/html.gif000066400000000000000000000001361467431054600161550ustar00rootroot00000000000000GIF89aip!,#(2m'8b[ܓid,;0(+;phpsysinfo-3.4.4/gfx/htmlrest.gif000066400000000000000000000001701467431054600170510ustar00rootroot00000000000000GIF89aպip!,%P1$u֫`z])jl483P;phpsysinfo-3.4.4/gfx/htmlwarn.gif000066400000000000000000000001701467431054600170430ustar00rootroot00000000000000GIF89aՄi܋p!,%P1$u֫`z])jl483P;phpsysinfo-3.4.4/gfx/images/000077500000000000000000000000001467431054600157675ustar00rootroot00000000000000phpsysinfo-3.4.4/gfx/images/4MLinux.png000066400000000000000000000013621467431054600177770ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME PotEXtSoftwarepaint.net 4.0.84N1IDATXGŔ=1AWhh !h4*D" %*%H y<ŕu3;sSXV*aJXV*aJXV+@^rv, 8OkCtjlX,(~ـx=rY:N* PVu=pa[ַbB@!N'R)l6*@ףAbQ.1)6F]ޯvm=^n7`;rd{hj } p\hq'ov"ZBH&#bR^WOd2 M)x$p8,cQ}X,z2Qw::xfSpHyq;"J%BxXCpdl& "~pȉ^1 SNUBa4iz}/!;JXV*aJXV*aJXV~ | ;QIENDB`phpsysinfo-3.4.4/gfx/images/AIX.png000066400000000000000000000035661467431054600171300ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYs  ~tEXtSoftwarepaint.net 4.0.84NIDATXG_herQvџ"/;"DК:FkN a]8B41퐒 xhNy*ˣ.L~}?{{摼y?{}bl6?;,[nmpvc]vR߮%t:xSl-_ b0"ǀ,WY8dG2֞>nk0@g9+!R Z\DƯ5p5u'6^uMn}̍6Ǭn.)KzXjX 0dg&lb:e{GpvB`=6z[nTu77OBd6N~ە[_W-U?xTAq-O ɜk}4'Yu{~P!DM$>{;(Α'N{Bm}"~Mf RBqlrCᐯ(r/ط}Q&A@"-!!rT^d:7`Ui7V}>U] v==E"PR UE;}%zTiIOf!qRIN:|JxBR"kC T/Bmi+wok9bsCN @ |KnME sSo(-mRD 0C`>APD!PhRPիg֓.Vb`@ɉK=Z碤 RS~-R#wt1phU"d¬xC 8V$~Ԟ ha1p0Ej(p4HJ U˒z"]eX  !? %g/233dWDʒ׋K\ˮ]R2ڔFei}Z)/=y"}{2zFEc㔨0H`CD>+1LrnSZ`!r|5ΟQP7VrW2X`V`>L+QTG OVL$d\_D~B(Rg V%9_ԝwWN#YE>g5ӏK3 yɉLpR8zê~`eXn۬ȄTUOAu5wgč@MA#ާShA A%u*\ (G+3Y@͑9kcL3eQw 'c`asu+,82spߓգ6IENDB`phpsysinfo-3.4.4/gfx/images/ALT.png000066400000000000000000000033631467431054600171220ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGD pHYs+IDATX}pTW{7dCH 2i*+6R3 @DM Xb;F CRJQ*@xK4 )}t d97Ɇ3޽<,+)zc)[Ν6|.3r27Oh;g\ `Ba3uЭh_Vak 8ۡmks|4j>9 f3;ʳʻG37t5CٞfI"1=4̈`r0pܙz^$,1Wp&4xtCp$fU(I $M,@mG8c5PV5!HwdIQEO~n\::b|/1z֦]MrԠ%zol=O%IU,]1kWeLԢ&0{%Ezǽ&c{0C4& )WT]x(R?>rFez~X~s]X1'!W}/#XƍB;bG-4S$Yuo54f< `Q܂>وM%1q]^r՛w_Coϟ{5^_@w$u<5l=ScO\@0<Z0S+P 7%\e6']ݬ!РJ-+ĤxWۊq͘o7^WB0ZZOU~v_}Tm$҅(tzq-)24~ ^-v(O}/icIVԶ(zm(w50;3:~D_9f4p%OAG\Xr'}T'IzEjXC]*jrTw#F 1?l݉GE^5߆LBoË́ןndvWA<C俧ST^u^4l p|4(䄼EVvgcU,$F،N ֣*T٦ h8ƍDcЧ>F'vrP;|k]Cj*Þ~]L<OGhE!jBEfaa <=zg8]JZ<ƴL;2'$ݘI8nFg/ތ.LߍA@/>#PMFjDq; cj1椛W0JK+>lF$P/Ptl`IN}ݣ]>tYU`<$BN=jm`@3D mb1фO/h'@'j]% nl-"+g1o? )ʃs֨#@)& X={s(`bs|ct& DEZP">a`N)쏰bY gÐ D%2C>Lrs8V (R8|~}^'bk^{=s?]6xM؅:=DM kzGD.Q^)l_Ϋ+4SlG Ehz xMh" 3B+mY-ּ,Az/': t 4"_wK2& kE<*4pZ/!uW'#n%@ ݘюJM54ei`wȘ۰ˑa8h)&e=G IyswcC[X.+ ,B#_@?8XbN<"3[tix lӥ)gC~%o&FɿIENDB`phpsysinfo-3.4.4/gfx/images/Alpine.png000066400000000000000000000017141467431054600177100ustar00rootroot00000000000000PNG  IHDR szzgAMA a pHYs8S$tEXtSoftwarePaint.NET v3.36%JIDATXGKQwiiHFW]DBc&HQFfhem)9<{q9ncM,,7-ANmǝv ߛ{v &!9yovcm6Wgo%F-8Om a uG^ Ȣ=]ӐY4U#M+ 4]1e~'C/4fee,]IJg`cSs$n,]_?|JGpb q$. &ߖ&IENDB`phpsysinfo-3.4.4/gfx/images/Amazon.png000066400000000000000000000023131467431054600177210ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME PotEXtSoftwarepaint.net 4.0.84N IDATXGWKkU1n|!oA ƕܸ.\.AZnbK"jR">ZKok'83';ɹ Lfon296wz]/gfYgKs }q̝P4VpF+9-uf$bwi,sv&4 yL$:~}7)};B";k}|BpG;]d+> 3 $ Z#$ڿM}HhK>n;|D̨XF V6$y\nLG =\K dip\qY'P3/0K")㵳#g' _B|lC3b/r2RcnkϢr1׽OjPy Z앟M~dIb1oWнys榠9p4s43h{ _%F66.`:.9Nz@  fi n2&CY$))w@DZM@~Q=-rEZw~HL(s q5E TsM"Ĺĵ*@ H⤠ Z>|]s B|N5n '6뮡>!~'!%|աɭ :4ρ K4&=p%|2s@%DٗÚQ.@ݪ|\=@_DQ`/#9z}bHnju]5| 6D:FDC1=߽znKc ~p2BD $]\Y$PiB~m-:@;tוX6KX( 1,YgK60C'_GtGƮ+}4"%DIENDB`phpsysinfo-3.4.4/gfx/images/Android.png000066400000000000000000000013711467431054600200570ustar00rootroot00000000000000PNG  IHDR szzgAMA a pHYs(JtEXtSoftwarepaint.net 4.0.84NwIDATXGcbX鉱 c'v3Y\AηB]',r>wߙ#d5 ;&>;$ " ݝroYz)swz39H|0+;A$HoUlw_Eݛ 6>7w:[?Fu ΄%jE#-ê/PPAƃ>@;nr_=?`,K5x1:+7{B}oGVa\<3nUtyܸy Haf,H"oO̟Vg )6`ayw,leЬo~'KAg`3]qؽ30xM-10[l&PZcۭyklzRcp( (@oc'*HOU =1VAzbX3a5fIENDB`phpsysinfo-3.4.4/gfx/images/Apple.png000066400000000000000000000007771467431054600175510ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsNtEXtSoftwarepaint.net 4.0.84NpIDATXGŖ=N064TH -+9mr0VVeތ8N8)жSu_F!\zbᯧb}߿b.<9]iU] )%YB { $(h sBÉ0dMG{"]׌=IENDB`phpsysinfo-3.4.4/gfx/images/Arch.png000066400000000000000000000022361467431054600173550ustar00rootroot00000000000000PNG  IHDR szzsRGBbKGD pHYs B(xtIME -IDATXý]h\EM`lۈ-BH& h(P"~$DJ}|!,-A V}Hk i 4%{gJiwd7{9g]s8:cr b>(Q 5ӶH' ־ AޜNOFIf@0kO/5S 54f"ښ͵ Ä9Gk'}ۃ /*PD%w:@0(oi&m`4&= [Zsi&8Z {bO=ja h&Lx~UJN^23VZ09Ј aoٙk8f0o(b0ULVR&< ҰR\E_ ;D@FH;')վ"H QQ2 U4hSNx:S"xl"`tSøg1YDbQ^]2^~1qcFQ:#.3 3߷ giQN UT$k/UT(sD,`|QAtFG bǦ_* yE (}D}?\׍5ʪiIENDB`phpsysinfo-3.4.4/gfx/images/Archcraft.png000066400000000000000000000026421467431054600203760ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsod7IDATXGmL[Ut,- -0lHȐF3f5Ĩ,!%h澘eY|e)2``l@Ki{}s/u^&眧=ss}z$QKJ̐]"U:_#g'_7Af,$t_\S@kT}*'@!Lс>ZɺM КFT{fk-cD\֚^ K?R' iIz+.Yd?%*d1.0{{ kgQ % ;B/Cd:,SPw`'u!Ոc UZHŋ\7Jm{%T`McDg+ ]a-fzQMBDM[aU|@V TQnL%Y9/-0z!jAf!"1zIƱKnwu5S_#"oGQͦNz|B !ioe!,Hw8X̨=PM36D hT5pm<0ԉ|!,`!3v>|"D""MOaTnJgf&;=O$~a s,q*7x0,RobtIv d)ى[ܳ1]8ɚ]f=-$Ypdg 'LqYD >Zr*%090l BK!+}g}+M M}>#.^>{*[@{}:0s}N`bXrRWM)ňiJF`ψ>b+KUJR2[YG/G  d`zaXlVdD7Ws#4c?QL^٦K> =cb~zZt@c}bIi)(R/b15ח}%}T>s*UOa׳ ݀&*KڇO{u_VuR7S}F=S8^NdbLS"nIENDB`phpsysinfo-3.4.4/gfx/images/Archman.png000066400000000000000000000034471467431054600200560ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodIDATXGWklTEnvnD3?H*@DEP h|!#b !FUԨD@+Ph>(n{fTt%s3|93r^-Ǎ=]DŢǷ8&DD.410b#@H &VdqcH8 Z!D2B0ƍ6ñ!Ɛ"@圙 WXM%q!Q~T! z4#z(u!X44nJc0䏃k@#E!?DIC& iZ!0&" chq0Z@"s ^&QG=icsث@ 4F&6ϼ4! m9-Ҷh0XU)E&LiDT 4.IT1: ̋}$8mÏVDcKBV>˦ 5oĘ _xa\OލrI'ټ`! @)dq14Baq&z.KaCmk}ʗ0oHy݅]AW54#q݄yTKfÒDvncP3sz'nOB}]~T2%QLL|+ࢋ[+}42| GKڪH1p__\̎/ =]"Rz\@}/,(+ǟ5;x܅~x 1cO̴fd%*Q$YJ9 wu#sdNu֟8qdEˠ;n?=k[[{YKMPT1zҜHTX2wsqm\,\$#u+|>{MIy &u5ՙ-ǭJJu嫈;S{AO2 w+uae'\1Ήps_۹F\#k3 ȒDM1mhjʈYsKAM+ ;yg+{)c,iA*4.=8#]9y۳rE Cڂ:GkooϨv|SgD-  {سW( TzwhMʧ;;‘_O7hpgto܉zҦ/s9b{&O30@`Yȅ']Bx'׬wj!?`Cz W}D;{MJ*r6ؤbzXn7h15 Z}9˲y;I&HI&˷k]/\5Ţ[zhj>M`Mv ,޶⡖UqxG]HHT͠ݠRZ+-n|m^e'uy{7ٷMF]7mo;"__~ơCvk=?>źHoo_`ISQhlJ4faXҀ1ħbDNn[v>'_BUU-ڹ?InfV cmRr3'SXax̃-5Nq`GzP134\pJfVa`^z_tYO KdbZZaȀ4T*Yk/v[14PfV36j>$ &Nxm! FoVnGoiX́QtgR-;! 2QtTbG"J'R`'{T<*f{l>`}d+_xE }#O0wl E'd+vݫ+d[\ c M!i)5/xˏpd[X031m R/lIpu%'a 49K%O0-'Zqu+9N7-(-V V[aEt?G1ȀA |i1$D@xj>!OPyBi,HW`WUu[ >ZgWL&6M F\.+aɴ hjExQԀ Ò$+++'+**"_7'555LN՚L$[U-cᶶ_744>8IDX֌ײG]]ѹGT#)N-(ZCl.OOOo ggxiireaNc[C.;`qKZϸʮbwvߟ c_XpB4{<=PĠh)an3!*$p'8 $yfn޶GᏋO 䏋 e-b֙HG׋PWN;*׋8!]\Tp[@G˻ɯHV?/,8iM/ U lf?>LUp u?<)*5B`nz9gUM4*"5poH$_#*ڡo}\P1T忹p.y*?ΔZJAy *8 z{76ϫT68B!hCV a *ysdjm2 18)25 hi}BLn2?`5(avaA˹ !.|W* ~*hܡ۴)ˆʪ@1odPMU7 Z$Kj E)5;`r6cdž UKg< 02D fhX&\? %v")MRH8SFQ[$Y?lXƗpk%p$!ߠ8n20\'^8ؒD* !䒿s1fa>&jAY'X=f{V^YOC>"kbbȘw7u5qbɭ_s5=z+42$p /pf^|s+%P%O}N @X;x#\ъ%\hzK5Dk--,QE|t>x)Ѫp#iWVKf1`MLf`wO QbHeCqZaH*Gj#̘<3g>jĂ;v "PxC.8֢UӯnvT CP4X Jc!5QP% |s J4[6OYD󈣐ՈX\Iѩ7k"TzфyW/Ut6u<堔)xn^8RDo.@&-[X繈."L!:8/DaOpl([ϕF3%Gc5 si,yx{Da@@,?w@&N1QkkIEǃ$H^ҽG,VsOngۮ d*UB>KG U!v: #"K}C}eܹDZc!FFIEĠWQ.4ME~|qC`!ʸM6<(;[Н9,^bF1&(IP28P(DQ1qjp=i%qHFDqHQ8Ƙ LB=1³6TRK ׄzM9VP.Qɰ,"& C*ԪC~V$bEoݰF59ԉlLIJIp;e!" HW?wI+RaW 43ן&/EKc8>r4"izfPJSp r xhQؘZ52J3T{u1wAqj,l68)GV:. (kP`( Rst#_2y3&|tM"W4T'!u1(ñ!:E[cC8Ud˓|u78iMIay*Cw_Mi(`fG>VpN^n[~{/7P&@ u$dpLTb`T&1c>GWW=v =oj~̧^]wo0y| =kPnL0B#  $cu| 8)a/~1G[sSТz{=E%tEXtdate:create2019-03-03T22:09:15+00:009ZA%tEXtdate:modify2019-03-03T22:09:15+00:00dIENDB`phpsysinfo-3.4.4/gfx/images/BigLinux.png000066400000000000000000000026341467431054600202230ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36% IDATXGWSUHyl}oBi <,P@U_VXGqG:e;_nv󺗦^'˰°u1!yoH O>-A:-]/_xynЊ}”AO}><_ E![my4doa͡9DdP[3<б%Z/aiݙ}>StpB%nC\i`zBc#p!ϯdL*rnS0vʷ _7-ʢzȷsSa [G9^j['>m0蜢.?X q͡Ue R~֚FWdJkT%2ˠ ZꙀfwCtW[ K3?)dL}a2 =wl, + }{*Rd! XC(AN:]KYb7yb?!:(,B}U2=<{jaH5hߴ 3Zρvtt )Gy$ߪ&w^H͞)B|,I4n~cNNsh9J>o/vMSx@Nfnw+:6G?.7AZP9AoԅIl8y= nN]LYkLj;NjW)RK;|y6/O~s ojҗݔ8FIf-w(]f'(&O@]@qb I0Q?`6q]Gt rQ!(X'Et y=H1&A_D΀P\`vFe>@4hD01t5Ab9x% nDSBe9d評^٠K( ~ 1#fm{9'e@k I1FXq7(wI`Kŋ^wJ$צ6\-37ɌՀܠ>p5I|aj7Pv|Zw3PiE '7址P7Ooy)C5Sʷ<b_/-MH ]0>0{%SU򩍝 ٟ6\@ٽV0O^ 00tݑ¤TG1JfUf;vhڣe,T[nj$|=xl~5Z׋T^bۖgnHC8';ijnY.JIENDB`phpsysinfo-3.4.4/gfx/images/Bluestar.png000066400000000000000000000036151467431054600202630ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsod"IDATXG{lSϹ;/!ā * eUb*RٺknR'Z4ZU P(M!$i$NI3~^ݵ1a؀_y{~c Ezm'IYHjG)<]Ax)ԘutȈLP*Mj3{CEZ۶IӢXbݮvSV<%ex 6꺊G"=S(d2,U@ -]K t 7?bc wE+(iZ4lq̫RR3? >wnmނ2#n{Eq16sz[0w[-M[d+)@fI{߂9UW[{f~( B7Cmbxǎnz==EjrQc͒b:+.׼F$2PbBX8p'I*'avZ{cI8˻3ZL5cf 1wvCt :YM/\ո $CzL3<3y5K;LgLh2m&LzK!C 7ر Xei%MR]ЦgJ}笀js*'RsÇ!h;H{ $QCY?UXCۮ/Ci To]8v={(3uҦ/ÿ>jW$'Hg5 vP3*0gދXݻ~(޾N b1mo[ggS|B@@U!ʀ,~ i^ilW Xz_#Ck&-&PRy<2N0" B4(A5 !%>2VG`Dͮ¤c(U.1";^C#s)l9W߂5 YE͋'Y|tP}% Oeh aX\HBa?:f~5w-GS>ԩm.-CjU+hlB/_ Z bCغfzsKq% J :ȳ|Ȟ'<`yۻWߎpF4%VTaz~Bi%hnl.98*d!h9w!IURWQ%xPzX۹QnD+ZDX('a03m"cv>} :: Tq١8Iɽ hqaUCH!TV}^>|{ U @sț3P;pr򣨻|fŒAG'CzW%Ÿ~ri\Dȁ`D@6܅ܹ/+~ͥ~H>;@!j:.U0= _@`&D &P^11^t= L/@SCiBn̘ ՙTAR#ŧ0m*:N˩BN]Gox(>y\T(9d ~e.S4&a ag'zV3fQr,CF!W ]b3hy1t&A eK6ӼldKƇU"ւVұr_ӱ<5= }t8-6lyR<36 ݝ}XaAe&j_AgXG[ؼz=z:nCG{wX#<=f6O$N:ny+ n\ Rb;:B`KױgϝhmmA?ɌO0fsu)+j utlܘKBM<`f:5e7h1>FDT p,Fu:~vE;v MZV{3<:jf?穃n/ t#%)ψ+™t0DQ9~¹k~;v%3Sl^Yv JNTネwzk?6ԱmwZ9LX*WPr=hUwv _o6~zLNcZDkn0;]>؅/-(9Tu4b#1۳XC]30p {GWprv٘{e&OO߀AErOaOm% CqX&-^wOy^o/*]_AK[|kՖwrsW{8,HM2Ý8y(,U#9KdRK|;]љ:?}K`L$| V<|jxf lҪP{Jn:_s(0 q|D hcH!ZQD&`nRiT7kPվUryK 4+ČjYe7σWt-It~iwnx#ʐ֡oxK laOwJuW~44:16VNzj_ZY,1%o@eKhaA,qg54 Oσb!ƚ%̢؝e830m!Jal0?,+ ;%t| 1t]u6딉D[,q !Ԇ`hOtb6Bi7du?i+t79$f5 ;w5Ծ1ʠL 87̎WLF!k82TswP=hokN|_НZY>fBȦwi0*=4MUuN`&sMiRm l %ȩğG%,zM#~bY@9H~w'>ZԯqZsi0z?(&O_}tH"%!Pͷ9hL9)T)"Us1V[m7oU =hr|o\$gdAx=u`A01C`οSE|'|(xI,Kx=A+&J R<oNR-'!}%+c&(,^֘jHJhpjMw> E o>J]T$Q&i.BF}% +p(*bB;=GuDx6*^bLbv-~ :|L<9 7e捆IENDB`phpsysinfo-3.4.4/gfx/images/Calculate.png000066400000000000000000000021201467431054600203650ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME PotEXtSoftwarepaint.net 4.0.84NIDATXGŔKQ 4 ʠ0º(-"L$"Z"l( LQ+-E)Lr!qeff

ity|9}l_-)JH(E#QFD).D_L|zk"!-\ d?[72ڕ4zI /Rה|Gm)vg4Yœͼ&%)P(E_ (rz.'.*rN¬b:6J_:-A%RD)\߻Z;t1M{x] JQ ' ML${^HNgOBZW*ԹC)I'hݚ: ۴4A-4q1X*J_SaQ54қL>u)a_<Ry\Bi F?LmL;o._kg ~}#lPL׃1o=MA΁or>6%w@&@;;$p®7 hroCՃcwmڴg TMN+ۙ tt&w+߀SA3Pa-oMY#C*s$a`wB `D7C@ALl\+p\N{˨&ե 6^ۻB@A^*7 b+ov꾻uCE qlcK ;P -ҩɐ!o?.?KlGVGb8]lm" }{46pՔj.І}|щuRqT*\C:F#6y_/oj[W!c\5MB$:p2P!-u*񪃨p~?,򄤵IENDB`phpsysinfo-3.4.4/gfx/images/CentOS.png000066400000000000000000000024561467431054600176370ustar00rootroot00000000000000PNG  IHDR szzgAMA7 pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGoTUW(11MD_O*_$$Ę41AL4 F rB[KihKdچNvL,8Veϙ}{/S!"sL9M\s (ysIxI0- ` ɳJ>^H8"yL7 -q$.zo5rY|A0KfԿR'#;}@LK=:k$0% V1_ 9N*q[|FE yx=U{Hm@r9N|`,'Iiimee9eB_v@hsQZf,J.,D3׻E,k\spy Hu:+IENDB`phpsysinfo-3.4.4/gfx/images/Chakra.png000066400000000000000000000021441467431054600176670ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME PotEXtSoftwarepaint.net 4.0.84NIDATXGVKQVA-hk-AAEa"=,Ȣ"" @*"EcѢ'R>IHBKAm$$hwwf$h=|7 cSQ됉O6f/Fu T\_crF<` ϭJ^|]\mvB.FfUhwyaf Ux` Q/2ȯӍҊ3r[6=$rxQI:"<*{{rLsO<;rH%E:bV9!_y`fnp!ܩfvC9w˷Yn HR6')j)yP|4Fͦ vÄKKe6C=r/4Y#ˋ!(eR] >0 0#(- 0 =c>kypy%-zqdMM3 cGK]@HUӷTpd`,IORN12uGf3Iܟ l mؿ\gXuljy> 0 `BS86r^YPqρ 5.Lcۂ,-]ϏHI^ʳb!Oj*{J}!\DpN )O*ǼQ9F %5:RI}/UWTVdq, HI0Hԍݔھ;љ5n=Vr2v]?": yXb>0fesmM8, pLWP| @kLKѯHˁ HdJd/9hXsb5 (5W҆WCc \)سb1ID1]LS߸oFR+ܵaX 0Nǥ~D.b~Q2n ֮ahnɐr>x%8 Lbp!>k'23JyKw1Ι؃cdtyy11B$ B8+bSg|j%Wj~I(x ,Ut1gbG(tCtF"5շ^ĖZFVF܉=(5'rb'Zb@0?^H\AFp$ (2 TN:l"jbNX$Rx||$&eSćjQ"J:u4CcdcukK+D Xłfdr[0A)Ƒ[2ބdڨv:w6IiF*96j2Jc < 0ܒLb˱O;{KH%G2ky5K밲/X,"ON?"d6IV`E-LdF*9WTUQMN8XFֈ E85cOC{(@F*9|-7jUF`J.v*+mVV$8l+#< ˰8)}#i8n> !ȓh/`#,2gIENDB`phpsysinfo-3.4.4/gfx/images/ClearOS.png000066400000000000000000000055251467431054600177740ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGD pHYsod 3IDATXÝiU3ۻ|\vl'oljҦ5M$T ET JYXҪ%4*TMc$M;.ױľݿǽ6Y(F:Fsy9gu HNJa\kBP`DP"DdՂlof;?[og/$'̻z[=aRjVlsfvA:zqQ 8tExb >iV(k%RDJf4sN.bR6\(!'.B3*V+v^~B1Lxb[~Tl02m-?ƇJ-mRbfY0i4A+.Ǣ"l綍79gV`- =s4[e9Iנ1= >NIά."W0ZY pJqD3 sE1sd?8pb)@ ZeKl6he]s 45mXiB*MewQlj]A?lz1ma\+@$)KQA&L+?Dc%Iڔ 8RO7m)#M1YV(#xaJ91lp@HPbf)sm`Mئܵk\J(h\ok\M̹k=ֲ!NJFEL8Iz"/cD4;+5&"V67 z.w. `#~|O0^DD!axTI"\VJ`acEuO:l-06 x*&i"; گ}q0#Oy䗉%PۚUzY^Q8롃_z JNϣ=nu{HM̘WX]Zšdŀ=(U gCu+u5N^ XwC-βeh8sd 6_"(ϨdSF.527x㴳.ZJgK#e z4(XyKEYR)w^ppG%=N -̙ÜaE _R3sxi_Q G߁&3}YK"m#y"kوJ\'r:13kkk4waKH rVôY˩6Vut[nEd H*$7&M9H >QDx :^j7?\oB6|z4AjhUb'v Xc]J%%MF:8u8Dda@aU@K RH|~h}{H3|moP@Fê@/}tTo oiﮫԾt095FQ*(kj A̪"?@EKIb$[2ƶ$+:Yf{Qǎ/o'kXhF%tEXtdate:create2019-03-03T22:09:15+00:009ZA%tEXtdate:modify2019-03-03T22:09:15+00:00dtEXtSoftwarepaint.net 4.0.84NIENDB`phpsysinfo-3.4.4/gfx/images/Cloud.png000066400000000000000000000015151467431054600175450ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME PotEXtSoftwarepaint.net 4.0.84NIDATXGRQ [ #GBH_@B P@ ddww @omK+yן VR«J^}-|<m=&VҁRK)1Vg5 ~^qx8φ&^]<ė9{L[IdyP hFq6? LB%mD4Z@|ŬM\y#Z?TچPke"*#NlF:U?3C=@#W&Ejb36&&l "XB> EDѳr@%TIqA&lʫoU0ꁾ4Q[eH<#ǽr.mAgF2bzդf I f0f`hM"pY Qy.dw4hA@5X; f.$ƚ ā3PБp'@ݩ.3h&G\}+9F(91{\JAN cC +y%5JKL ΚIENDB`phpsysinfo-3.4.4/gfx/images/Cobalt.png000066400000000000000000000036451467431054600177110ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGyPe_M9NML9Z$Ij҂Z:-bk-@Q@\@]\ # ,M 4CS=sNwse)x;9=/^(u-B4ȥK76_lWP<+.YlҩXD]ܺ_Ν;kn2<\,%%$\7ۃq%KIJPjji 55 g$nܼBC7%'?[Vˡ#JvuXde햢")wk$~?Bߏ/ ]XR3HIT>,j* B.E<#}FC -b$#+]IyiT\"Σg$ȩ[JI=݇'2=yTnnOwJ 6&V }ZU[J|'#&[="QoԚf5'Ic'.%lwl4!{$9X%ˀ!kPTMV?-Բ"E&pf޵M$ 'ZEH'&N>A C87JWW׫U|T bmη^b&TX&~6Gi[tFDc*ROpŞAJUh!)pUgW-Zq"C`Fh]؛5 @{Hf]![7 f  qUӢ͕|Z1Q H՜/{ TLkY"=~' .{!Z8mJ#/uc߼~cJ>RhKFSK kJ9 VIKO]G Ÿ316`ce9|)j"hQ}# p@na053 gúQQeH QxG2͎xuaC(224ah7,h0չ#= 1N!!@$ A$E[x>gYfKM.:i.4DH" J<0ikz00` v{1&q iaЂ0 ۶gHZZ+gLT \j(B*Cueza`Z~<~J3O-ޓ>R0& IENDB`phpsysinfo-3.4.4/gfx/images/Container.png000066400000000000000000000014661467431054600204260ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGMkA TE- ŚZg[AARi3*͵ xSF̆7iT*:vͦM>wvfvU-euf4L[(w#zpUISUd+.<@=˘ ;~k\43?L&n*pCyZBvFw P䶭^wZ7~z/8*#xl\:D/Ɛ=@@`M[gU` ,G@SXU`ieLAɍoSݸnD `SU`:p{3Yò>Bs@լ #`}&Ɖ[14P Ei[v)۷b,.리o"Sæm,_ 7 )%|h@Փu-F #Pf P罪jC^\eV7ih9_Cm`RY0q7c8PڊB+ V<]8g gjSqb{J&${2z 2,;*.NW$IC{yXIENDB`phpsysinfo-3.4.4/gfx/images/CoreOS.png000066400000000000000000000017401467431054600176310ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME PotEXtSoftwarepaint.net 4.0.84NIDATXGKTA0迩/Q}-I4HS0v(,u!v()@E4]`vY,uYm{ә=ڇg<3gfi Ʃ};?]M~Ra[to"$ j~5ORzٚ^zp1@wua]^'#bfۺ( Bye)6.RZ.\t5"φqsI@,<=׍R$g^l}34s1OFd`40G`?DQ z" x&О^Jšʪ.1V@?Z&,®E gu*x7U,d2G#FH &5 0L(}nֹ [bE9zyZM;9|?5n# &vXe˃ rk^AsvLFO`;I6 C1n,9 G*g  tcbw Q;U!KDo009Vc9.PoqZS}oNHQGY}8'yL Țغ+;.zٙkl񉿔n2ӱ# oNݘڬt={. Hvqo(d`?Y ;@z (6J8 q)5LX\xШ' {R]v$i{O W#J/om뜂&݂$d| M0J#KkM|9at8IENDB`phpsysinfo-3.4.4/gfx/images/Crux.png000066400000000000000000000036221467431054600174210ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGD pHYs B(xIDATXõiP1huAѺjlBjR$5&T1.u wE*\5AE1!Y}ϿRg&s\ 5GIL/DDCg{RJdEx_D^I*VTvSHe}Ul  G:z W*VuЕt$")wYkR~hҶ*V- Ɏdrrh:=yKRi0wWev8C(6Y)) b>i/BWtfvS&KOAMC0a7:V\&Kkİm(#UXb=*W65o~/w87Znػ}Α5$uQT1:oǘ662WrђqIG24)$y}?9y XqHHFe2d Pffݽc.ay0szg /4fѼm -J) o^քvVA4LͿ_T4 &YaN9|Bq…. T>7"TbqḨV6ņwo :OO .2Z/a1UkQܭ/kWjCSS@e@KڶnrX~$*9-N" 5$A2~ R2Yyx"x| D^RRgΑ^t5ttߒ(C)\Fi,?9QoGp #/ ۱sh(eA)iuh+/smw:2-Im걷i8PWcc)=2؛\(@:JG)\e%[?#cլ;gL3ɶkn9i}!k0QvHW^Ʋ\P@rWC {)C<GʶTáp#d n4ꔄy=nj3p-Nx䀬߫iAuP#}KHᅹqRzH'2AMehnT47BS4=8; Wz.YSe[*uo }U}H;|u>:pC]=އ` V}5TNB>1L[|U΢}"h[`yn;{qAd͡333g[!"4"j4&Ooz5MYJ}z-Q`bi-ON6(\SDDgd:*C'N| .HV(yћ|mN V(8*/gK|{_hG97!K@DA;cD>&n vu$Gz'j%ۯM=QAҐ5e8pJ9wZp̾3#уsj+,k<|{ݫo"8hءGፈ&Pq!⿷fa&)/#9+F! p~*`f@/#sň= ^H/a5z89F-&r"`հF}ALy` 1>` ^ܽ+`-Qc9`LfKB_%JD!Tմe9qL9b[=-9qZ"qsg:y ހVj"S V }sg:yps!P/G; 垼b!~D15il<Ƶ>Ӏ)g9GĄ告]IENDB`phpsysinfo-3.4.4/gfx/images/Debian.png000066400000000000000000000021371467431054600176620ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYstIME PotEXtSoftwarepaint.net 4.0.84NIDATXGMlLQ/:G_!>E,"i̻oF"ʂ 6V6>ĢMDX JElPj̨.#݈:͙LޛϴKNsϽ{=G;-Uv٪4mM޶ykkzsJ)l:XAc3^*.8v)XtGĝIX<6cТK'2zVCKfApqӅbs󁣅(^aUa`3*,Nn#g3/p?XeUq(tY塿!<{Uo*ܕ W - .N&BHa yaq?N[#UTQN'0ѭr׻ۓlK"t-Uݠ@u}"6*x@Ձ?;0v  ~յ/w4˪B~^^ҕ[ӟVז'%d11R,؉n We =dʞdEfFBTn}x?~IENDB`phpsysinfo-3.4.4/gfx/images/Deepin.png000066400000000000000000000046311467431054600177050ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84N IDATXG pSWMjH!M0m2iiKi3%I&0eR$$d@Mpu` >" m=>,ɲ$KO-'?=h3߬vȇǧ;ҧllϭlӯld7vv3{{xGjr~oe^}̐˦zM^ւK1O gOА7`'#3c<1 ARa2T_*pKcx5Df8?]-oRr(1B5uEH/v0$p-Tz F1 Q$"|h(+m>|+z–1I0x̦w}y|Gd瑮1z`ekA #u!@q6yIrAA;㞙(joG->+j|Cap@ ΰ}/ʃ$ڐgV 1K\m5y~}Uz%nL3>ly HkLZDۓ#Nl7@P#9wB%u#d+/֡9W7jDPC}Ҕt5AeSAzCi"NCI.г;he~aWFoz.d_1TF`w#(9W N{LW~X9e$}s>"FMUJ>;Y3 1=脒)gy;F7E攸afuuw?a[k:Zn '^vks4W\Bw"̓uݎ߫ R׼կy|7Imr5EθVxڦ_tSE56..+E1!|}E5VU\Ñ8pg\?7}}LXxڢaܯ.nvY3?fj̧l3 ZLj5 04٭pF\0]6 1]hwDv Ɨհfe&'\KN"`,0d2v{U^]jg$ۼ/4z7hQG:;T8}٥D4`&$-w# jPxjk-Ja|nQ_NT)-d%nW*9oQOsj MA]^Aj1LSaFW8 "a ~-@wGt(Bbb+ htAi-WBt>@ Jg8i5I=cmତrA'LX!1\>A'4v<`H!k5ȾhDlϋt=__{!#C<]˳6h*r(#EFx@LHAo_ |=zl[~)x9}cE2uHK+$^0 ƃki [?kL:n;0 7\w7v>ǻY`55ZGk8ۉ;E)ӭMuVb6ZrD%^ -xX3/>N)(獶hԏZL6C wtz 䯓M|6#hF+Z0f9h1[UN>nYqm2owhi-%]sn_țmfҖVȻ.G["q-l4A.W,|q~ɇX|f2Xͽea/ aSvPDNyP `#(ivߝW(41<u!t p%a UNȎvf->f Dy"՛ Y֨z.IF3YMl!8#sDS2>Aq%T0U',n܍^iX:vV=~}>`G}IENDB`phpsysinfo-3.4.4/gfx/images/Devuan.png000066400000000000000000000012211467431054600177130ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXG=HQQPiE ԖP(KCBTAKE/dob"(";8<>z? s^FZpцH Yc\ lBf\'L&[Sڅ+xF+E,l5BN),uz [#b'1 k#Q؀l"6yЄkilM ڑ-71dۮ/6Ȓ;" Yq],T~D8*bNTWO{ ?|Q|Rſc58Xޠ+#Rb6v~}/+tn7hglJy~<Mj)u(Uܣ0=Êcх҂^GLQ? w.ue;6?pP:^ʌ4obe U`1MSze6_/ܤV_鉮vk~ރh6euSML]]ފuGz0|YpYcɈB?TuFKe ->eAMUkwGxQ^a%=)+ 6fdSL&J,|$l*ԍ,r e@>Y8rA*k*k_mx5SRz/u߷> 1eV[d䲔[0'C&ļ#;;iӭ/'b2<̳ #A|O'^Olj_IV!]w?FpiwI})f$ tr,u~qRDn"5GJ-Q֭\mo+:G^΁0]QV !G R3d9gx~Ob6TXJ܆z -cx q!%<^Z[6K"{}<C u<揕lWtl{*Dow )Хd҈U^w\HG{Q u$#~ A/ ~Z(M C6㞡VRFDD/--_&[y*%%&7yo[YYnMda K6YB#s)5O[ZtAk#$wz^8$p[@?7wU:RS[J,I`C72d"%e@b u8c? Nػ>sǴ@ϟtyg?oIENDB`phpsysinfo-3.4.4/gfx/images/DrayOS.png000066400000000000000000000042421467431054600176400ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsod7IDATXGuW}pUW{{yyIچŒP$Bb?FZ*! M2Nk?:m:laLS[Q U`:S! %{=sΞ{sB$lTAZfLILE;w>/{ x|ovo R $V2) Yco3NaN(#TS ]\WL7J<(hZc(32:vJvUZlk{7sH&& B!~WDEY@E%T8`T'׸M\gmo7.E{\DW?ª֪5H^ {hBmVǺ Ģbx7" ϳe‘yǝg};:`Q|EyzLw zxV (r5Bna |y@,z"2"$)˜\p!ܖi(CAe"? t3:C/32G?v|BmJ'rp%e 8C-wAmP}sCö^!p=`g;\;AA9`l<R(>;>PU lkb:#IY}7@})j#^XH66H Uz79a,[ $Rf7~wEQ]u-#C~c 3ѣbqiͯp<ʺܶS(Vn&(s(B/c1_/ &rqYAyAp ]_ 1z(4s 12H?mSy Yг7"y}{~$KaE [\{߻mHg:8nuZܡ>zRVYa{+jJp''{1tBDQbD*ꐗ_D0< eWFӶrA!WwdyL0)g-CP[sKD I:̉k"xdV%*=Ot0mp}F?7)$ Pϭa5uA}naD(T'YpVyԺu&#3{)%&U6~vSW&Y#josA“.U 4&VzXgx aCK#S xb"^)3ў= SQ/zޫ[H+ mP0bW7}֎p#py<F֦r!=KB7ef jIJ}4s4W/JތԢ+!n*g]gb],4Ϥ${,}7ؑ~)YNni ;H|(a֧峑d/$Yl2$яMzpND`r8슼=$I}bgG@fX̬6z9T#\Zi\27u*$[SsF1pb 2lIL)r,ɫԼŠBC~r 0f}^nȉ3N1.msf߂޾VsV.C~zm \uzs1@jIENDB`phpsysinfo-3.4.4/gfx/images/EasyOS.png000066400000000000000000000041261467431054600176430ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodIDATXGW PeYvA ,AyP1H5B"$0Qj+4MSqb&[$6 E[&Hk#v!Ԩ䵆Dzea;f={~???1i$ $3HHHn4TDΎ{h$$DDƒ8CXV^ӳd$aَvwwN Њ0fs2b|I悮:񘐀}y4F ; 6d9@B@RNty#/+$#w"rF(Ai˰ ߵJuЯG^%"}s9I()\ \ND#D.]p[uںs$(Hmdỹ`x{MA__?,!Ab+ \\\@)m1 mY+nY;$PܑuGgͱp3O筒d`8 z#NTaǻ#X,nn\r^!Л~ !,KǓ> Nv@Jڍ9F@XXGǨz7Kf!&I(_l"\ZCrb(REb)~2H5hxRH3C&jOI@^ zo;wb^b,<=h.b !]uV((f 3s9N Vho0? c0ى򥭽"W```W_{hmzF Oil8CPϾK +ʥ111+3җA–@Dt,>);砢mT)`iAUEl,|Oe!!:B X o+f'apȊv:VP*<<|Ҵ456FΝYZ>V & ̎ v8 pKܜ 5&R;C!~3cVL̍\JC8 BFɫQҰj域 :\vbV)Xyvz/KU,@&[ɜ1ցSgÙk)|rxalPV*7O:((ܱNn{j) #``GM  0zL 4DÔ`פS|҅'{9ںV`i"s}& mdT fMZX6 6_]ů׿1G;=͇;ú5P)Q[DOG~rt0\"2kZ81ǫ F.ϜC"3(.Z,(zAEYN:;;hhϞexX"71XinU:#*,ҮOX^^Gx>Ю3h ֽOnDrxOeQzL&nat¢ƒ]ǭ:;tb'ғ0]3 g'QnbmR"DOlwtDRGHZF<"w@ R5|[j,Sxۭf]Xf"2Lmmo9ǜ3%3P7<.>6V8q?p[; "ٴ+Jw|[EcRPON xckot @ji4p&AiL9qaH/Po."5U Z!a\.?Eՙr*(6jD{6Ow7q. F o_z/WG:jZI۴kVl|!SBmՈO6?<]> P@Zsk#+?gZ.N I`&IDO@ rٵ] a5Wo uuMIENDB`phpsysinfo-3.4.4/gfx/images/Eisfair.png000066400000000000000000000045721467431054600200670ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGWkP[g?NvvvgU;v݈JRo,*`U`(rH  !Hr1" rOKYig|}{ChB~8{F8AC77mnp8|9TC|Znn:fG!L&3_GG{V7ix.011B&ldfe"Mw$NVf&՞A=|F;a0LovbX5xrx)\ݏ'm8؀4 g`xfnd6mw7W4zooljLIM|H V bYK%dZ QPønq l݄hFEcKYY #z8r vnyyy[Kk 5&#cXBh7ېP"ƠȎ<|<ff:hu4:q֨kgX~]8Tk))e ;'(^r7>Ҹ ٻ"KT '8%H='jbS0i9 Ib pQAtqpɼ<ւ`dRTPU-Cq5,|tkЙ~%yB԰ [6RqI@ DEe%*-1)7nV %)HN)GLb)CzV1^k/qρ H+E=!!~090nW43YnsfND:޾E.cbǶ}cH$BFOg;z_DDNa*fS.Wq%b-&JT=K0xDrR\"VhVPIJG!fzLtJ~g]״!QeM4p` h,׳BC/JahCu$ֶa/pwT3)*%3)W⛞JuEcE\A\Ϡm >`" S0m;&!cۿHR@g ܾɍVGw#r9vB^MAi8HAD32)9[(~oZKI.Z>}a&G5^D$TaZ cA;qEanA1&&.'G&$mBTz,+NZe%G1d;İ *a]OT%dwI1|% D<΀?>"`-mA7gݸX@9\5dkV9/]'?CH|q.{b_8N3TgO4c`)Q!meϣgȸnmYO(I6vm4 qB# OtN觉ƣ[nb8 .AD[ R܁nc?ƬkB6@c=jv|AVT%h(|~:+T)0d"'kAC69_/@;, uDe 0ɗ;{-"#Bnx:A9 !=2te,-"R `٪%-;GnTyFr#Vvh]iP9\sA u]2 UHHEjudtb|r6LlZVIHe9ybȶ.,$Y<3Tᭃ(jA߀XgV>MhmeQĆL NUe,;rz%::^tnjvt2_eKܳS;~F<vcΝpjw*iDݨr'=рd"۽S#&NfEHBA1 >cdԥ^Op>KuXKp O#!jy` >CfhR;Z,q޺^;;`G]bY47`Xzۈi{c?}>He%A(^ӳN YIKdIJk3!C3-F؝OQmgh~Ow@V{6Ϟp3nXݡzEL-Wɟ3}oDd$B74l>U\?D>!5ը|/)]բNǁQ[W摯";;{C|!/|ɹ(,,{1WjtKWSs*e˿0y >0IENDB`phpsysinfo-3.4.4/gfx/images/Elive.png000066400000000000000000000045571467431054600175540ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsod IDATXGypouXdٖdO6)PR-LJ4L0%S4SN BtC68ll %aҮ]ɀ gfz~w~<"-*J`i}yQu}SFs`Pꀠ J%ݓچ,Y<'╥ZoP~k3zӒ:@VT"Xxy=^XH\|E)6.߷q l`&JG[n5h50 % .ƞ.qApk*,=SlpE-'+j XJ< $r9Her`$R!h*7jM\ J&5V5gzr^ iiK.]H$Rifx`Μ6V~{ @_[0TilUpYw,_TEJ 4^8f3^'"gGNJ}ꕯYX DXweS+]*xp𡾚}/l>pG'ZcJݬܹ:a4xHꬼ8SQv+$qvwJ_S)EL!iq!Au \D1RRLΉb_("Shg͟ߺm~V#z4x%JM\&kfvX`;X:6!hgQ * "|lVP?Κ6dS o9h8|y3w=(v7Bu1Z/@v'AyN 8b_GwUc?qt/ںgb]U=+4){^[ڞ- E.m(*kl,vW׵~$tm7@E8l.HV^A(:=EY@(LJKj{_P8 旱`%g+[2!Y߁0XwY4赾.֩f+&RM!h{}(ifM z[#cF:8F'\^\4TVQ0|'8lX` YVLx} 5 GR"V Y`ར.;|kο]Wwl,Ws:keY&ms?p8 M d7T8V7o]<:OD~Q!?_]|Ʉeto h򨐻)&7/@a'd3۲Xp !5$& Jf^'_p4G&D܆>R8=+@{FGD'`-:ɝm-nQ@K-]2 XT67,ac_=h}~}(i%? \ u$3N|qS kAW`K鱦>gѢ#VIdF`ݍ"ɯFCҤRL[ M^0LT8&.8/C/A7|}q^*`?Lts#[O1-x~Ԉ]lJr&a2VbAIENDB`phpsysinfo-3.4.4/gfx/images/EndeavourOS.png000066400000000000000000000021411467431054600206650ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%IDATXGYlMAMŖxBx%ZQ*%JCȭP͕ViXKy&ֈ(*RE339so3盙י9/X؅L>ekL+n⾒)6: W9-;*7uɀթ SO2clu }F38P%c]љaYchXiI2>o>Pʯ}VD-, DlW%X@<pEØS@]OGźSh&4P>1a NX;\Hg <'ps-kU,Y}"^X%§ޢ3vZbг_/۰~-JITc$w$S1^ 0ҝ%Ko3wC*)XC3Ԯ@ icIiCPg} F}Tz_J!L(#\?!:ڻVr`!>ǫGޡD^o`INE #**{{M~Z)6?a%XKlBI:GCGG w{h~tm5bzunW) K6h.>/=_+ŦiP됼& 7 ])o >/ɽ A[/svNvh @>茷 N%͂<?2Pq| >ǜ,gI~lڸlkΥ< "b'+C;F; <0~gM4&L،ܾ8,]M9soSI}>Ŷ /OW7x> 疽Uo5<DJ&+@"g^|2`ٶsoЭoPR f ѯ$,vе˭{1>)0ou]KekFq[>ݺc7KrL?Z *3D(P602+0a`QXA"ìs`*m zcsy(0|Ċ__W䰧̎AT&I*+:S‘B$GӶhn' [ytyt/b51-IduΑV|X[ٕf*?8d;EâAZb-P^6X1W-}oORAꭹ`xscVu?rGX_AYt4qyt#:\ X\WCpx ŭ ט"T:;=T t]nʻKwqȲ`2T){a76$;|bڀxaЯR 2i!fs>Ba ,\SI:tjz!|٫!ǡA5hi,7;nC*`qʳm,W{R_ڵhK;4Fx=^Sck4*Oz `Fi2!3s-ٜ !Y0uč!HZ"~R\,g/UfB2s AN Ba]{/!q/,> 9^LMfaAXg ܜ34"t?X  wD#YHp!tH֚gV+" #ӳ'4*RO$%<ɉ2|"s;XtQPIdtL%v_*g ZJ=3Au=sl"` Y+ra塒@\r?vÿr}@-N)L8Rj,45pMxڊwTY!c*ʚ=[0#_`4Zm톑vwN`zSl󓖇 S؋bT5Sa[ۍ^tLU޳Ui5z=ܞI\V(׫ۏp/һQWf=$@m"\̈DJޙsR=ΘAjQx9Nh!NOP/a&&cf>۟ߵŒ9Km_2Vѻ|fW_H,D* uht6۪-^\XʭFh"lk6‚нAdŠv,K4^?Vs[JMGo:,F_NJ)`q8nZw4Ku=}sϽW`O<}^Em۾UbU,,]Ɋ$_r؟J@,d: S .U,^ `؄[  S#bl#{vO]{[|gNkHM!5/2H%X$r׊ߐ2"!ID^8b~gAJ%DQq(F{ u^|b<2`-,7ΎLS=‹%:dN0iӧ SgC=/^:Ȩp o5QS_%TV a/89u?=rP^/|rϣ a`{!ڲX۰zzx"wU1XX(BQZg83 I /ӟK{-QW5/Pe-z_}jgp #NxšȈU@GFK$Vr# RP@l8Bb=@"A/sz~)?M:{ *.ML8^@sX4Pvw:FŽHw߲h1X ҂,4VV azR{e9zhu;e1vtTc%r[;+%ġmhh %9PDPT|3CAQĪիr!7;Uhj(k#&.F!)9 ;_kǃ jw6l!*Zt檟\Ar'{X#,TssS/K{}^J9 ɜ\v]߸031FuE;:':Vixp6BvB17T,^5%xuG~+!cs-^:*%#)ftz2A-m,afjfўK}]O5{[]Tȝ_2sBq±V˂ae[ep1\wAV烛7'Hgg{wc o9S[2wơ=8o<֖< UO@ee`'XN 뉎ƢE<OszٳXQtjKJ BgC,%>057()}3\]@/tz2]ض4܀,?x` h[v72Ǘѡ{wkX>c_`fN=zTdsguI9_[Y—`cpw4m5XZ6M-R;؍y27Ry˖ R"5HMOWW.-J ΄$o1_O&wtF4($X[f3#f;͖gpy8_ovC\#*# -mLDj9w"ǝ3 cDkȾvL aǃo&뀿`g{D{("H\cZ.82>%*ZcniYp]\duPα&b݉5ɜ oo\J{+ñGy>X2AT,/P7g|&WHIKfLw^!,G`Tk'rrSه| <w;[vq+:Yؒ٧^nnOgG*MV`ώސhxژ,yشe#!|㣤4_061X uR,MY .^Z*&,:IENDB`phpsysinfo-3.4.4/gfx/images/Fatdog.png000066400000000000000000000053321467431054600177040ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36% KIDATXGWyTGBp03 1]!H2á4Fc5*0E$KA`od~A œՊׯ_-n…q...>>>Kۍ˧vtt(?(84L)7ޅW*** 6nռynhkkcɒ%GPp06l؀˗CCSTGYYقҗs@?y+a{ihh T89|@bw} //bia9X cͷ!ݖb[d9~qtt&bsXDtL{^-Q ;wJW n/E8h;Iq;q6x#Uv-B8p!u^<ХHU$§p^borNI ޛq-EpIG!łoNn$JPOBj$f99j3Q/fx-TsRkAj,HnK%6DNpN&(84 Tgf<Vӱ}-UG=4Q+f} w̑a\#Y {-PO[:*F j5U.XjfeD|2M]o:$o*^Gs2 r*HYg@z'Ut M:ԉS$ '?8_JDV8111<uTЖQBBb2>EBRX[$hH?M#CUCI1d%QL֖+BdEy1U 895^SSuF8U?3ñ0}Fδ  t-'imY"Ҟ-B]7[tynfXCXl?|wYhh<-,,`~⦊Ӧhm٦.0EǷB<:/B([ F=?4Ri gkG.9qqq$!!jHߢFȣȧ! 3.Lp 43 1|"t̰g2ACCok>Vg|a!, o)e wYk:RIH E]ƌ?F!1ϟQPHh(rk|93@%CTe*ipZDJ(H"#5@ 3b4Q1a̢阈kml߾48 mPYX8Eԧ5\ET_"|\' 0\].Gnn.Sn9t萘z3xM"p7~G{6p_ kWЙ c'3Хb)#̜̜;dxb__t6L iT⥁g:kz;N5ʨţ:Iga3իDJC566N..>Jn@pPΤ&>o<I :_Wrg018 vD筬7⨦&rFDҷlٲ}Ν[@Ȥ/=y7`eGyNץOZGJ 9JnM)IENDB`phpsysinfo-3.4.4/gfx/images/Fedora.png000066400000000000000000000020061467431054600176730ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodIDATXGIhA +F( bFK r\ŃK@q"^\ԃA1&= M]=&3ӝޫy^UVH≚h*H|DOQ&K `s3lDP;:}' G-՗>l>YRt`hj["(tc;[, Q[ՍpW(B\j>W&y\3w8L?瞛={Lhpˎu?Ͻq]3[+B 9L n]3TP2Tej m'd+A+FCzTyC(Gr!ϏNdq"ʸR2l `[} jkG(Ҍ"+P2TG3Pr2-B5 "yԁJ(ō /gl±%hfa#jGkQd dʲI9H(,g9*!o0|>TA3(S Nȇ,hcc'Z9"h/e1 FnDWWqf9n.A跚epqs $VQo: ~ӍtQd}ې-twV*Q?ۃ]@ECzbJGy7xKzt<AS|<ؒ.6yQ /᷻2kvrzC^B5ehN%Ӫ)D}GQiY(:uF?Z[sg &}!b (>=baQoqVGGΠGgQ.މMM M+@Dq)l2D'ߙ\X'vPuEOgЊNچ2y d2 řY(J>UגylG]F'.ГQ1zjQ4^Ĥ(#"%vXc*xݷa^#(/j~^[(vqsT4Ñ4ͅ9()o5'X̯^BAG( r1)d6q>AP kLAQk݋v@?D~ϡU=r!<Υa.x#3LQҜ {Ѝ99H<I8 4/Y/o+<8nT 4 C@x>s2$s1S*c}/,\+m皥kFN-L%7y|n&+U>*@lD3C cPhذ Ç]Ζ=2s~Rj`cz.\U:(cl !kC`1!|[h\,:5U}r9ZOI8C0T  >u0~ n}ge㭁U>s5Xpr#@GWǗ?73ԡOy,9sgSa6y~k..sI;s Mz(]@( nj)IENDB`phpsysinfo-3.4.4/gfx/images/FreeBSD.png000066400000000000000000000050021467431054600177040ustar00rootroot00000000000000PNG  IHDR szzgAMA7tEXtSoftwareAdobe ImageReadyqe< IDATXÝi\U{ezd$LȆPƄҠXZeHr_ZĥbqAEEdXH0f`Y6tz[GN${{YD 8H)I&υ(prQ} @;q 8@ ˉT*e&X"HJ)SRʤBz8yؘ>sLFH@FRen׾?06v7Sw ys;D6mr.ZhѬYZrl0LT.[ӓçN<|bD<ª-j݂ ?o;֫DTue,>\?}eSƶ [\u+/j1 UIX_}#>ȳMWt-"/vv+k5g|VϤVxt6\4/aMm7`6-{U:cDuEf>.1_]x@I }Z<ϊ־:xc˿uKTxeLQ\"E. (WH;/來 x)柅ccް#эl:EhmNaAhs l/G44Cx'f<…,Zxq3s}oPJ%/_ly68~k8;șXGG,\27C54% $m]g2\y33f3{LkgS?z͇b2:vH]<:zuhy{~^ASIIX%%ei|2J##dgjru7} fK[[ת%-,'*ū,j`7߶w88 x#@xS.S.)3i).m.d%=dj"˗/nM&gau&#O* baUW I К/<T491k=\bb ;:fxf/=/<;6\,ʅ~ A@ԶIS" б,BZ@>'񎜠<nrr4W()ZtP UAjQH*~OQJfJY{5HZiaD$Dk9]RJZZ X)goYqʐ32" x| 2ts~ @V u6 2zO >ujB661 &u4" FN`׸j5Zx0B%ÎED7dXk{vL Itb ´.k&ÝG 2gsٳ@?p9pp䉦uWV,WW:eJtbfB'BoÅD7$ڱe2dM\|LHhH@suVӨ?}ۏ~zĉ>B׌uW.ݰvUsMLALhB` m0 Ga$usH|K윈7ng5|ghnMvF)'-j4I1Dskgb]<=;xhv>f2_2UKx[hau&E%bKAg=^}G> :߰^bٴHde9vg3ΖFI3^g/,{MWCf]8`fC0[+f ]~۬DIENDB`phpsysinfo-3.4.4/gfx/images/FreeEOS.png000066400000000000000000000035431467431054600177320ustar00rootroot00000000000000PNG  IHDR szzgAMA a pHYs(JtEXtSoftwarepaint.net 4.0.84NIDATXGŗsUf"-TRBL$,۲!as$$H쮹mM IEE)_Ǚ]I̙_u39W:Ov skflƲNf3Bgr_*7N1 dGcI ҥ/ G:dX{!MЍE3Ex@=kON5qnE%hoHN٪<5F%hi!(R3 n^ړ oo[=}dS +}s蝱A}5ZJ#u~@o@GRz>"%Q&cjV %)|Tn?UGA/֛KK{Wh, c&:TAFK木:teLLOu@IfwQ[ȸ@X7]vkĮh_C^_eD*UZ͖iwqWBVa; 5m£{]Tg!p%Mg[MZ I?Gںh[ӽ뎗w;qc2$,߬SEƤ1)Zjc?b)ת -tں *J{:/2]6^Ye'"up=Έfy &q&.VZEONhk$}MV%ĥٵ>sN:DHecmBj5]TąC+Ц)wo''/]\7<, [=GwOwd@)pJ ~ M`R_\Q^EP^{:j8%ʐb7U ~/F)ؙ扰~I=4?^zXp9R?٩.T n>lc#ƎjOщ#ϭLaiH| UN$ cMhtт@9@V S hGG9R 9 D n $clzkˏNJ#۔xٶb@qVMBK|GMswKwϔsjcH-Z w\[k TҚadvy"Tkʷèz~m]7H~"Al(%aRnvpv%-35ւ]_8xR"N:XeG߷+;@s48T5z Hh0K\|6PЏu9ĂeNHn5(|XmXdhhq'*cd{t:̓ZM6SԔZ˃U]V[9rl%}fZ 23f&4oyu?tV&VJ.7Q(Kk 't"7[* Zm6^w򫇰mx:{QJt*B?)i2.yf+sX@*Y4RZZ ǫ.^rL/OkXv=j֡oy/AC+pjbF^۠:[h<K( 73ɫqW7q~| y"j~28YgX{lE٤K f%2 PЄt|hA  n5Ӄ[|wba]ʾK*qzʁHTv:oܒ%-1,UR*oL ӵ)Tpa? "]Lc=1ǎXڭX^ Ux C}&ʲr "a Ĩ`h&Mg!r KdɠR8%HRz*"*'QPgnK0 W2m6LbNF6+iɉ8wa,7zpXZn* | }o.%Wo|kxy^̅Bt:4Ũ i4XXY@.23Ću}lDh pP1[tJM̩`=ܻ{Ii|dEcrɘE٨4YYlR(+p~8+I"916u1[n(F6Gj_؊_O?͛8AvZr?ؠ3!=9 /Y!ǿ֠ J T`#(bn-:gK~I嫯LJ_͏`Q4RjTrz17Qk_ܒGv(f4m* P N||!voė|?%νM4*?1cҥSNY/ 4#aa.vLɀב}q L~p?p G:q>dH;;=5E~{ =jcJVm&R h = ']3"|ѧ~f]t"b*gJGvˣJ{6[Pbd@36l5)PF6sHr Vw,0L8.aɽbH+oǮ-SIkoCĬ1-1+̖*CiWrnMW5-|5M17/3ĉGy:{v, U*2 *)~6Rh2;x^|p{b?{^*25q ࿢PlVKeZ(-mv9on NM"ڶsk( BXJzl9X+MIENDB`phpsysinfo-3.4.4/gfx/images/Frugalware.png000066400000000000000000000030211467431054600205700ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGD(IDATXˋlWkG9U}}q"B@328P8p8s@ ıA "d(AH&z^>Nͽq{Rgovo}k}^~ h}syf#v/~^_$G&Pw&sGi)Q=aK^ ~xtrƪw̠n K?gyYIn'8:lg~lfj\@!彲= ̧)I| ! 0նE;n33æ6LG|r m6 U⺢T8TeɢtjH.dmy͗>;׼ǎu;#f{ ]xU@0\z'6{N,QݮUe5VQ{;OxzPSB7tm꒫u!! /~vGKL^B+4" LȂnĘ>'^w Uy5Sf#:ԋjM|n7_.UPoII:X=˵40`^W^Toƛ7,`x8.ތ(X-Xݛ"4P5lc"0Q.׺Sx|#\A_%ZU6*Z"'@h/Ld"MCbCRS݁2T̂w`@Z7B0y Eg䪐~!qrĪhw)|^(] $/RBDxG`Nf3/IRftDU'O>ʞJFhD6̹A ~6kGdƶH(tD-9ū fc$:0N $8*MU]-\/i&vSJM)wYJ:o 36@xZ׀8Ql3=}m[rzyI-Ә§41F'$O<gAb݇\LϘ3̔VWSPؘ6h*ڇ>}bJj^F4/bDAT4"ԖFIbR4ZIsnsf\Μx΃osom;#֍Qyp%e{ޟHr|`:ʋgD7NKW=0<&V+@=wgGyCwg+N0 3cG9|o;uA'9o!WsLJdݎ[햍LaDa¥Li~ayOox)C;o[&YOP rl&.߷;<);ǁU Y}N(0pV)@S?x'yNw{6;o'!RKnhFDn};ﺝv3nX-@خo{v(: ePs dǻi+X=(ґBhvnA&ƻAjT6൥`h@Y2-B\ @eV6Aj2ɂ^aȷX8ճWу2yѻD(Hx]B!ϝdcOgw^^ lCPvI)$}/q&%?tnX' S~ZDYtTKӜm 6~+ͭ㓃=;[mJJ~¹lÿ?<8!Q.2PHcxp3WT dI.yђd#"vWuC}rX6JaN^^:^^stjZLiIf!,$ ߷`h+ߚ7\8GJ莋wyxUЪHJ'$UbjU1,Wqv98PAZ<1E|7!wn 1xY 6$H՜UiV ̕%7$ ҉fT̫u&X- 1 ,"(-@ڣ6 blIrP5HDAL!QEM@U MfzTJJ>wE1n(sU}HLqWC -MPXdOO{`)x/T2's_HGSFR 3(R($PX$OSbOUu۟8硧|S7FޓT% EI͔](WL: EN)F9x17oruuWǿ+ٜ%tEXtdate:create2019-03-03T22:09:15+00:009ZA%tEXtdate:modify2019-03-03T22:09:15+00:00dIENDB`phpsysinfo-3.4.4/gfx/images/Garuda.png000066400000000000000000000035021467431054600177000ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%IDATXGWiLgxZkcmE 6%֭nik DRu"(n `Zm pYdyFnVӛ|y/3={"^ijzLIS\_*ni모*XK#3h&^LZ睮ZQh_Uwunٍ4IK^V{ bW=nq2uޏxf5u{F $]Hb'peC[s bkq)&!vԑHi>?XO7E1.|f44L$z VV:~Q9-XDB .$UNbC%T;&x`>o5-M][rRV1ErP_PJ|Ȯ+K,3長&[p:Jቑ yvSYq ]Q+NN7^  ia8=}^bT 2_]oʶHA~(k;hl6̬1=5y[s^fəDa >U&NԆ{o;;(ZQX5p3CM$ Ad1dDb"hlGr'U9 O:_L>aM4~\2{E WGo|r[HͿM:|~8:T08fN ^:-#CNؙNܯ9"Os&B/jk˴Ӝ›y<>pDg_Lp{bv<1d+} p?aup]̽pMQLoE14<͎nL}ɶSБ$Yqm{oxvqú'ב/`"h6|&<b?as1p?X^rYlҥb<(7ۡi$qf5zyp ?\fETЃGFF>5.ݢtחydp>?dpUL +[r3Lh:|"q~ēOd-E{pX~^HL_lPnL* @ q ᐒC1g.j^Ss* x,?W/ |r!%,(ö)UߪNM Dڧ)悅aK.-(AdUj'ː=`|`iq_:)>[|"υ8D6Hd@@=X_pHl1bR7[zE@[Jyt?+! G}1C%w2R=[Bz}ԉ{+'N,eTY$=&ׯ$_Iwt`ٖ`ٜROQ#Sb։wÏx~([{i-IENDB`phpsysinfo-3.4.4/gfx/images/Generations.png000066400000000000000000000037271467431054600207640ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYs(JtEXtSoftwarepaint.net 4.0.84N)IDATXGW[oe= |0h1񅨉7*4\" \*ȭ@J\ -~z-m_`BϜYͷO|{$)06bGxDbJ8U`?EoukJ=t$ٯ¼"nHNxLhO tu u#uVB̩/Db mU{@::ɸ{7:꼮wvNzGy_ /.I$$}Z* 43FF LF77Gu*RD< [\XըB%P=A6$] I "BI^F[*"#I8fI$?F$-iXW;@ee&ºz$"ռ5͌ ר/ V$.pn \ }(/JK7qA)5 uDDM #A3wj(.+*"ЫWK K<#]"r@-Uq]-ÓpEX?H VKv^V/Xw8{6"s?>SQ*n xbTS1$*ǎY.`cQF.$!U]yG7e\ ҇Rb/%*x^!ƷEZ`S6W``^@NH?n{ې"d\J55Q\ g}b-\,] ׶G]:&뤢٠Ɩʶ#27io|v5zUfo\#3>'셋W" ѠR8ڐC{44|Ǖ@fGy |t^dǩd?XJu6w*48pCB$ |歘Xj?xuVKE7g7l͋l N@'07 >m|X@WzӖ߹>~ƫmT!' Hmk88ܜwHUl;oo 7M3g#PGU Qjgp5vsxm!\ [ǟ9s+ErX9ss3g jfY۷怪9]9T`!}zZxE^,_߹ؘM8Gm3eLBc!y+RAMTދpA<߼73H'1Z&IqEy XI)qQ6ZQ> )dW {,03Tb%vI*x+Z* &,bY$Kh3pU6z/4sy6DB*mI@e JJ3 V}>0H ۖ-T:&m )2QURb璝%W^Wx'd LRvZwu< P}w&F+U6ި <&;@|An,l"ioJp0*wC'wXzOI]Ma JH5 hsB!~pzv IARm\K신IRsN`pSp*>Dr_G1a]74#h!^K܇pQ9_䱆S^E$Ud>NFbpn)Tɭ<>\ÿNlT_6IENDB`phpsysinfo-3.4.4/gfx/images/Gentoo.png000066400000000000000000000041601467431054600177310ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGYL;UQ5}TQ[R*TuF>کi63Id2}o6K  bcva1ְ6c8v:Ws=۽| [`8[Y;EeRdbLBT[9@&z-Ii~eŔøqSS8)aee(S,4ճ @Uldlo {v`m &&gC@O ԆEMCOHŦOjV࿜`sxLz j;JKVwjTKi3{jEGI֑utC,P$?)]@[C *+he#kq$)3e :L@k hhP^)v霯|(KF˨'v ,6%'A@U>Ao-}@S dRBvҳz]0s< ⱥ}j=*(w ) bܸA,/ }k8 :ThBt綶5oMxn\irLTLا[\}N>bEY̮1NCuG HTVzb0<{ʗr-Q̴' `krShDh4mi`D#C\imǜZ޾r!IBt*%*duBi98Y]P)+02 QK۩Z-&.hoq{^w._ بTŖ#5 tjN##@(%ITW@Ϟ;p VHDtD,nWAV _TC.F<49<)A^CqX"aqdcp`#h2m1A%Cpb.L"7/ <Iw Ru.R< >hCy4d;b4OmE"z>%çT;b:q v^{#hټmqzĈ2>tuT.{l/qf |U3*Eǻ epMuJkgy)|5,\ -;;B!5#1vX_|N+?[^:\8d}-3"݊ D3g̮эt=$ wıᬺp²w'g]溻GC2R5|#I;_cy4ISkSm~D,6n~NAk3!kNt6$%Ủ[!ҟP:eV$m*,On.ccgpAٍZ\JQo+@RfÃzIռޜM'=5O͹[pdVKRo/@dx?5c0혰PQ MS?U/:B#/Ggb/I))H!C*~cUD GG0ʳصEU}σFc=%8HOڢO  mImc}FqQ/D{!x M߈Dh76<<$I/CN8>^ύ&?|pmaD[0-2/}*.06Va^f8!v!gװ '\``؅,{c c X qq VBP QS[0}|n^ e ܑѾ"M)bWDLYzÝp=Rz&pLWib9``e8M; 7 V.Gpjq.W1^) ,` q̆gMh:]g"b^-/T&6n2-;0%!f:#!E¡c. MR3Auc5-ЋA 3 1͂ysECUX@KOyWvn3ɧ.q~yɟo7AJFa6r?TA٫xptɌ&=D7MU\cH1I κu?NQ &|+I7 w&sIQG_#% (nDH{JJ7+ '{ynNC EN)_Xaxۺ<%4jWR)*!%kPdpo~%r|)ʆYΒ~NƯ)%b0&)ُ ͆kPb`_v E4@hĬ,,} xPsN~_3aʚxM,X٤&*-NUrۗ[t!t LK,].?[`1 lvd] u{U uU. MSB`S+7jTBHNDk KHՂ,Θڸ!cE{z2^YW`_1'̌``?8A(0C>H^ p&'氙2'%HDRʄyZqNmL:(b%!QFQܯ"3qU+f sGFЁ:r#3P09*M PJQbj vcDEZˈcڄ^ù3``6Ĺ[i#ʎH8gvLŹtr.4yTL" "=ޡClf7Ac)ta fk(V Pi;<-f!kndyjJ{APEm{sfFn2TaLQtqvVC7UHEIf 'rGWv]W{_Qg4$1Z>{;rx8 =do3,-^?Ivĕ3^E Sӛ Qg- !۞ǿMC1WB'gk76>@.#ф5eT#ryg?חGf #5I X\IENDB`phpsysinfo-3.4.4/gfx/images/HPUX.png000066400000000000000000000022001467431054600172530ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYs  ~tEXtSoftwarepaint.net 4.0.84NIDATXGT[h\UfL:i'c:$N"B ?R!b٢4ThRјb㇠`b ִhc5IZf1ܳ9g}^ZfdFfd ,~7#ZX[ܹUc",ovc?f1]gu>%8QGY҅|˯˱Qb#p5wHr"lWlڲEčl1JeUKᘳ`=V M/_}/MLb"fl˞NXkke,J[q})4P+Ws&1; ?;\ƅ+1|Qt5擝YCAUK_A:x;2"~1&ér-7@uwa;x 6*b=5gŒr`I(cB"o5|b9y2sVyx#xڪ`.:_Tl vΩ& sɇ 4>f"34 M񠉆p ]5zh= W˘G{++}BNCTZ֨\m=yH\`OJ#"3-)&nv>9&=9eOjf(㘗 I;yH3A?1CD^V{iV5lwY9v_<%| gHvk?R =jC}:qDRY[X[oz[z%:$7N7$7/psZ14z;/R7,{uX9o.n{ wFK9؃Ø-$ L$?Jb,Ug7M'}x=+1H×YU >5ru,/?frWoAIENDB`phpsysinfo-3.4.4/gfx/images/Haiku.png000066400000000000000000000043001467431054600175330ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGD pHYs  IDATXW{PT=pA1RGvV8 !V$U3AA 4h| "jGءdanWcJjkcU *Ns>Ι{͎%)@.> ڢJ?\%J[61d2 hb:SuLSNphM+^\⻌i&&+'PK@.r) @fZW{f#̲U=w(Q:(~}*]7 xTv&7VzXeEգ,êzVĜ3<0<2n{YDewAr*hʏ˨®<175߼Ixθߑ.A )~ֻh(lEs(> Hq+7X9t&kȆ򾻈2bK4!85j$<}ėߧ"F<<88<6 \++?YQ!0k_pLf#NgLK^Bn]  ǡ`/8W]C}fispN [E} +`+t}Yds.ٔUص|}ǰ6\CmeG;9 >j'\ Ry@(b#0+H%> WZD =,r?})jEpch)"=PTHG#&SZشl^Ok5{ yWn[O&8O:8Gy1pOG|W?u$l(0hbsx9̑OUmlCيzї9oBF8EeT?ʡP.yb,1 a1( DkC%5~=W]C}ef?@srp*i^ xR?{jl[㡨u-{y_>èGe.TxE!n ?~|Cؒq5 tnq8~zQu /^IH/Uv3pn+aieD")h Fx#o:+$80鞜Ϯkw Czd`0E L=}(!(!knJ*CQ^ (O0dIvCAn44:՗)T[(v.V5(F3v k)K.몕碒`X%tEXtdate:create2019-03-03T22:09:15+00:009ZA%tEXtdate:modify2019-03-03T22:09:15+00:00dIENDB`phpsysinfo-3.4.4/gfx/images/Handy.png000066400000000000000000000032071467431054600175420ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%IDATXGWkle.r `CBLL$Bj5Aݝ1.2:6`[~ֵtڕtoweWٛyT|ETy*Owᆏ}g˪V]¶Z쩐BdߌXwarU3(5GC(p}o`,S$U*.# #6_11[qCS #.L@[3Ř?l-4,0a`;UsրHxlDn0u3Xq #uVI (s "] &1kd+NH.AiD|sӴXvvD#a|Ui¬-)R* Ƃ%Y2fJx.We Ĝ1܉0@ߧLZ{ S4  vP8E(2=xWوGhl/1`_ ŅW[}0T0?U n <,^H7 ;>4ڱ._(2s ?%^/6H4[:QeMn-:ʷi$h$?F'^;Ck(3ReȖPp$LV.̔3%^DȔlǛE`u˘Ne|~&PU54goj&ƍ@|pH\<Ӈk7\~mAWƎ(9NĎQX}J-0T)!ة'8%a9={ĘmTx۩Zp->F@ hw ULSY>"6ԴQ'ӏ&ti@vkmb[eH[E}!W {GFgD1pX pqS^-!¶I0 U J3:-:8z`y ynA7ӣm=KP5wna }xG`ADêz<4T S:-Z/Vl*G8WXlAY܀2UCW*Ö 5YkљfL&&lZxK V3%KvR<8f!i!*>q It9K]0 zЖ vo附B[hΏhoj1CZh,(DgՠMMkׁb4_㪠>oא^t@z>r @ĺ9s0k^ٱ?,x>3An[A솾stX aA܊ׄqz=x!n^ǸL„v,@s7Fq\A1lwsry6ɨhM)8 b)q/%. PK&dۋR(َp LFf-Ƽ 8Fې@w܌6Xd1z/Щ 4q]~"Mm^Gm3.^i/xOdIENDB`phpsysinfo-3.4.4/gfx/images/IPFire.png000066400000000000000000000052351467431054600176200ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGDC pHYs  IDATXåYlG3-wj__vl$v8mBi4imڔ,*UHw!vlr&+4Bɵ7vD\Եw}ֹz<|rЀDK ^Orsepww?aX/ l6mnFd4[e2I/wKiUXQg fn+?!!"+RKl2I",Z_Lz~`ԭу6 &2IU6k&frͲ)F2 Gs5eM}^=|ERxiYt"C  S6%+%4]kjhGvX3F;جhV JXJLbiwԓ=O'z([En{'xlCCPDp )Dd|@aIGDX(g/ |DV|:BMX LZNCB)&WէwknG/2@ZKfZ4Y%0Ea,4v}<=7'P-Vvyv8#1BKf3 286ƌV4B̛ |fooJč@ԀPVoV#JEej5f+0nX釼J*.>)~ݍ'穪óM2& Fh?~]Im@O7:[E>*h-X ߢߣ"T.n.Ra ̅ ։cgq dJvdKv4p)}KǬ*w'ʼtB?~}j^j+4sir?]L+?y$[3q巨m#{?c좽-O0_.2x he}DryS^W{>~v,q|n9_sSj!hk{̆~5_B;\#y|.BKb Fa򒉮ά/~9hw&^?0]-UXzytܻxX|#בHLd{=*|VѪQQ ܾq9sg-XċC,/ f憞3aUdK2{vҌ'ASM u@DG"k9|kI[iZ9O<ƉJ嫍w-|rX05Rϸ. &i* r(/S)E>b9'Έ%>+M!ɭBg|+XX@ wUl9]9&~f jLC8Ƥlm45o\$}yG/;>Gxmdq<6wt ux , ]% &FccǢ$2PF&o앆5:P

r=`~/̱7~J^fWpB S| :Q2.Zfq50W_ʒ+-PfX\'xF: Y+WMV 7_yӬ%8b.<&ЄM_h%58Bbbm,Ap1IyTuh|)!eX`-{ ښy2%tEXtdate:create2019-03-03T22:09:15+00:009ZA%tEXtdate:modify2019-03-03T22:09:15+00:00d2tEXtLicensehttp://en.wikipedia.org/wiki/Public_domain?tEXtSourceWikimedia CommonsS6tEXtSource_URLhttp://commons.wikimedia.org/wiki/Main_Page-IENDB`phpsysinfo-3.4.4/gfx/images/IYCC.png000066400000000000000000000022141467431054600172230ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGO[e3~&.u&#“ lٌMYd 2BIւl$[8еJzN{iv-tm9VYQ/Fsn]}y-ȓ'NpaA{=Yð_Z )Σ^3tOНO<б>h.$;MmZ_왲Pa]xj Ld,ؖ@fRGtz ʹn^TuPz|W[3k P{H{ qÒm8B<,D~r!d0Q}s#wHrbXk :0I[sbl7XXɩ{.svYhC>S\cx)+VcYqY.Cx{YbU ۱NjcDIj8t珁- ĹgZR8en~!q0KM  fǾu'00pj4O ^wi&H  `TEzy>+$Tl݌FIb{ɞ%{0q ha}\sCO(8y9zmnU+%9Y ̈PFU=,GBF5-]h0 vl$Y§~M, K?U9/C0ٓ%1+kuhrpp&o149(@8M?P6= ^Z=EDT" ׏=5.a%D5~[:ٯDbo}z'Z7);ϰzQV,b-"`WBm j5e}1e^UmoM` /k[x8)s[0C> 7 'k3液77U@\0dlm qϑҼ,-[In^oyC+YoWt@h22=[ 0\zHa}nw+\f [P==A6gWE?fKO]v_M*_SKռ[}$B,e\}+(U2 Qws~֯!T+(#%2C%Ďg)HZҘI R/~T:iB5.PIENDB`phpsysinfo-3.4.4/gfx/images/KDEneon.png000066400000000000000000000052721467431054600177660ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36% +IDATXGipS5KgI!3-$74 MڄIN4&lE’}$˲ly_d[e ,X H0L![{f~{{λ?Ծ7Ud_Wk{<݄m9sz&jjS 66uc4kV%V _5H:t?Z]+?rXRM/¿z0Љߴf9K 0#wp~M~UX@U+r}pԃu0_hlGxYkkIM 5_x-"fU~ۂZP;qQE3t6Lޟrpa ilfIt;&1*XfQ`Gg-^o0M"P55*u!wЅjWhf\/<ԚǼar!{P?‰o lai'Z4>O;?73ڬ:&Oڶu\~F݈uZ`hFf  `wW+tcC(,T=0)EbzؤOY@\=3? ۷c`$\ Y76XJ-Ny=[ F%ީ3&,PEYg ԣ>|Vj,uIt BQs  Z02DP aAM-FF ,=XZN}_8`/=mǧ2/Rwtx&f\ZX*(8[KݦxAndkL#Ջ-`)iZ%>/sb ܸf,!*tWIlE71PcH`RAv2$',G>a|T[jr:{6<2>Zoc•)Xj-UE.sᗓ6=.[BxRK)Naܘ5Ņ5(`i^"SAGH>PuF0ޫT!M(?X4bʈ>??7'V{,6+/#lE>^FΕ""Jeڂ,g9@ab-J=}‰>qcܹsf+X\#1͝|>NYT N@ t ^CۋHQ9߇MM?Vs-Rr.<ԉ 0ӋDN,+(CDau-…Mn H}^i1CK5)j'rRB8,"gL >x'B+8 *ց"46j6Eu"10w6NB<0y")!\X|qw!$ٔxWbg)߀ n9dlF\sݦئm@v{b"x:/2`ԈU0 $y"I~ \2|R@ ~#B)q0/][Ez,W@?PøH aJMP\0Ic`%XD4'{>)ħd6ckI$hN-ٹg9G Ƞ h6ǰTm1A92x 8nj`&s$@i/RtKR/+xf{ MBخ!r}#X+&![vb )Aw v!r M`PfK7~Ahs6$!9cv  ϻm,ׇ5NW݄WK&oBD QzgG6r\Q |l)@ew#H_b/ytV9*ߊЬ D噡p"ٍjQ, Q®A}H >Ȱ:>yt6X!j"xV_H(3>"ˌYH;Z'mg4MpAGNauIȲv=yAI#R IBc NdTFu-_(1=rGWXF%^ OSᨦ "(G()BȁtaqdɩwP8)B)PacH~)Z>W?~l!ݓ̆*T o)!yobĆYՈH,=v ""^u:w3E#Bc[b4*؆.|]۔<8rv-’+tA)lH U*d^*[sx@q}/vqH\G>L ^iuwd!)9cqldyDHM)EP,X9JdXؐ@}7FH.Ywů?c_-/j|"#*NE wAd8$m{.ÛzR{Lcߚn_lSצFr-.2 CN5dWc{Q=Iېe&j&n69a 2ءIENDB`phpsysinfo-3.4.4/gfx/images/KaOS.png000066400000000000000000000043211467431054600172720ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a cHRMz&u0`:pQ<tEXtSoftwarePaint.NET v3.5.11GB7)IDATXGW PTG%VyA5eb2Ժ&*HbD# A \9"]ΈnrM3fvk_7q A1/E^3^H$B!e_Zw?&]fK({xCW3S+k?w872_=}.U0ORep&#;s# {Yx;3yf=sf~`ݱ}%i+9}yjD6d&-PD&c7j4(bnb*'Z(}NT䓗mb$ϵpAc#ź*0q,BUF y@O{j}O]OA(N:^WM]wr-R|2)ٛ:]/@I\1{wqoE&'0t7 c8*2.WpO(yBƩk XᗇoHض-׹ܪJ\2ĻR2 ~6'KThҝcjgC5[JYDO!\P5Lrofi`AL%X#QTC}kmALA.` f7V r)jo Æ Bz0'&y܈+D DbS2}$ Շ ]ܜ燖G\#[Dod Qz YWqbɆHVqH׺5@JĔ[ǧw$ޓdUB x\`!@ d^]heKb7MDaӬ p ty̫U@Ua>b7M,;A8~ٿ 2V|!9 q=3+wgZS@*6ܱL5_(ݖӡ`k@!i`36g.cpK\9D0ː̳NբDTnM۫4ZnuR+?3i6;4a4-\q9Q‚Ll]5eCnfpw; X]6?6J1l[=Ja [w Tܒ/R^aVazp0!oHP@" :4 8 ܲ(Nk; w=wicZ#lފ* #2,3ћ ;'1f-o1OϮѶ\ ("ׁv`@]"fGOT%mCIy?ʾ23j@=2)fi2اvxKEZ^ꀀ4]QݵC }c ޓ믜KG3JJ}'(Iv j̽g.Y 릾?`+HO$`-^4X2Gc˝5/xBTDڌ隅s^ŕTP{[Y8$sDO3LyzmEOQ@xF@:+P qaQ xJa z>?t ~ c=>|b? }LV{#Pc*WI#S=R-;m*Yn7tl=s>Q+G P&*GŃW8g&lvQ. jo>h]uU"ӓ>XC3GZtNG &D? \IY6'k*;*8|Eq + !4`rH8Etzʾ}1D$*{[G5\QE`QL9t27K [K 1vZ])v8񾅈:EUpF[D7g@Rog'.4t`2lU),,pYҲKIof&v =iUSOt,IʛgIENDB`phpsysinfo-3.4.4/gfx/images/Kaisen.png000066400000000000000000000017111467431054600177070ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%:IDATXG]hQ7mef-7$2ʤy ")-b%oq](7ȅS[ʟ"/ߙOw֧<^Y6^uL(07Pm{;q% p|*1S^*^vX;M*T) G.FK@o]کZqvm6s 0S:mڂ~O0B iP`@q4 ڼ±707J'uQ[+eON2*VXa! U~rKG Ct?_ lڴ8Zz~,$>&0_@Xefjc \m};/W>*)Q@'+f`4 Qes-fIxlSG~y0?js}/s+C}O4NaۧOn (nnvHi8IwȮo<n)_?y"uPZ71c _' J}|3u+fT0_7/˫GR@Ƭ*V "No8 ̚ݳ'c8t󷏓hg3tE;ڮ^hp K;[QQ aN 0mN4E;C2jj`@ҳC -wÛ7qp~$LJYaaU40!RٶT`{0}Cj'zX> F/XUw+4IENDB`phpsysinfo-3.4.4/gfx/images/Kodachi.png000066400000000000000000000036311467431054600200420ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsod.IDATXGWp~ݽNBB,U:h02+APimjӎЎUPq !1SZft[5$!ܑ|{%G3}2~o/_6DPjH #&ϻ? nEՕ+0ŘZ=РsX"~jB׻0&ϼG/Ib&"SGՂ{p QT+r]~)BG‘Zp&y[M16^T_SPK)REgEsJǻeur>#q/ʣ :D*@ZIh+'B,(P=k;;>f@5ֱ8J,D`hd*lJ#@;>;lRumDbUB>nM(;;d 0a6I35* =܁'Uzo uMJ!i彽gh;Q@9/VKWN)BLw)$kFdӵu$pi[/qʁw`&+%?bR͐Ȥ0r$v{Vma_ .X0H8 s?/Iγ8,Ks9N|,F(ރ4v ufo[KKC, uwո9rR!:XX"6`)P _.n뱳\3CCC!?Hm'@>F\^EwqKJ<,5u5MoeY'nVd4č4:O)x;K̙̂1>.ߠkr~uȒ+p˲`&$%umGV6ڹX$¼ȯs.^5훸|q\&[:`/tYHT\OZOt愧C UL} ӌ理m;s^R)x:>U/DhGm}z=Sm̀B\RcPAH,f?L%WRnA-n#w10zskot@W9g!Avq&Sjʤ_+r7wbsKiCzc|fq+XP$  AYO`*ڇ8nl NVPʧ ToN' 9rpOJ> Ql{%XAeк)i 2b=Ɇ8fHhP:V3/;Y݈.&(F"L.8~5Қ>'j||sQ۰\hm&LEiǃQHүUZs堦F~utͦ\8F1qn`K%Ca·ؠmϯT6G;Fu$LjLʃJ턐o/cU7ؖf:k:.x-;UFǡ lZ׍>~8Xɀwe[z:A&ÞepKZ+_t@k̟7oM*R!LHig49ӜK####j!yՄ<#[\ ι,,)A(D0B(< Ǵ9%f͍zŤ( &?+ _sG͙Y]cf:-<}7o<|?'E9zco4-yȲYHC{`],>p/ @1|kJ:pp߾5{քz_Ư[~\@BIENDB`phpsysinfo-3.4.4/gfx/images/Korora.png000066400000000000000000000020231467431054600177270ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME PotEXtSoftwarepaint.net 4.0.84NRIDATXGWNSQ|1hAQ052DdPJAA#AE2JLA1"@)CFcZini-agO랳>g3qFJ^ 7)r|6LlWn^eQY_w0ÃwI`{y\Ͱ}$_!6fy@=p>^X $ߎXJa5H Λ)&٘6tg:;3&rE:ݲl6+Kmomxv"%6fvf5 !b%%y)>105 [D./ǁ5;$ivQ?FpfsR[S% x3Fd J y;oq󻺵IRE nKj$8Kq!w"YOW[:[%V欬c.(:$ǧQly1]I x9t/0:qۧ\[ %=pfpfXB=8WS"َ,ij#U1t(">RX[@u#_G/@/UؚpoInNFPozeciU0*JXOǩ~b"Eاs;XdQjʦg! n@_P}])3~@1"?Z*J tl"΋*յkq?1xj(T \Yc=[5$]V@lj5_wz;d6#kAV/D.$̌Zc@2IENDB`phpsysinfo-3.4.4/gfx/images/LFS.png000066400000000000000000000015541467431054600171260ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXG=nAF#}Ds8|"8F"""D8"B' $$v5ښ3]]]W5mye.X`WϞnΟO`nu׊8Dz9KƶtuoaJ,Hך;wīE%%syS2WL t^a / cbI&) ^ns&n>ޗaCq8< P}ωvg2;Vii".; h6yO[ N)P8d@59#n3WJkgdgx5@v˥]Oެn7o/q0W'3l0.__y1 A ɚA,i=oM 5a݂s85+p*cb}INS81:UXs np@'@G_❸y>iNO@aMܽP@c2,`AD(A4xr>ŭs 9bY\4س;4AB29D%}v @68bNXCn^OIX rC<GNJCf4oxUIENDB`phpsysinfo-3.4.4/gfx/images/LXLE.png000066400000000000000000000021331467431054600172400ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%IDATXGWAV]y)dQQ3԰|fPMvN>;v:!r7]l98̽|f޹S% ꅤlVٸNfO" LWMgK Oj *&N󼼎J' 0: p7IAw&"pVx <‘J_X!;^J{T^TM0]}/(wc5[Mvw蒴>dNPs05L\ͅ A6uz˧2݊H:pM E@'+*,j+.PZA,p]WYN4)C5CwW+; #/!UrHH>/cݪ "t63>^ a?3@N ]@WV/jG*8Ξ,b?IAj<g#ȏZH6<f8_g6Y̠#סŌE˒fho?s԰%g+Nn6U-bQٳ%T[Uc4=B͜]xjAdԜSЫxUe @ЀҴ\KM9$oIHlb+i r1%Q?OcM3HX?ȱb@'X@bh&'@wdV,)k2Цϗl!%Fm @_0iyVeyw-'1п`a`b2;J9 *2%ub֌F\ @mb4j<{ ~>hIENDB`phpsysinfo-3.4.4/gfx/images/Laclin.png000066400000000000000000000030021467431054600176720ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%sIDATXGW[H[Ǽ`$&a=)jЛId:&JGW"!̰R(FэRq4Yߞ=Ό33lo*`׮]n /_~ڵ֚/]Tw°c#GėW__Ǐ[N/??'N j\ŋ16~r4.֎[axx|\\О={"WWWڰaU*ϡ[R`` EFFѣG)44t&&&*Xɩ &lle:tHņ<(`8V^ "8y pww作0逸'mڴl!|pND؀";psNdJMM%N ;vEak_ņ/MD&{yyǩi``PwޥͥÇ͛- [C^$Ձ#h4'jmm% bkẍ́OUݻw{kl>~(ݭ  JL/h-yŵƍSO|.VuhLA%+ ߊ_J066F}}}433#077GN(-[ʇ߿_tvsJVVVatt)Ѿ}h޽tΖo @`D)''$;f+Ө\rKjϛ;؎ }EZcfgJY-mpiC=ǥ.'_~ 47c[Ww^YB[[r}7V%d;̫U4hT:;;f pmضmyxxt~™oeXRzddd8UZagz왨W W#A .<ϩ)ԳJ9#EҴAAA H= y&e;YX-Pcc|&KIOrW-[7}JO<][̑\\njj*䄺 b\wk)<@IENDB`phpsysinfo-3.4.4/gfx/images/Lakka.png000066400000000000000000000025011467431054600175160ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXG{L[eƿ M6QˁbјhfMǠd%kAaBu0eȄyYHcklmV0.Y@( MJ9ݬO ;}yCFCRF%ʋi ^WUphTr0&wʤIRC7Ѡ\F4[p:| d S> =ʧv,gzRC$"><ǤLm}M!y isg?/&[S|/YMm1Ό~t]_u _||wXH2|K!Sb?b5\- }Q`n"OsD[$\Ic|z.b()c'zKaG0ax|.ħ /$W`w9[ۛ4C|՝DI<'}d8~F_0Ve 0Tvz@|*Ί#@iok+ LBmjrL|a [Ru0LۼvLhx\ Yz` 9οbJ#ZhEB k,!hɊl}e^,jYHB67>^-o@!q^  f4\ ښmJW3T'36K%K$ Ϸow1H@˰c%$[ ^ `l4hs7gC6ߡ9[)EA}&P;lr;5?)t4lu,hb[v!#r!@pЬi:#+IPKiKXQd$Pwp|b?0vi \U"#c6@!XƯ N̬E :R"P,Ck\U5in}g"or#|[IENDB`phpsysinfo-3.4.4/gfx/images/LibreELEC.png000066400000000000000000000026211467431054600201640ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXG]LU&&[~ZU5-h]@x;D{ q/^xa"&F",bSFEm&F)ev=Ξžɛٙ9`LT1NiDU+eʩS B^p5O xGM9LHae9"ȻEI2gΦP/*04i#= n׏fcL V Tbxi{=+2 ⣙T(q&P+&RPsf:'Y5n3v8#ka  6xzs=}A&\èBahvG& &lhI i7֠!n1P#LC/No<֝S?m8פh -X'L@"׳j^N‘fW2 R~ 7t8[|̞R}#8xʊ>^lCY 8MOOo* :=Ss-iOC }CR2̊΂Ӏd;<- ή^P? h[o*8P-nJRo 8XkJF) u8Fpv tfgjF|,ðY~FRi8'M8 &\ ;=n9)4iPB(oE)iswvO{X-j0f_Zp~]pւU;T Ah$ ؛ A8PikW(:'؛汽= {$?A+́IENDB`phpsysinfo-3.4.4/gfx/images/Linaro.png000066400000000000000000000017171467431054600177270ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGKQǿfӤ- tp B :g*|t/QT^˚ &. )H|sOǟnCZD9sW!P{-oH 6&;x0 \>B#|5ĩP>q#%&=0kQTxT`.gE'tfpa~&bKm6c;D!ZrDF| #QFD/q~\)xNKx:PLp+@#UF:-3nh< Ñ y"qU$L}ũJeFi;1,a4[w#}K0&/_AG[Db1BLrQԑD铰O_%(9D~Fd2GVq&XFF@aL@ny$P;.hT)&PL iQlMf4ә-5#ә-eZY7ar:bЀRDneT,b*$˾=u]˲%<ϹyAXXXXX+/K`pa\CO32!'%ZvoN S9GwvI^Q$lin{@DqboEo0Ň2Uɷ{}8gF^hI(aY4gCp&ӠP<(N8^WÅĔ LlC1A]R]J҈Aż."cdE8#N>0AN?2s("`@r{޸&P)>7y;,tvl hh&zL&z#UZ~A8.iYQ/uT蠶~Ab-@@@ߓ:S8y#ݭ`# Gs`1z ώcĭo> |zBqq&'tWo'䀇S I ~ָRPCzCT>O-ՍIK~v&TBβevRj9%Xqw.v -o+Fs'*ڋum=qF B% "]QU%BTPC)_%dno&mi1&ɓ$]gʏ E7̋*㲍R IaU&Q6XV˯$hnPE ((fuVVŤ'Iz M.R+r.3o8 bwIDsIENDB`phpsysinfo-3.4.4/gfx/images/Linux.png000066400000000000000000000036731467431054600176050ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84N,IDATXGWiPTWF" $HlRH '68ɌV'5(FGf)D8*,,"EAPZ0 Ss`/ ''Y6lH+Wjnnm`` T5&||||x>XgؼnͭbUiV #0!".OJ)ꪤW3@=Ǭo@xx8֯_-@rWKҬ&~8¨#5BWX?)_N c1$ZO0e[kyKۿ03N꣤@^$p[4$clڸ24חj]k' qR AQqڒ%};ȋJB(9˟[n{g*Q3l#|n~ n2ÀKܼQ B&cyS\Q1K&fn2V!޿}תgt[|#]^lKt\rPdd$?ˀ, Gi1Z/BwsvQ/ģ5MR%zS]qkRd t\sr3)*l]fth4hj<wD8 \) gOŮm6䈵(F|PE9k4FWuo7ھx?o0po:PkTZS'Efb2Wk::ih.suk1p*3 ~[58Nqx[S"drWU *jgf=i9Ȇj缫kt\)_IŠi# 5@'87{+Vy?m?x&ʓ9^)GZ8M9͈S֣<hEm)[Փd"6J;A&`͐qm܏|ucHj8U?,MzujŐI#!gҙ C0,D2Է +Ia.,j l03Vj"T_^N$\ C-yH/.EV8niP6"$'m IK6xǡ} {`XUL@J#;&M|> [0k1&|&; D#Q-/$13Zd*Y8-54_'%a63ʋo8b?.@:!Ú-an6!H!gJ-{y}S)gЀfxQ*k4_~(G*HIENDB`phpsysinfo-3.4.4/gfx/images/Linuxfx.png000066400000000000000000000047601467431054600201410ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36% aIDATXGWTUW|'8qIflQT$eQlmFć(" JC*MA5d25-ٳ+LZg}=~Qs"DYSZRZTVe(ϿxV8E|יaN=smz]>O>T7r|~rN26mpL(>ms5RӎBqx\ :?e Ș_P?3}Բ>=Km/[4!p$ DPBH`Nv࡬BCu?/P1a82ᔹ:>VҲlr#=ČEnp@MFG2r7(B8ׂݟK۶uOae LzZ\ozqѽg7σ#K1qH !>5R^#qdNhA隸sݵe ;cu[{*T-i ׹Q$566X {wGO5ty7SCR+&9|{pg`>wUgUnO0qqUKߪFD)=`MN~@=@ #bB{XO~Z"~&N"y1uLSYj(U<\鏻E Oj EfiN#B# pLeh3 Pe3{ &1c (R շ*7if' =$ 5ƍfF"C9;OK I Xh?ÐϰO19P4WP*j{e3By\,׬𜿏D͹! p%s18KG˦yNk"Y}RЩS$ :D}l !L߸T'5K7&3m/U%hMs bޟ_؏C<8'7yg;vm^!9zc?(zs unomd*D3qWホ)@Uf\VBm  kW2N)a2ƥʨ=0o # /\/FÍBE,g#P^>MU]&lPG}+o_ $Go~Tқ/%/ISo";'AA?jjH!p.$=Ks]$ؤ RْNU")vcaZۄL/p&!GW'P5N3@H@AAp)7U3Ei޴2{& h _KBAy%>+ 7\:vn`#6' &$d*>Kv%<>p~l-om"@D8CuUG"S&A CTKtRc&̈́HdOlfo!A%wš6!%N[i1bƎ5d\K,V,5"`XC^;|BBFzvmE,hB"0b(3ȻAK9s&s+X1ز,')h4$P+:tb JږVHR,g8i[6jP6՚-'לXwRZ6)d#MHl}cڥ3ڀ٬狆~͑Khld4{)d$Nر}qRE`JGܲtP C|Ԉ-5"<ē̙DL #55g =JT g(q40I4kIqg۫Gu5?{wg:^[ٌ7&Hz=$T2qh,!JV\,kݽM+xy{05v?Ts޵yS,dyc3q88cŌ -d^O%a(eVw/of> v|},ZN5c6L; YfΛ#{ՇsL!ryFX:aqbW ~ֽ0z`D5-R%I-}L([Uޚ0rOUj"&cN:y4Gtka_NArfv$4]𿌼h%akF8XׅeG/-PUfbIENDB`phpsysinfo-3.4.4/gfx/images/Lunar.png000066400000000000000000000017251467431054600175630ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGŖKTQŏS )cIXjb5`)DHX*c-*fʤ(XEQIQTXS%v#z/襒ںms>5 N?<}Z߾=WXIXIXIXIXq6=~HZ%nI[{+4[ V}\Q?D1WȿIA:3-E +ZW;|1.$r{C5dH$#vkXI YT|, yc/O b;_=!YP|B|LΜBؔ!Y6ͻqژ*+,E-+0e奄<[ͪ^z: f$ձ9;|G0 xMX't(4]i+:uԪ&'?9>=t(PSMFGB,)1bz0Mx!"@D/khzs |#*}Dy&$yqYrWt]_A{9 L?t:x@XKrYȔQNn\O=$33tc%"fei58|]<1|6c7O3=a簢g8S}c3XQ#?5[e갢nŴ4|.0r-VOVRUs wbC8pygŠ*~x0}S\l`cbY`1Zhx~5R`E'aE'aE'aE'aE'aE 7 fIENDB`phpsysinfo-3.4.4/gfx/images/MX.png000066400000000000000000000017031467431054600170220ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYs tIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGŖ=HrQ&E>%]PZ*k EhjEhmpHH@І/Js<޼>~fssxm+2JXf+aB{{;k`Mpl϶W @.(WMWWA:>>nt:.#ܠ%(2"<ظ*XSV`ggRIN888@ww7?;;+&L,,,1XS%;??!&A:1Ha '(fx\]^^& 2==7.vwwJJhց5kP(D2GNgW֬ ޞL_> ۧYwEtc& wUp8t}5uTnʊƆ6$, ۿXL$^]]>??qrrE"UT}ޖN=#:҅(; TzId1Fnr]l3YdsY0c8]h6zFX3!M]PƟ.3QEچY nuB1i `t\-<_)i^MÕڄ(NOHL ?j}i(ǨsSmC&G"'#a[x[Ȅ il7n/qȄX?ypsE lpThqyoz%jEk&X`.+sypq@cQ= @-&Zjdcp>ˣR/dh`_p]Cɘ;;nWQ r׏&[\2YZlԍykh+ɖMl@ 5¸0鰇p0F'@;eO7S"!V14\VBƇۈY`3ኴ ur!(]M8}cI +YXyU5ԭ砾қwACnO?=m-s o%lka)]1F%h#8ܛt@Νs& n(+:8Fl/ܾ6zVh4p*ߍ`"VB tC%Y 3,ӿ@*oZL!GI; {h^ތ'H?Gdm!+Q;>@05 '&SC6,|R.z=Ś/+xGxe Qj;:ز!)CȮ3XReBB;"b r..e &qsؑ &HB -kߖqTvIwk3rA.@zHoG!TnP{M0bv2H &K. @tK'tCNpk/`@EY;bM+Q ة|{p.(MD$4cz>!STE]XBϹWԷeXیr msBI啵2#bvN`ݽo͊/I.On)#6o~Gv3,Y)(=$>qm" !^|mExM.~VqSrޱ qQ[V3fd5 QoG!kXXX )VH#wO%F` ,.ZcƼG"#g^${\//R`¬N$)zBcP\[o{h1y~!E ޔL}lfGH F z.̳`Z -P`Aha7f hQ9?i`?>ʁCI fnM"c9.?ѱӘ<REw7RHiH.̕_aֺ{Dg5͘b)IbZ e HP GeY ]`{@H s=Ձ' IENDB`phpsysinfo-3.4.4/gfx/images/Makulu.png000066400000000000000000000042061467431054600177350ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%IDATXGVgPTim`b (8b 4Ml2MR&n}$ " h3bhG10Fjݙ?[5?vjwkdʱvުS{{5s|ƛܓ^Sq'M+Pp)& >I1=Zεa(Q9&JTZqj #i*pk utuQDz=UalE;ˎ*u#1!7ڢSԑ8tnIMۭ M<TA dDH <y9ےlC+M27,$m8b/KtAQ.6cɂw K~F8A^;nQV@l$Hu׃'9B#fGz.ۇP .i5#s#[?Ogcw]ǔpC_Gw2%3@&"jÒ૕tb: cvZ~DB#ʼn 4_ت W]7`T`^TଣͼEYoÕ߽Q|6D7SgQ,1DXh7@((h&R KH*&$[᢫7mĹl}?!fVB?L!3`v2G1+GaZd۩ʺ`M) #by4nwvo1ԉk+xxdǥ'!=)B!xo!-*Hg u*=G6m>)Lݑ&˜RƔyr|"B=icv<I eԔąz+2t k5^qE3tו?Vp?aAѹ&HP-uW NPԔgJ7wS.>y>פл-F]HAܛYOn^;pS*ZqE#;Nq':9Ws|LyXIENDB`phpsysinfo-3.4.4/gfx/images/Mandrake.png000066400000000000000000000012531467431054600202200ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGŕQ1EM\ =PUP13@4@x g$@@ZJޓO#w'tW!+n'n'n'np6Or^7(|lwxf x7ؚ~2 Y@_!|QfN^_&f@wԌ82 B [XHćuSVPDm[ TVdu|zE z '3!lO*9h7 {)y>[t,Awgd_߂ 5[ < #UJd0FrvS 0\I>kPQynNf{^T\5l*Eb?+Z ( u4 [,`O`O`O`?ʍ:IENDB`phpsysinfo-3.4.4/gfx/images/Manjaro.png000066400000000000000000000013221467431054600200620ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGMh@_BaQin`I&[(^=/U ^ ͻ7f"әP/,J]փַYԂ]JC2K7AVVn8A(-C+<+ߠD8Z*kظ?B_ [sZ,)~#^n d8aָS0ny5R)!'20u&7 zo( М9&o'M?ǯXiz@NA.BJ=r}~g}isf-Xw30BnPm 4ڽK V:dj8<$ `3+&hyi5N b6FD l 6Ա2>KVbrҗ05 X%::ĭwCda5Sc4qUWl[߰;LGdkF꾈a u9;}Ty{>y XsƃnԳ}kIENDB`phpsysinfo-3.4.4/gfx/images/Mer.png000066400000000000000000000026031467431054600172210ustar00rootroot00000000000000PNG  IHDR szzgAMA a pHYsZ;OtEXtSoftwarepaint.net 4.0.84NIDATXGU{LSWZFf )4 *R t(RT)0 "" R1-Ts< li)eq@ (Cz?KsRA1DR#H&]/ AR ֭O ¤ e~↬ǭvCidd(֖HgG9H˾ժ#f&arqbgº+d)AEZ5Idx 'BTo*d,op{)Ȭ;4\9Ñ,&XH S*+PuWO8H"+R΁p.f/DUV8&RSÿ+ +EcLLlSW )LjԂPP3(W(nDJy|/P*(9#'븹K2CRﲼhX0l5FrAl/A.܁{YzXׯİ?>g Tg.&dh dp2GΘ˒{r2`~fnx3ll<D쐑YCFa7 `kaM\f?` xx^Hj">GVu}J79֧N GxR bbjȴ^VjoiXl͂z+ĦH.^- Jj"_6p+хJ67 Oආ$8 Iϙܾ"NJ"NJqF'%"x.ܸ=ù`p8Y`\5|6e|K0{̿Eq @񡣸6c2f={ EqJ({;\YPtC v jۄX,8\2#;_ NSQB*Pl$9 m96 P ,~?3vl"xT굯sOSfǞf&-io1X,r@ ~z{={})PC\Lnm}zoUO>`Ʈ7mѶUW;!($6X?(P^juYlkTwqTje?4+hM@'iIENDB`phpsysinfo-3.4.4/gfx/images/Milis.png000066400000000000000000000025571467431054600175630ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGVyLWm2 G "<q&,!K׀0ulI`0K acD;{}GCPHHHY"h9n Ʀ{ ?I.Jf*''d2߅F2 H HBA|U*>( =vݚ/S+R#뜰ZۜXef~6'*'`q<}wCg?n}Ao!͵qq}{D5F&& 7:8lCvC9㺟̪PbJM>KO B:׹sbjHBZ* m.\M6SyCY;nW' *'WY}1ܱ!̡g'+8QAUR_ `6Y5j`bIp؁45 kf jRQRzȵ;XtaT]Q_`G} {N 1kv uy^mńz4e1v(>[5BL};wR^x*NH$&?@ͻD;mUP43?;;IiRT.Ɣ͠@I*g /(-;ѻJyJgV(x !-7[n c,{ȁlrU 9|_Rv.8^:ܐ1L /ទ4lᢃTR (fTgÄhS WA p'6!6RF2CBI\Hadpv}XT+T;0>5n ZnmCPGp4k|yyQ5Gn֗w{vv2 cߐxcc!jid鸆Xsgp "QlXX Xmu;PGnV&TD~*`D ulRlۺ%%dEss# X,J"fT2s=+b*F12SUQV[PUiB&׳;/jհQYj9Y߿@/cGqghnN9^EBl eA)w6g6{Q82(U ?Ò pp^NHTQU] M(!qW WʑHcGΥri'l߶̃i䠁Qɓ}M.cs df $(ޛ7Z_|ʦD*UK!% I%B&R)BDE1҄x4Y;wn&){oNB=JGʥ2($D x^&%Pb(Nʼ`6{IJ& &2J"$|TP*P"rz}=/IEhSb1j2Q~X"Z\L,EQBR jkAgM@Dyy)^{qayfKA U29R0єuVjhr cq!..‚HLJPCdf(z+xevr8D*BE#' [dZv###6K/;abwlrǂs0# <Nb #6{6^3Ͻ0羏݅;wPoV;r)T15%z߀s̭9ܠ31Lpۍf4Y׬^ C7mKD7a)N\X Ԭ7i|,Dx$!ca7y e9v 9Y5o<=#7-Λh3iK3V[3_Ӓf KjZs+Y+ցk#'e4X> #G҄kdc;[f(9+.5;ׁ+ڢm.[&sV, aׁBrJc%obnu 4Orqlook2NbvDڎEd.)v;s1pR[ė(SSX\ǤIm8!8IXtfT$X](|R#2`"Va(ϓ RnY 7T2wJ>e cak2AA,41X[ٌ49?܎ߎᄎ.W=I/cl n6`6m˫'eN8F_XϨ+JpFy$*M8;p4Ԯ1&N_Rd5päY}NphK? pNpb?PXJYϹͪpK '9/q&?N]@9K{ 8IENDB`phpsysinfo-3.4.4/gfx/images/NeoKylin.png000066400000000000000000000042371467431054600202330ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%IDATXG{PThjx`d.aaACt(:(ŕ  R#I3I['im. }r}Q"^'q3'=ws~{XF?2۹M8Ӵ*PvosѮw*5.֙½- fCZ_RR%FX) /Cn~C1N}>%Y d~ιj{O#atx6v @FRZoz&.x[aڣMw{ރVC% vߞ]iI N==޳ -$9Y)lQ(Sy`$XG+$~ޤXɑd}r7>_["A,O,lr&) 01Ű:&_sNl%iKi-X Z-.dj'bO,KzݼkDzh9--]qC֟YJ{";֥9`I̤EPF"LJR&"BpO'I(4hNMm/Zkޠ^@~<-[U>\``5\ac/` Tsk윭X H.%Slʨ|j8:!8 3M/7d7"HekMI< UDᑴ쓘ZYv5 1slrX_dEĦ@ϢG}S@.OKłׯG/xvg)=sij쯊;Afѷ.E*Tf\ali4svuo rsT$}h.Ne\dk.tX%}be{m⣷ ,ִ~WbiɅڍS5sgBni"1ai"QӰ"Xkdzg R_gǍ&V[IVu:X.5\eq^*WvzTG-Xj,^.k\w0:й"u {x(7&1$ƍh}{УG[Ya$ј2 N1C+Й*V],M%PKBsnӘ򍥬}==[c1o/T',Ƨ*q95iauט#<[*3֢~ KBe|Y#^,wq\Gp T0giϵL:D.uK٨j(N *_$g >E?;?#$A\tcIENDB`phpsysinfo-3.4.4/gfx/images/Neptune.png000066400000000000000000000022051467431054600201120ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%IDATXGVRH ,K_ 6! `C`7K$=Z-S5eH̙~aU99h@x`gB2r~͗=Pnݑ! ;0Iz0Ұ&l$q@A,KNh(vIYg/>y/?ܝq%nY\DU&j".\puz'cC(U?ZRT8vWQG\~}3Xu]S+jEu zq>Y藏w\ ~1Jg./24ݶʳL5N Xxf{I@4+2P5 +TmJJLtOɬ߃%VZU`ɉb3QhEA2! B$yqi@`EB + ֒{h^UI 0Z^S'gHNnU yf%U`:_DXўNzgtaPnQI,$(Tӓ k7IGG}k`hfݎ-D#ԵNgK Ko[i 9e*0_̧W>"[IUȃ,/e4I"`p.իRH^= 2U"N/=Ku2'B-sM*M=i׉Ց?2'Ob 4|GϲgZb۱*<& wL˥ <=F~Eϗ9@Bߡ!^sQjq1ei>IdJK߀/op` LM(n?C;h>RHhóDjI/A@ϡ^L{ 3-aIn}}sny_qqVRIGnƲ'oe0"{8 d,oWDG*ԧ~`>_T} INt{taF>ڟK֔Un\%A7SRZסT!D(ކ飯1mHYB;M(Ec(啣t8/M|ɶEK}h_&ށ+Bz+ʌx"f,N4,̜ik1AwG=v}0{K]5Dy-7o 4Z* rmJ+'(vlk}]?7%qQ$n6' uĵ`~|H!%xgzV@eOl(.@ذC9q4nئ+[9zJnCj1b!C"C匍 ;B^ dӨT5jn"A](2B|eKVCb 7v\)>a&x^~}[mɊ`xq8yv*uؚ!zu*Uʃf+ؠ^ o[. \R?l%#PJH$W5؏Ē Tml4p:J8=ZӪ:53jcU_ JVcV_F_a+X%D37+6E `ՌB)iRVOO)(2"-`0A^+{ =% ig@೷I,-1\*d쥜ggr`fgg󇇇*} &}!jJZxlZ @` Zp\mO!.oi-ȥŊ@QW !GSY-7"DqN Cs>;/ݯv㪷a~ZA^ѓ1j} TH#t ])s{\nrU}:.h{}2򕾀WFi19s@Ez"ú >'޾ڷ |(7f XP ˝,Yq6OS _"pz6SFWFj%G?87Q<xϏrC\3hÞDZ߶6 |ʺڧg'bS .]Z.l%b5Q2RO .tb<`| f%IENDB`phpsysinfo-3.4.4/gfx/images/NethServer.png000066400000000000000000000017731467431054600205720ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%lIDATXGŗ[HTQ(1BTV`c=D=eCT/Qy,Є2hY^gxqt/g뙅G93'v#A~ÈvJjy”k%lm؝M>?gWux*8sh$q_EwBbq׌wR`Cl[]W ׂAB 贋Z@ySJͿܞUpsl@&`],PzP_~ŻO6x`@1@Z+HIcQΆ{R1} .䅘Dn"+PwQXj8(`egݝJ-7v(/)CPH ٴpv̑`w JA}\/pz2|fde--aEWhRD0_W;BT쎌 \(;rDKn4P%ʑ rNg-$ܗ)Wdjhq'C"OA`db 2z{tDu9XFGQ$O+7S'շnk>;vߏ1}RU#/?}ıH0;8?[eDQ6dMR'%$ptjFb Lsb˖㏢<WTnmI^Wv-9<ޥtHdKJVͪQ~a eh71N=T*1{Ul1OTP:_:=~i,g)n{ ~5}a (7_u쓟MCl<@oU{l L'FU)-(0.\3eA_8odc*="#"lh0CEB,lS3!Q'/*u6¥&O!q~mQsΨ)T&hkW.`c:3s!H! E;U$]yvu-wWkX 03f=iO٤ckOM12RLl0Lƴ%0M!XԊOmOoniLBd0|Dsb*ϴ F9g,H)ň%J 5T?Se`[>iu<Ո +>)VK\081xAd 6(c)B2jepqRw W;KȎWf~kcb4@C3!ah01fi5WrrG'{/gm'#gT>-sH(0Vt_rh `גl % _5mt=?ȲrS4ic񍭴__>,iԆ  ~wDz G L%tEXtdate:create2019-03-03T22:09:16+00:00@%tEXtdate:modify2019-03-03T22:09:16+00:00`IENDB`phpsysinfo-3.4.4/gfx/images/NexentaStor.png000066400000000000000000000026531467431054600207550ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGWSgOCZj[ӎ0*(C (U(<.$$'!@JҀHK$fv2v}_F*ln/ez'J EmxUIb@E!a`ZPo U_Cdb/{08I02~ʅA+HbmcO} P:Ypa\@xESl/r?#%dƯ9 cǺLE}StLEz#|IVo7k_ =Ѐ[*)JNY5 IEx˕#O5J셋%#⸖V?x>'g䇾-]Volly^|œ(|Q!q ˬު{ ?,W!L}\m: s,yUNJD RB| 4'A t t|8>S(ag _ ywbDm^xAVx/hyGP^{ ~z5le_pa`*_d$O>kܹ\d/4 Ar"ڝ70s5<Ȉ Є3[n0 TMPͭٽ;aSe%ET殊?b\aOF#kW=M' Mg@|1LF$<4x?gᱷqY?10iF#Ļk+JiyYx7Xfw=y>tP\bƆv*SL QNꬄTe?F*ɑQ+GൕyhO* 'U70ךN&G~٭}D,?,8i* +P^7J4ac7NAiߝP c mè+)_>О! 2SN$x@}z%m>x\@z;Z:OPk]6> E9vNH4[xttHD;#XÊz4ht8͔C&' sn:}`"CCݗN3IENDB`phpsysinfo-3.4.4/gfx/images/Nitrux.png000066400000000000000000000016251467431054600177720ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%IDATXGOQ;4A"5el-5hT,UPID a1H$߀BsboY)&Ctw3wz 24 @PHILXixQaň ^OB툠Y@8 =1tF`Q kjX\,-- >\T'rq`'`!'3\Ibmu&:<7 {S#\WG+Ĥ`=QѼ6! }XUz(4C:+pKkoܤX,ZX^TPTP\TΥ *080i)JX__677AC3ڢju(h0K~C܈ tjK/.,@"rӭZ-/4%y)qp*]=WBwWWG Z}"um8Zu l6R{.Ԥd:W BOܻO0::o # YS4< !AeyJ&i  + V&9ca +++4 f3ٮ/~?0čۗ˞<66ZU5gπްgɣ<uQ|J26%D`, jTy{"(TBEY9/"DP3&Rt,8IENDB`phpsysinfo-3.4.4/gfx/images/NixOS.png000066400000000000000000000011351467431054600174750ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsUtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXG=r06iopL>eRS<{%hHoVsD)Rb 'v[= B kB t4ϲ'O!]šw b#\cK rjQw$N'WuͽI`/޿~'Wo475B@?)2t>($cnrpc`=1r"7ȵ9&ժ=A8㍍cJ \~v6R ӱ7(#E# 37P<:zc5M U6t歅S{x6T1|iC)+@=/!EI5sCSH1b E_LZfIENDB`phpsysinfo-3.4.4/gfx/images/Nobara.png000066400000000000000000000012741467431054600177030ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%-IDATXG; aE4Б Q($DDi(]["SJTN%qi4 T@9vO;/gl8-d:6ñw7 o6M7Ht'.air^bb`;OE 4p<4h.b!iXcmil'urQ6Ҝ/MNc\&~ǎmk5oyؽ+؆2msMaQg*uj-؈A*`- 9#_˧s]#=_X}@Mq rMvb^Gx.. IENDB`phpsysinfo-3.4.4/gfx/images/NuTyX.png000066400000000000000000000044251467431054600175310ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGWyPw}DʍJ@HBL9pr( r7(UV6*鱳?wvvәgavߙwoH{>S⅁Q@c"Ϝ@\ fcP"[tDL$rt PFPYn8# }>%`#5L3042+8QF9Rdf#5=)R1;m ${8FPQG VReÑfuM153q%EwRD1L˥%ƃfĺYC&IBM,rXq$2j k&Mn_SW U9rsqN i19dNE U d+Ʒ~-L u-iwb|qU'+Qr*N^&k2 NRr"(rXזw槰8 E|:׃th )D*Y8.T>]n#)|~&x˘/?|ß aIӂu2xovsK3dR: $E #QA`R?@K5&0=;ӘsZ<X~0N1݊\.,FBw ˄E޾ިJ3+9nOn ]xo(/ݝ[LSʠ*/`J/ 9 1T_epMe`@QNo!n(1\R)~2BI> cPp-aIL ^3 FȔI{&U?^axsvމ0=LY׉P*D7E|pC]v‰uY|Hգ~-,GaVFBd=;ؚQ"t?v6<'<|0#Aބ'UMPLj╅q\/G咨yybjQYo7حR| j7 j,v25`y*YPaJaJ}X;ͲbN&9FrI‘fYjMU5MjM7@6a.? eS߽oB͌ambm߽p.W,Xhp_*m-t>s ^T1.wT:<.''Un'^) fhnIENDB`phpsysinfo-3.4.4/gfx/images/OmniOS.png000066400000000000000000000030401467431054600176360ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGWkLW4-1?.Q_˥ E ҋXźuR^ ]cHdq͂NRY"27aFYtho3*'ys}+1 \*uHŹjaǶmRęC/===sL*QFe򨥼l6+]xDmbLfzD gitZZ"|Я_H,f2V!yyD2rh cx +51VBlx `6q;-TOs^]]F烓CП \p}|"I_%T^V%2?:GMwZxP:A(bѸ?!'QE:vk'hD#ݸO9aj4 1v'ɵJiiT*BbSN-"Y^GjдK{࠹F{ʅN Kq`B ϣyWlg,BMKMi*MtRY 0lg!_P>B?>ت"N9٢ p5_H4;Yvr :] ty'4o~lrP-Blt x&{}  m)Sa--fpF9E󡳀)  s's'4lqW8aNX^/)*1 $OdMg5]M_ b(e_ 7VWKEhY)-^)^okk{+5)S a.9~ރx}}}Avfb3@C׳r!=?> mYEr0zn$&E/rҵUgZ"U>_Qf:?891q8;{OhEA49hfPd>{&) -gɓGZ@wqPjRҽuF%#9 0n8Y+e *n=bh0[̋Պ9|xW}t uc߂#i'{nM p?뿴l^~09"ެIENDB`phpsysinfo-3.4.4/gfx/images/OpenBSD.png000066400000000000000000000032311467431054600177260ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGW=TNa" ą`I XRl 4J-RX8 ] + [Ma1E*)M9Ŕ;g{y7'7|D?[ofM|OBs9~ps9oɛp۩ }$k$bv&8al7tB %'E: |ol0;90 h4{D׃'ғ"8b`!Q zWqm*e*O}&l#P]m,>~4F_ڄYS[}/hїz!>bCbZ1-tX`4S}7Oh)_1`_lv"+_>5HkO\=1@bG)+ڲbyƗLjMDsu뽳E`'D8qL<-Jɲ\}9*mko!x0mtB }K_@0MiFc*5_KȤ).u-2r C@*j!މdyR#cq`5jAJvOf'BzIZ3ׁ)RiMxTLAsAzR*57RNY- U ƶ봏r+]7"^7V H{" *5 ̈́ 9fFw9'9_8 |eF8qmn:!ÐHr9֙kHp O=qǻ }OrpQNAKS"MX'a$OC`op`!iD}?tRfV@ GnB)+-B" µ㑊E8I##AacXYӔJ :]DJ–0؉J}igb?_!Bi*"eDa |U`}%"g?G$94# ڥ~:jo{$2<tU,5~@mU`@* `3̨YqCjO?`-QjºNH dػ\-%iPK>#@,_BJh ~GB}7PYaѡBn O-FF,a٨MkG& 8!\xt2q'&lt1 YZw$Sj =MsY f Gh_W T~8Eg;8ɽd xCr"PE;I0zUMHZ5Ν9.h!ݱbN8ݎ.[R} y:Ԗ%39ӽxTY؋K)Udu%C,fC܎}%v>Vܺ\_n /B7e!b[@[]v25ol>iѹn ~m]'XCxބۂEf]*y)ع&Nn?ſ<;Af KL4IENDB`phpsysinfo-3.4.4/gfx/images/OpenELEC.png000066400000000000000000000032161467431054600200310ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGVKO[g*eTU]"E7]6H]5 }m`&)I(%! 1~<?.T1s}MCq:g5gfΌmFD--͜{'LN\. =Atv ]v'Kߍ cB 8-.|*x7 ]$k,6JU$ƧV ,Vҵi6S߀DvS]Ldx(y($rM |6{aە{3q9>㣲,StuDEqeuu}mhxKՓNqgwN\.sSGW_:>F%i,697*&٢5u:qvwsP{ o יt'GF+6ן7ܭ6[VrgDjÍS#unG܂ᾯ=\39Z Վ+MJoyZʑs1C49) f,eݢ+|ꏿs1HZ &n+ukڥqRye!g9__0 "6#`@qVh1;#q uVhѕNYEK)(\QdZ o- Pq7g&vDe!E?v] c>9IJ;;?W@^ wPpxnvXJ`_(H~}jj[|\SJMq~P^jmՃhӆGM( 5%ɕj]hRެ$G:9N- ' Z Ʋ]6ɕj-jE m><:QOόqǩ ߝ +HpX0^ S@*L3L" x<0ɓf~M(&ӮCg&cc%5 snL5 k{W?oě#9ȣO'f'>)7l2X&0H0R1d'">Gi [-\x5 @<i%5ra ˮj7p%GQp $v7c$jGV{ $R l2X&T`ϷAdaX a&Q:=}xT`C^%G]IENDB`phpsysinfo-3.4.4/gfx/images/OpenIndiana.png000066400000000000000000000026341467431054600206670ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84N IDATXG{LSWKe4d1?9&)²aj+Q(REGKyH ǥ"(p(Rˣ"e -ǒPƒ_rν_swK+W˱]Ahdp.5:h4:L"~p2GC5\^?E%"~]}A?(dNYh"}@F p?t[[ɭfsRkCR;A, T%|zR ϩ+MB}pP(Tϐzuw2oZ'efeX,,F^"OR70PTk;|Uh  46)BuG謖ߑ&u y+akKd5K-H-Bp{OcY֕un ۛUL ?t=Ulh6 M:w?zp\-f鄍Hy4 F)2?|Oau3ۉ_> >[ ^w"%3w285/~IRL39;(#|A r-WюҊ=CCOý%B;8h{Z]-]j & M-oPg+R؂bFFoy_i1xHdFn>˯wͷۈcE'T([+R#9*˿Ԛ뺔nvH]]d:pV4Ԭ{]^bHd+$2Qy$}}y}B399Y(0z,r{d&|1{oh`0Sλ(Ԙ9Q4gjjVk-|4|%]xGwK2=CgXz)ðK0oEWS@#,7\<obbmypTL, ?[m#(l失/){7z {Z(n&'ʔ )Q8 S<<~\N?|zzz7ZzEWTX: mkZɍD[ER[v^>ld4'>)=:GkHIe]FRžxR{x"J266 ZCH ~IENDB`phpsysinfo-3.4.4/gfx/images/OpenMamba.png000066400000000000000000000016451467431054600203420ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGŗ=hQO~@@DBTRQdW1&Q1Ml&jX$;vZ*(E]lBn9w7Z_,#(ވb7}P!22*ԈRA6+O :ޢ7Ƽ2_ # F?AGp9Lخj8>4j$oƖ6u_*( z=|mϮKԂk=X1RGkIP}wjOS+>4!+vqW["OьZn|m[ю-x`=0-V(%U!pa7(12QP:A a7094K|Pcnd}ha7? [ Fr:A(s *&qB]3Koݩ_|6)*fĶ~ΌLWΝh b^kn?()vF巃};haMc^#Cd#MT^p5׹I<@NgomNS*h^ l̈=48FjFXw[ya 䙊6G6HOH%yDV4`yP_ f$5lrd" Bʺ?`fؔ:nWS`=+hsB;m̚N8#U StXoVjtFp/{x`nнo:tpc?IENDB`phpsysinfo-3.4.4/gfx/images/OpenSolaris.png000066400000000000000000000031141467431054600207320ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGW_L[eﳉAQO&xɆt:f\`ږR mXJrBa^gCnnc,d~{ieys~|ﻚ cDwBl4BeOA {ckukنSֆ"Oy87ja-( 7՝VWqm$~8>~Ke"|2E)='ܝۏ-&{=(\hp;8fyaX 0LYdAilP=YmZrBǦԷɈvޙ㥵>g}umtްՊcn%SF"ID2jw EK@73Tc$#>P.QOdOMhDy"GS$}GNĞ' IDUPq6S6^arD癡я@Tu3M*,fpKpVD9d6.JBjsCjKdjQ6MU-QJlHiT:g>FU#302Z%@ TxूFxv^b:?h$ 'ڠ/!د㉔&?@˥f(뀩w ;`w9y moff.826/nYi~j$H$C3 jj&¬LiR~o9#X THB,')Ig) ٦#ZO&gaXpҋ_MeכCta8y8"'+&8뺀8t:WwvuuT.+Đ֜Cu* o "FkW&EʈwcâdrQAO A24"<@O^\4 Ts+茷Mb;tb5(";-;p>%s6jpĩJ,FQGxIgG(&F$t5_0R&WY0xy\?Q$[Xz L+G$!gW)! &|wk#`\Bi_5DdCQ~G̼6esSIcXx!YO s?q|D&Rr¿j^̘q7 eG:IENDB`phpsysinfo-3.4.4/gfx/images/OpenWRT.png000066400000000000000000000027611467431054600200010ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodIDATXGŗklTEg *Њk >1Jl(+jP?hb >0&hb /&F5DQ.`xDC[PPj[;ν{޻}g{gΜ9sYu М)ƌڊerڨ>c3Dk#ˆhNe'K`p vy:Y{vH @eeœM%~P|&{Я7p;tPNrJ||ؑo%Ua)ݿ)Y/0Of9| dY0ޞ0S {ݛ8ƨx-&x,Gnb,rvoVC* 6%ϧ J):|; ǰ x$ >C)"8jGCb x6)Ϥ,ʈL eǻ?iTP!³IENDB`phpsysinfo-3.4.4/gfx/images/Oracle.png000066400000000000000000000040221467431054600177000ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsod"tEXtCommentCreated by DistroWatch.comf6gtEXtSoftwarePaint.NET v3.36%UIDATXGW{PU1>Mc04&:I-H!1QAATG(<< ce}ް˲@,Lk}S{z/fDޙoݽ{]f FDQ.NT"uCS>lks Qё`Ls[omGAX궔0'<"MXv5=@$׷k7 dcY-oN]K X@5RkR^AlQ: ne ޱ?{e /r;ԅs!N ¤=އu,ÂČ2v:"¿ ~x>c.4$ Xzq.*`ܭ N<,ýΥ%npB"{m/Έc#f2Z(_D']ÖN_î`#8t8 #p|4 Zh!(!SעsHJz`h}Cз^u nUSxEHIOR(BC{b)r xwNƜʍ,ĩx NMh E-\$' ;'|~5]&Bp A}w}N!Pn8RٴCCYMm(Uaxl y PMds#; J b!*&ܗ!?,u߰\x1~oxGdFBDQ fXnCDo# 88{17oF׉W"o6E7onciC~#50mE376}=e"d7½z?ܷ݀֋K/=8<|4ywY;ihiU ߅jB`B,@),Ʒ=x\-}q^HDU)1j}oL! jDZJd )T!KRȡ%>JP |/kq4 jfuf6w)So/+ #ad"sVh EK[3M]`49s nc[IENDB`phpsysinfo-3.4.4/gfx/images/PCLinuxOS.png000066400000000000000000000042601467431054600202630ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYs oytEXtSoftwarepaint.net 4.0.84N!IDATXGWkPV]6NNkFm%h5"@ *) hBH@y (OAF2lN$LOH&#*h v{?f;w}>TUH0xy>~7 q=W L z2N]nS5$6<H O:7xSB`Qv"뎩p8bs.SǹT6\`i.J l۰H$D[ U)SwR.S9Ж>N2>׆WqPQoV@BbBR"*ۮ"VI:ц/1+o፷= f):/J&l)WOS*kTQqQEFYG us-}K b9Mw}t bŁ+P#+#评Pᘢ`MM؄:Q7ᜬ F P%Ї 1_.RPېiS89%8cx]Ų]Cxz{Ub(H[}E~o!$GE1 R2ln8dvMU'9Ʃ'D-x!l#/>1u mW(~T"&Q::x@h2ce=ɭUX zw7좻%״.x1uuH7%( ELbYк_?>x%yL&x!&^ǖ~l?܏~֏<]Be :/[j:f`\d>{Q.lD fy-Vq{)cQ !KWirl {N!^mh"# bc!Q;k.M$xMpHlcWVδKkVpLCJ^7Z4_b9\`<qR$%a2F{{MzumTCgar1#AENoB~EerŖ>5YQ3CST]LLf0(y[4\|F6DǹR?JIZNL39hjXž h1u+.2*.gY*<AQ8s+ņ5ũی0Pi$8ҜSyW?i璴Ic/K& H ;Q7<$IENDB`phpsysinfo-3.4.4/gfx/images/PLD.png000066400000000000000000000017521467431054600171210ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYs(JtIME b]tEXtSoftwarepaint.net 4.0.84N)IDATXGU+lQ`Ln9mN^ך~2=ݍ!wo cnn[Vnل磲 & ===p>h4 W`||\DEEaqqtDTTT`yyYtz ̽999hjjBaa!7U"77W |JYCBBR///J Tdee!))I٧*@FFFbffs-Dxx8eZpp0FGGq*?G{9?OFANR*Pǹ%''ckx w;oh^__fFXYYIyyywloo-WWWw?rѴmll@?hK~Q|DBD$5 C tfX3paUs[ϽkKus={sι $mhUP-TE?Ag( )vV4AMh.t7TDߜnj0zj\LBA02e 04: 퀉0,0hBLtf5P#3SKd O%$-W1ƴ Bs*BE'hfjyluk{`==08L|b>!"c1tnʶrzv^k`GR5ΤnʻdŬc7gg6+WhjjJ+W .Zc`KjL6$=C_?|>I댼u^$sK~k3?${ғz> Y9+*^ZJU{3N7*4 58""p8L׮0R(4: pT&jg)z;ӫC˗cr2DP45'l.SQ}frn*#K=r`ņf6TE# y#giyO,4zXQ/>`,^Z:[bX+bt̅&m|Z6U<3ZxoB_"v꘵2""wKbd= M[r=!am^RȆPx|Z=[C—/Sh?+qGؐtd7In]!'|mAX1er5 6 C\eW7aMчu`_X ɱ0L~;ދxBeϹ† Uل _GVqgi:<BǮhlޓwZ~xSbBJz:Z%չSII:AWuL8* }gz%3ΚE8% ՒN)|Sו8}0c=+!ez>mB u%3.֎> NHlaAMűHR"=߄iܻxqDߌQ+dS[/"<\a0Z8&vdل]XbU0m^ar?}Xf þׅd@#v2hz4o(\Y#$ Lmg 'M_KzaON9e<>>=7!vn6#'!v9ؒ3W0oKci6*lU:3#܀=datHcvq؀ ïf(0H[]y6PdS+7}xx!{A=_pq B :`qu#VqcN cok3;'HIST`G<~`ysUxч"(W0psraӖA8L? YZ7m^BgYEZY ^Aq3b^ bΡgr͞bX+KlmQc>br|IENDB`phpsysinfo-3.4.4/gfx/images/Pear.png000066400000000000000000000016431467431054600173700ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGKSa_Qo~~jDa* cQYBeWQYRav1Zfs\cntnImK*}_v=; U> KL6F٩Vɳxc'8tzz_ ^_?%b3xDw b޴[n%<^7-|OW v-jyCdbvaB[peeVc9XQ]Oh0Q O)}&XQ={wr~q Pt{Ê ?ע%P|]Y`[܅&Y<|b j^J8=Y V,ښiWX|MdQv"ÎZQ\po_` /\c Nl( +p䨉,=/J#4=U(Dcuv=T `@ Êyr\P9Rr(ŠyPxw A"v]ub쪥o0 29Ɠ>Bi .!x n@KeͰbј7c)5+QC д!Y1 ?U7$+昞ZbIĊyV,{:tpPU)2nLWlR0(!+X;@k&\n4:7g bill[j~tmiK%Ԅ-u"ask/H9vO;p=0d04v/Y+=fڮ6{hWeK,F59bZ6\9g)C+~kW[3NaKSLϏU߱^w ^sE!u4{V֏qV(U"55[Ξ1UC_Fl Qv;]D MGEnu+0eLEo9z (o)ԗ5ܗ6#`:~]^8Nx(-澊2 qT8C2 @son5SOP,^)F\KP)q]";l}/k4U l14%Jd]>@,Nxдd2:SBYQ{ۉœ?Kv◦L!KK)ltR(:t[jG:iSp}\c'8C/RIo>J-Xr v"_A=GT`L9YNkrNH1/Rr"LEF[v{0P'R Lt чѩ-aWMFRks gKq^J4>CEH{(q1f-=d*8L E#AרJ-QDŽ-77V2v-wߤ `GGuf+1Qu\Lf_Rgldi!Qdf^79> j1`*gJSo6죛H&5Cyq҉hLP-uRG}T01 Qkiu܃CWaW&mG#gq>q5VK3NK/5x-{nDǘ/'+!Sb @Wv Srz$l!JdoStŖB\㦊*J-X.J*']8=W͎R!5KaoS67|*L!QɞR(6ѹ_i9\3rYX]pD[nC9`CŠ]fRD;rL@Z/j~y'<싣 qvpeѕa ~w(>2͍ ;dъ] v S&1vL42бRq38 re']fªu\YAUC["=&*t*}e]IF'WbXGJA1d92%|,'pg.'\)z۽(MVڄMK Qdko"2^Y-R!Qd)Hǖdy)k3hP:Ct+`8C|MA2OL9ٓoxPݱjVl)+ȭD%jGxHOuqO߯>0Ԩ., VZ[F_nn4MҾ".1^ A =# o%p@awʣ%HĶv%X"awNrM[:o)#wD"i\: @MML; Fó! zRy("+h*3hv!B"< {>;pWJzԥRz$1fy(+;njjZdZF_q od7~^CQ% 5}g_9d狟`\ e˱q ̻) g ju>ؽk/Axxken5״C@~BĒ/كAشdÁS'O/<T8d i[?L\қ}&F ˪εK6},7d麌Z`?- b>;Xw'9a,)u{&Qsuƨ`iCaFxM`|uОG;Rߗ{IFv E\*;cL^9MO(ogFRȤ-dFT=!qjG-ھuʈ#6$8@b4) /R||br9rݳ={3cᶤU;A"AJBe5uuIQB*}γёK4ıxxn_xx X[3>1g,oh+̬1fȍ" Ff=0 lsh=cW:{_zm|^ mB "rE žsWsIϤږͻ_}Qy^(]ujKKTEQ ΟcPc"e1e/%Bî3uк2= Y#]U~^xin  ςPآob:pjeej1 r;H\qU3nj4tD{v:p|s=kj]9te3ߟ|9hV²dC pPeh%6~ss{Eie%Gt,1L#u6ϛ=%$1,耱0Qlug.;(Tț}C9hP,lu"S ݢm3iJS^{ rpokroę,"%~D+^7Y,2 ?dCN8>#PmY pa]C8{fcI3ޖw_4CBD#OKY*g|sU7a6- h/sC4Ҵ-hY1:T\@|Gh_G;K չMϕSo4K4C{?[Vյ`|Ӂ{q,"#̀^gي>[w--^xvp~Ȳ!'b].= =0 9H{Y!2DH1ٖ)+~S6{`0b&AmM M!8ϩCo-IYmyUgR6~*z Br> NS/h]~xᔷ(Z" :7ZEg/9:^f0pKN& L&m5k_O6UЦf ߥނ=r͚u՛7o}'ɤp>Jc3R.Cɲ]_r܂;6lxuVLQ? 0 "> H`"0%G twE,W#-:44Th8U3Cp, wq [,JL-v&{vvΝ;0l6?)@,Аx❦.PTw8*b#jڵ[#j??~CȷIENDB`phpsysinfo-3.4.4/gfx/images/Pisi.png000066400000000000000000000026741467431054600174120ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXG[L\UGMd4`x+Jm|h4^jAM1Z%ZD[!Jk` -"LL[e.RRE4j| fsg^{=gBBk=;c7פw}ʠ 귤F_yz]hGx*98;렚LC2/*Ju 5,,@hqOiӻ¬+jjvC Ub_.IB/39ŮhTW%kmQC9 ioirsЀj@SShdl@^b]ح9-xl\L2$/M=axh Ö;X;[[3'191SӗML^t N1GYuO^{ećhvȺ (:ۚ`)ggfL6d|A1pna6Cg`BTg?:b³12' N<#` ? L@tZm A nfKW| Mς`ܗeP<}2h_^6?-^/Cg8 kc:G;U%7s!bwSjP{-I [6k%0hnSntˡZ?ࡣX>  WpY0csrX-/U3 0 :mbn]C4T^+F@|+}mU/XA u`5@ 0S @lLX`;j |GOj@~ p;&0LGR(,-i Ȟv~=q=Knm~-ڲKLohN&ɨ 'ߒ>`QLhC }N0$ *@ySĚ9JyXA> !iqa2m>~c -(D͙ sѰ&.H FG`53HSY9^ %2I9ˢ\s]d rL`!B3Wt zhi~w _"U,vJݒ*`T ! O  c" wJN՚bW ?ݲ@UC+C ?Piz(EPXy{<Cˆx z$RIXntR2O quywcnlo*,Ј_EZV+˞ RBwǒc RZTրF6()eJZ8 F:PH"a n΢DF~xʒk4󬙃#>d&\R<<8O陑M/>2$4Q  .`kݦ4F-W @$F$VR1ܙk.8Դ0.!KL4F JYG2ǫU40$WLJN3υ wv;ߺFkG]a"OH&DŽBN153R =zO1SQW`n5D$RRJX;~g~>;7;;nˇX#xn#g gi%Bkqu/4"@DhP4=&>.v޺Fw`;]EJR!6w>ObXΪQΣab[9$EɤJ{;xz{=`t{-׷a%"LWRZJ,T,xm)rI*Zn  ٹ9`~CV+. DxgB3i!El<4f/:*Ab.kW8u'@64<(WfQl KH%ڎsC̊KjAV a1 ;D2iQ($X.hIS`^N/]a>|9xYSPrҘS:h~5U=T!ƹ,.]xf@s`lqEu`>DTJeMS3o%) xG'+[a㙞\_ҽgH;Mh, ܔu}l?Ə^>+$RNSaܲ.#RRyDl<'9e$h p?@LOא-z*"?O@kױp[xobp+/u0)`xΨ#eRA{)QEWEc_MD4d9;<y:,?R8]l#x1Wׇ`otJ^-KUX]f tI:ţȹ9,fEKګDW|GUZzo ѮToj[VX#N82#V7YOUDQ)8:4{a`(O,0Kj٤Bc,+8/v}IdLzk:->Șu_MfϡFq`ds!%cz}TෟC H^֜t̅b>YgFKS Qz8~qO>b5, :x7zً#KeH -冦mTwi 6ZvfC~4;S]C'ߺw( שf:**fADgS;fQȩ[ n>a*-!9DvT z~˩09vl}a E@xųuh1pfc< O{Nj.،+QfDa?Vǥ Rr#} 2sS'х:Rā[LiS>ӒڵEsIfRnm2"!D)7.p~wYTZR8Ǧr]^nt6U"yr*ogGT@޲Ż p#dI-++uw!  0CeYx ۦ˫j6_esVÉ1&6qT{Ȕ>fkq3_a1;tlu gBdkɂ/o.Ǜ*SԽYXƗsIzRk=G6$FEx6:ʫgF@H-e@-f*^{Kx3[:{EvFFy,EZKw++t#)Ex^E|U3X6x *۵/LFmݺ>PHqR>[ѥ)SQ@wǷ ޾^OtsqώV ay8:#ʋRҿ,b\yQ.t!îhiΣ8a %ֻkaCIENDB`phpsysinfo-3.4.4/gfx/images/Porteus.png000066400000000000000000000024311467431054600201360ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NXIDATXG[lUsE5YFED*(Jm)jk^QR;$Ƙ(&>HbLZ4D_$Z<ԳLnOK/s?gw'EH&fk)"P0il ӣC+EMiX_ j~>7M `؎.h~I7F$Z1hElC6Bn0I(gKvlS+ <ƴъNqx6V[/#_9!>oPvFt|!<놪~+tQ x<OvC"njzVQT3J*w#Ĉ@6Tǝzoz;C4+5)C(8mPŁ>\Y~PY8 BXnM:7t&j2']f'9 {Oĵ'𮚍f9#|E ; m&[#x;.}gaޘ+}9kY#r`Xckq E䩻9Nw7V{1㈦n3)SqMZtxN=>dXGW$ [n:KuxdASZ7f `CΨ;I]p,Z^QS׋B'q,Y3#=c@(nuUS{>92nDԞX dы%tUSERگ2ۙWz.≿ə,ZцCaSSK!Y= ?xn^MhcPwOV-O[F%dNTъ67X ZP8i3X_iZ`9 rUshЊ6Ȫm.DWNOhEACK2uEA+5j Ͷ fUmEVtbR~Q`'_c%Os4 ZQ K>姊V 'LZq,p]n*hPt*gY_<E+^UӐERDrA+N<5c2IENDB`phpsysinfo-3.4.4/gfx/images/Proxmox.png000066400000000000000000000023331467431054600201520ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodpIDATXGiUǏNMfE_ C`idHVڊAXf˗h5K>4!aMeFEʹ*XiV߹}=ww9a&-a>` Ǻ ¡POgH'6$Ádj?o 0#^~ [KZH\c)9-vk'̆W hpT^oxi&B(v:Y?\^gz7(r,ssWېj̃ uΗ|T+6W\-$v{1|bev_y,iEWk[`:3 G*ˉ~i8BcC-JUIBM ;039ˉ`9Fo[y&esryrVwEAU89cecgST_0v.%G`&m8 Q(:q$f+r-4p*pv0o nD+`Jѹr1o6էp M.ߠoºb7V5ah(˵nACtp,zݟ*Ųv@Ѱ*ȭgኦD#FH.׻d#pRUp)sn~f0te_!'Z.nPL>8cS s=o 56͎2`nuF$+ zzm^sx9Gec>`y2~ްR ؁kt8eH pׁ ‡سI9 {"rY-bE ! =7}4Bn+4m̩6rr6l߈* 0ÏXxt޾}4{D)Oφ=RM't]W۶ "x'$N9wO-C[btRE 懺ǃGٞ7/g76z+hsh9K bOs?3A@nݛ?XsxU%;WUt9ϕs滧 8"cq9|юϝyNo)pРE#%ڶKJ}RZ raӯ?%{C5J|_+|ϑA nk>wu-5G˒IB h#S҄I4kdo?߫fP㇪͹!Њ +EؒCץ\= .jJQR\W a*v7dPTU 6.Iٶ]]P| .*(V(1Ҥ Ce4:X?: ^5o4v@ai=7.9_zZdq )d#v)Mn(y/u ب=aRϿw>CP 46TРB dLRCחsu)\wR:DG];劣ܙݺrfղQN8LSq1G1G:i B2PUHh9L`]G.G*$sgzbHKX[TH(icZI)\=8`_tyk>$G'40B9vh X5Xbd5E$HyS$k#]yD,b Dڨ^{#K }XveŊ7#1b´PV0_-uHI }ѧ2p zzej`[wz^8Gbw&O"]K%~ڠmU̘JX$24XD~ƢD>:ג.X1q)~,cF3)MC.C&46 Hv` ؞DV>j܃5( lZ %]uHzJ4JFDJSnm"'|7nGVJq3@#SPw#ϯ`kCޘ \:M!$B*Vƶ*RhR#bjm6CbQl G> H$oՊs{SFjFI'6qi5_s&wVBN;<0b sAÓ&.aH0mIpn,LT p92gH&hV`1@ 欼5Z[W+%bK i@VћKSZB§)̩a>s8%MjLFZn()5/XӘɑ aD.>)"uKbyh+{]ni1 ꦿU?ȸ2:yҾQ'H4hw~dE~m<--ZxUY7a_vhB س~:}€1k逖\.#@fr8XLIW_Us UⲳxW?c^ʮϹE2 bz}sqO}"Nydss43oɓڥBڕi26>󿼰  4;}">mZY?Oj"gs֯h_]LbEeePҳ+Ɛ+Hm0Q4:d6YS{ z/92?tA1X)B ɡM. =} noǿ6{.EՏ+RJbLH؁ dѢkɬY\LK.2JJո\fKUL߄8X2ZۋIUގOdK"ao7jg ֶ "lbe/Xش5ݷ &9^X.ɷ?թ~%պuh\<CsH=Ir\O:$;}E2>U|1l3:eǰvHu+˜HlnDf3#GI/^1}/W|L CpKϽ~E|_={D"D\}T0h|k'y}3N{w^WMRt$?8;r䳃\xHq#ߌi9nOgnVu~}xM[^Y;^ƜC2 _&Y34x>x{{'WPTR2 x!'Y?Y۵s_a@Ws{y%tEXtdate:create2019-03-03T22:09:16+00:00@%tEXtdate:modify2019-03-03T22:09:16+00:00`IENDB`phpsysinfo-3.4.4/gfx/images/PureOS.png000066400000000000000000000004211467431054600176470ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGc`xgoll|f 0n. Wfh=Q:`utPz`fc8` 0>Ζ{{{Cce K^_kl!IENDB`phpsysinfo-3.4.4/gfx/images/Q4OS.png000066400000000000000000000041131467431054600172220ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%IDATXG{Pvy,W pdBdMZcH"44IyJji#R5Ӥ6MR#$jHkԎD<*~wY=3a{Y}}$Ґ!R\$?f՜-SՈ<"碉(Q| SA-"˷lHdnHq:>𑐐n?_97֋(b  L P%48πBgppˇ<w{ @ČhL6XF,n/i$rti OINuPPxzE5|@[HL(00"hY-Cw $ÝGdbl]to,m1#2DF"Hq` w@#P`eHL,UjBlt8?m1L|7:Lfԇ|3}Gu8#"?gkA%5Wd/ιczܳpa׿_ ]JiFDm/-}N$jbiw)jӴ^cyw}jŽA'x< ֏io7%G]7FӮy㷁f,3oXU+*Ntv8:{WTtb~sEF(߀0@œZ^zYRrC8.|s[xp/nsbzC+5( Gc( k."U1fSC.|n۰O)sxFn> |@MCXRVq|x!\<K4ZlC?N|ltBqq#]lW .l@iIȻڄx%X f4Mk5\y67߻|pX@h##ց>pժR2-,4~᝖O+CzK+̘PjuSd ՀL4ȹf@?0*Qɯ=ܻ6}کܧ]eq^uKߎM^۔ 4i+D X BK1 :ZdțV9MJv*+k;2!)Fg#ņ|&V$IVT_+iۓ XY YYAy$-? 1s9) ֜(*|!;{gv~"ބl.&TYrZ@$Sx( #l\.K5y;ƢbtB؝& `(/瓅bH K\h_A xn\1~gx7 sF`O(SA'[x,lBG,"xyx]F%aq_G2IENDB`phpsysinfo-3.4.4/gfx/images/QNX.png000066400000000000000000000021721467431054600171450ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGŖoTU{\h 1qAuK\0]?aؘ@4vcL`͟DCef: (v|7S`1y=h4z$$i&I4IG+|q:yLgXa,5Ö{T;f`m?jeoLжZ95-%>j/xLСw{؀&uGvfC~d}FcևC-蘭 QR;3V6< (~]خހ z% aنg7ۛ'~A=g2> H{2×Іb}VdSYy$Z;mDdq)y[4,B °t&աU =m.kc! 6b'{ ؂c@N Aپ+_0]WS勋I]WI9:υ[DHtX2 =waI@kfnkThrJ@uI`\P7b- )\G7Z$!TB~Wi~oC/, )Xʯ.lC%@𧠀!>>x=$Ԏ±Kgq trpL [ n[g)4aݴK]Ϣr MQh3sk[Ǯ+D^?B+v彦e rT^5w[4Lt:K$Wc7;60hд*1Z `r-ؙi @p>Bײ% Y[JU1J98,-蟛}@זU (fxF*MWWz+#KϝDҘbf#:OС7],>/KҘDQgsܒ/9wI4II8M1|&6ۤIENDB`phpsysinfo-3.4.4/gfx/images/QTS.png000066400000000000000000000033511467431054600171460ustar00rootroot00000000000000PNG  IHDR szzgAMA a pHYs  #utEXtSoftwarePaint.NET v3.5.11GB7eIDATXGWoe]; x{q 4FYB"-Q xED&`"A2M\A#F9~oӷMS|}LLcwi_gQrj;_?%nA(ǔA}+9|99ɘDzP֕eP| `ujނjoU&tnC[}UpQ3Fsmܡ>#Ix I φ< Jɘ皚u^~'I6f#ǭ9^xDCzHeƺ!=c&q>ަ4+DIgQ6m;## 6)x[9BPj-Ȁ&՜5k3CJo%\k/*zoHRj\kѧaꯑ{qxOH|$!nH~dXT2  BkL ;w@ wslC,1~G 1qg+5pE֒K,R C\dJkެ.3v"Y܌xs+SGpXx (_h<,$jxJ`T=#jY4V2U m1aX 0h90hnzD3Sp?T>EU8V\3g^2n l <"(/ҢG@9#@L% uSSg}MROX?K&D@zP2[_6qCYI7w(.3ۑN uИR R*ߴZ̺3 p8zn*=gp{i݃PcU3+$}@L82WC/фer{1cvXۇg?4B :{(,$e9,ފIU{KN` fP7<)@Z/[pu7`_ |-(sy3K?kF8?ل"R~4+G@ůBd\t6!r 8X7ox ]> V >¼O|$NBaL{OcIU&lҗޞ꽬y)cA/V)$=A:RRZ()[NZ!3`_\r`C"%"Kwub>lԤ "0_[V\ފo,xm2=&^!y9ɓ&m.Jj1O#yuL:Ge.4jLH9!{*<>xھ-xR'#qw‚/ob0v<(j)ŬHf_YUZ !~7U+5T)^7hZWctڌnv[pیò $ ʦZr0 2ä1@ H-\">S t2OPA8/gDhCIjGLj"scjTA}wA+}IENDB`phpsysinfo-3.4.4/gfx/images/Qubes.png000066400000000000000000000017231467431054600175570ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%DIDATXGOA/_ ILPV#t[0-X*6yP!"vqNNp/i~ٙŭ Qj :(3.SM;er1W:ϫiio' .vZl!.I '8XE0)«Wo?WkQi)eK[b}yΙ0[QkBv3ckuO yhNZa-C{ 4M Kuka ֏&ڡU5oRBn۠V) L h;m 2owl0d^YMApIIZoI&;cqӝãIpE ¢7":4])=N\]lMոd%;2IòSd) ?h ж$j4).,ЂuQًЅz UJ9)U0KF.C\ygbkOz'LmflIS+ \, zVx.J 'v<xU-s Rg-Lƨ~ S`l3To)]‘]#Ƹ)d8|Ӽn!ySMsPXн8oQ=}h<è+ބ>vHN_xa:"gQ=$ ki]lx0O|] ] uKT}FSD X]ZhɝQKh~Rϼ7i8IENDB`phpsysinfo-3.4.4/gfx/images/QuemOS.png000066400000000000000000000027011467431054600176460ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodVIDATXGŗmLe/8Ah`L63גF`/Xt&Mhl[}>845DD8 py9~繞~$!$uH] 8$e?m wOLWRFJC0E)h%۝0L0iM\9 c|L`*1(uӚM"~YHAK$ R+; Lu '?px[KBKVYl[y?ʬJOU~>Gb'JSH|%i9ȢuSu ]~2"Mje* M4L!_C!] u`d+{L !ڿ\X#vl=t(G(؂°'a#t[./ 0>L/xU@H >s>E0:B =Ɉ۬y_}UJT@Kon"6ƅ/Aȧ4[6en+(M)Q,۰ -[}bK䉏6 $veœgCn yN&?KTB`>߫"b2!@c.ɊQ,oBl5̦tI<_[Q ^ÐH322zFqG7֣-ID%cd=hkcgkH'щ߈n&M$ڷdx\.eeqQ)rV潏rc b_ːo BU+>u4t:`AwyͺͪC ;^ BwT-ˈweCp̝눯q ;*x#=VmqyiBCC%X"[VV=w?۞G]L|i'c&yBѡNNN6:gHHH< v31Ҹ.{ ;8'e {`cv`WM/l۹H)umt,PUUUŃuܶx7.(!7&v*_)SYYi̹pF[ژR9r833[[[y=sx\34îGڅ-fSe^G1vN*N|F- 766 +|\7`J%h8""B TEnJG&~wr Sg@JN.sSMM y<)5 gE` m0 ~ IAs@|Ĵ@ݐܚ8uzXa$.{|" wOIENDB`phpsysinfo-3.4.4/gfx/images/ROSA.png000066400000000000000000000060711467431054600172450ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGD pHYs+ ;IDATXÍ}uޙj,d-+!$bEV((WFeK0ŀ cl([2Ll6D1&ā*dHR@XJZ-ٙޞH(p|u166Gaqhp(roz|?^V$6R)[m!<(1GWؼy!v;늟,ºkv`݈]]e@w8GhNOpƥ:f/(ܴ`'>vhx=>x3'9ltܸ? \I$fx0/1GS/Wl<?v?vw>m{6<`/~`_1xݟ?;G"|}N>=EsF̼^3 х~t^+Os~"od9uq&].==)JݳP"cmGS`A'rsv#5-[><< l:ldr'2kAGH0-fs躇zHe0"rP죻KYSRڵբPLL6ӂ͛ݭY:x}kӚBؘsV=|sd2S9 '5@ba279ZVX8ؤF,Y0ĵyŽK&vWS5W~uUA_0֛:Vp|.lV_R+o}ߥsx9(y)aRI"Zdٮ w^c<jq ~uNT%wW';} Gb )ڑ$L+C%thLY*|p,|sLԪQuEwvZu:Gw+IJN.l3VgDSVʀ(k@e ; 7GkMn]0;z`y'CvoXWrP–{w//a>տͩ thW̢DyO4Ýa94=ZVbiPt==w|k# VtyB%>y#(&R (!1X܂Gj<TNA"QfW̒w*B)})uWRnɬ&͚XB˯xd`X1hipqH|P;ZDYzgc{qN zDHG;'gO.B%Zqc]hǠH+s$ 'HAP, 8㢝X9Fj:& hrcrvFJtbPot=0B&0!5$6HpWdqA˼AH8kI:ST` 4E 1fKē$Ƣ 0B!S a +_KeBDV@,5fN RA $F'(rS1<3K9$&CE3z*K &!i21$jygiǺM! MQ-BGH `#$i2ӒhעqL PYY@#yd9_H~񒉟5.sq۞y(E;]KQBBymPw*M}|!I{:.&&S9&&0AЈQqPQ))f_D&$dDIl @i*I#iF(fۑ'}c.xo+2ǃ#mC\Ng-¯9>E@b)0xu\"rHik㞡ID&iwDY*q~g_#ꗨIؐt\Ȑ뻶oM2oY0fq P+ܡy".G$Uڡa6 kKҎ?_h"FIn; sdqbu;B.SO/ Q&X^BE֓S!74t[Kg:MͽrWR]]Q4bf_>xRԍqVqMK~@86~/_9ڸ:~t_ŧw2b`V7֍E O?YA/)-+P&A_ zc/b:D#z#6޳aC;wI Mzt6;fS:p%Zs%*K 4,!i%6Je/Û{#7CYh^V^m~,ImIB\O*\)YՅ:J"_JlA:WP#x6UɕOmDGe+ נ+{mK%hX׉bL$i6U1ndVl6-\XG4Cl1c\!&B52"ak)!.XNjCa{.Ґ$eTmn'v)V{~RV5 L䵪"NzE> ۹H> H:il|~nF(5c46MNB -s|wBV{Y\'7cᅬ?jzY@0J3_gBx4!pd%ܧnD뼱TV#IXf0Ar_K&k@ZG ^gE/ʽHy `7>!S%ڵtJ'lRGS ٿH+y/} T!W94f^~ %-I};&ޞ KŠʽͨ߿{Wj4{C]oRUP`(EO"4i#5V{gET h0\D!?ֈgv20ܲ@P9 K>͏T[P.4\i&U0\{ O.&uͤگs'T8J3HlMSq 0n0K]C .>בY/3[Xߕy"h.Ń{1Xc9wnGsemKxSg:fQ<;oZT'C0 $5ƿOC>L-ȧ%,)ZV@/'-)54h\X$[H"XXm#6Hhp1HIENDB`phpsysinfo-3.4.4/gfx/images/ReactOS.png000066400000000000000000000057131467431054600200030ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareMacromedia Fireworks 8hxtEXtCreation Time12/28/08Gj IDATXWiPTW61$53ɤRN'q5h5T4 CbFAhAAdGٚ¾;Ҭ\J,;{{{y=ޘf:\f }x2zcd2 0gٽz>`vffouuw]]S"xD"#|>@־ٵ{>#-llaa'e a2Y!~4.]fggiii9<00)*, } D{qP.:l"l1g@[[ۤbLLLh52G3xvgÓ[NJ"Llyt,'&Yww!с b㌃q0ۥRiPk;\Cשz>[;ݶu773פƕ8f\/0 ITjPcc_-9:%[էW.%'eJvoCt%Sd eJ6zL&M7Yޜ^ՄJh}'x >r/}{tA Ul:fAHjb8g 3...6d\s$$$ۏoǵ !oģ2ZAM}}Gi | Np~O+ GncG2#~a#.9hX' Y' |A8| TV5k 8 . p/ Q.6{TJB 6055Ue5>REߦ|Ov[4X_ l;%[5,#vkLӦuby5'TWVr 29/_-Dz^/  J5}|q֪:ZXt#K=kcc8G!"~} d844F9:Ɋ+ޙ#5oonGW-5=NZD|*]GbTu?}S` :c/a99-3"(y@bQ ^IEcsĸūgcGgdn BoBp|:]=po,}\4wsn^ԊHln(n@pl"ȫ2 r#455?!#5g7M4 \ xG&#X,Oh \|a쉫n-'$@Zۂ. (ȕ"^^YYͯB3 Cb)#bdT!-ʂJ=]&GtQS"$҈n*AɌ" "q쨝~31aA;|/WTD[hAKG7މڧ(Cvqҋ*]шZE0:IK~ߟ-xad``~^vF #8'"c։ƎH3008 G|6ށ!ӃzE;PC-ݽ C{z(;aJZjYfC={t̵m ! )L*GY JF12:D(kBNyr)HJ)zIwH ),}K]VBaE\ܗG#C\CGod`|l M#??###*o=}hhF-olE c_ ?"d˶!?$\ ThewruRbRMWgT jQ؈"X* 䓋E AԷvPN <:&# YS;p`Ғ ss@EMI/t)ZM]& PO\)& yyyd)G<&^Dw} ;5Ⴅ#.݌g :s㜮 ߿a?چd21&>}?j"FV~(,(exd\QXc7*2Fv5[ܸ<%T38p`<##H)@ c }C$O54L<4+ UU{$68F3W- a!ݝnܸ<KuM ڴ~ݟ\O DaMAld.+'Pۤ@ZF&Z}$#5# '&d ]ot-oQh8H՝w555"rM8 xQAcrL^߆1UU#.5$W plӲ`͋R;5 A8TQQpQXXX}T=X; sȑ*9yUbI>HX…/KNPPf{2>TjU\?{lmOⳋʐ6yKYyc+:IJ͚멩4SO*o2L8%/۷o_SLq-:dʋKKKvuvj_*&SB]ݳgwhԷtZOwCw? ~d+)x())9LeX`®a;v֭[גkrQ JPPPsww?uҥ͢Ѽwfkזi3f[[[+`X K hժU4O<Æ 7n16iӦd0;SgIENDB`phpsysinfo-3.4.4/gfx/images/RebeccaBlackOS.png000066400000000000000000000052701467431054600212240ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36% )IDATXGW{XTe?r;J(#c"@)rKKLļj%J-)&f630 (&93 0~å|3=7ݏO2' x7%i55g.lL}^̼)w=9T"ܮ|%~8| l θn?sn.3{-a݁uŇ_0w8}{:vlJIid6r@.᠙LJF@A `i7v2m~1_Zcvؒ?N>:рe2:# '!2jR+Z! RPb֦oua+rcH3 D3D8^GBsgm2c|HT 4Qm`9؜YbL "mI(&R[8ksG ƀO 8w0 I]9 _liR[yFBJ mj҇P.y|Z ܱoɐg뱻 w]ACdA\O}iҧ\f#Q.JEP>|ܿӇJ`P&K1>`yako&fm`SBD jjZԵ(3 +)u(#:+D`pڛ m-x\ $%=^ 3`# 4 AvK*명.PO&( `P+ѽ$|?[ȺnϨ5ւB 64lFBQI*6B;[VT"ǃ8Sd˄Cjkji OIy-"W ruJUe6J?R: T ]WDC}(25qM@ìឞo hB!ԭSD;{#q^5ohaY2}?yc l^;@/԰T8\$;=\fX%"o;1~/y #"`C؞Mݛιy)ጀ|r{{PW(BU(lcNd>!D'>p}xuֶ,y,]_#1: nW82 b&U1'\`A ^)eBc{H9% 1WK!m:V½PP`=&*4*'3P/ׯȴ?W]h$2۲I-I61Ćنφ0ۢ/GkjqnSS-ͣ잞m>>;lNɸ/8a7^1?B b kĸe-@/7I`Ǎh\Apw? I.x? ןU7Q&WQꖨ/):g޺EN_."0u 4еk@ CZ1/#@'iV?߬,8A8&k׭qaFHj~ԙ4Peht,)Tx|{۾!xVPp'B&3֑$@_p[X"Sʒsw7"b1qHvBjj:*6plMq"THh7X9}ho{[{~ >-Fο` H$ L.!c`1v_ak>%C}m6:>)|8P*,"zG}-rx-N)BNnj |}Bx}3\x()rZ.쾺j_~M0<+lX9?)KSfZ"[LW |}BeTԧ#0oIDNYGS+W^$ .xy5..X0 vb{?[uGʉ3g-܁*&јCdXg]z}Co-HO<Ѻ}iSq?5 vD %K\xǜ8G:.uSF-N-nmrylN9 II-¨(]+BH܈5Q !u)oϞ.Nu$Ey'rS﮾-@G{@jD󭿚G ]98$''[ӧn$݃Z*!K/N욦l:ps}Ǫgg=`5ݗk}|m;7*:6̋y,w볳4q~sFBkp]=M`t8U^k x7M/t.lV1\pcyAB%[r8r.J*IJ}O.q0u#9:M; tPFCIENDB`phpsysinfo-3.4.4/gfx/images/RebornOS.png000066400000000000000000000027011467431054600201660ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodVIDATXGWKlTUG)Tj@-PLVP6]!pg+7Ę7t*@UЁRt/(so6>N̽??;gGG00O y Rۈr,~ϒ-n \[x$;O?e9![2ZC怿P6~Yop+4aT|u˶D!]@cvCHI=iH_-@_n`mAǿd)sّ5 7VcTPzXq#$~e=fBSb`#$M4QGb`P(3ʄV&r>wW,ȈJJZLc4Vs\HW%U9k f-k3qk<: vWہmq9+ҵdna2Hq@vUS+W=l֎v(O &9B#žM@*n+Yˁ\a^C{PƍLI8t 6Xe6 pɃ@A1~8́;7bz3RyЈk@v-ߏ5`z8}dBULn8 4_Y2n^}\:Ӌr,XF p&7ARCU$ϸXhe(23, ,yv=PO;m(_g #!BIx%W,Y.HrLILw;vHsSt]h-ɵYs^A x$1iBD LMkl'B2i {'t{HIkEu:Ka"19߆v .2_~d`U0LMP1K ,6Η P %+~d [P^H.q>Լ*N!5|/!oƆYVDX,nCµ>q7Ly|R>iCc*?0X%B6R0j@@2bhq@d=׉L|{sZq6\mGtYyϮU]ѐl/N׬cC(a 8o.+gkc5PgGmxa $38EPsox@l*uʄ?Hð!tmkKMpN: *).uw.MfbI"$\ ۍwJĽᕢ'w8g1C$\  z#6AWo a3 `3N9)!OF݅&bx#I@! %@d^*Tล݅\0>ӗBDBEpM+F 17RhU}N4L*Y,1uH' uI^#Űk6D͌B4 2>5<]wa~s&Ɔxr| -$`,?;s{Ku8B_V2Cn])/] P|0nK5Wj.ce ch!q^TT[w#;EPFܭ*DdOom9 `L39A<] *1q'6XV$+6`}wI&{}}/<%ɂ޲M`_/|)7#`c ?"MHs9$c 9{Ff5T1K."bTX&}& 8WQS13o1X{@p^^V*% r ("X1Z&) Ofm?@C|͚{l)@Mp*0'2cR3J#߁퐤>Z8fm>iaitl1(~\KeD JKtY MilF=fe(`Hك[kK2.AkP0?~=K=RF;lJvssy.<52l|a>a6(<ɋA m8iH>D$`7f*>EJ/u>Oҹ^w51kIv5|'wz3fv9hqE݂'x kΏ.'@%6EU#5g\qMs5m-~b!k|^ /]-b(8.XUxW08j/ZFKW/oE5{1nk% kڄb!^Ej5 =ֽKS΃ vp8خ5E.]Lq2E Ec8rAqZP15)]Lӊ ]תeI&xIH3☺p4FђECbThQG;E|4GC)${1~ NE8tj'\ꝈXc :~Ʋ?!MbGS]N$*YB1`!5ԏu@;=a}('D;>KY蒃q}_1'!$˂&tu Km@mwG;MxIENDB`phpsysinfo-3.4.4/gfx/images/Regata.png000066400000000000000000000042561467431054600177070ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%IDATXG[Lǭc`!uQTK.-ՐrQ-V0$1@LHNڴC5mTm-Mu]j,k b9 l鲼O|;y}m㌽]g{ {/O)Nc>kY_X,'Yʼn۟|4d ({\]w3wZ&It;]]}[RWbNu1' Ýy3nV$=^u[@LȒ8u %JL̗8ɑup(얢[ف?ض:eI+2~D r2OBZo < ty]<)cxFqӲueL8y'' ΌfdM;EI9g֍)3a \3(4Y4pÏwfDf NLcIS.Z/1 *qlRʚ5qg0.;Y;͉Oq(NL#;L=091ˠ >v-68eCU/$e0y"K:.049n :>~gZCH :r<8x=Q@P=ɉ%&& w <- ;<#u)he;581wy /7>$}U@'ɪ>k%jZġ7ܸETːJ|(|gk\Z+86BVkQ;5._]5aL nl.yRĉ y^*n[Vp HbCdzRkD 6X1@ SC,UBUB~>UcVΕ˚Rsf<~gsPUntt E`r,UȨ$qBSZțld If~F,IYCasL+pƥ5,2*bq(E~w;&F3$vO>|ΘDY]Wg"g}3FTs!=نoO5YJe֠lbތ#o-> h0aQS>󄣸nkG},V%8#Az(BÿFsR6 !LxSWA{f߭}Cve߸{ROXT9Q=Ȫ2(j*ɮ1?ܭP33GUb±Iβ781 k2b{2cU\,r\Pu'Ʃ2iOR\5&N6\AAy'9+g4C>R2)xq1C\1QTRƾm$H4u{N53^n*>ߵ͛7Ӑ\3y)'Wuޖ`_mu2dNnjZ ح5:{ܾF:~O׎c{Ȧrs:ɫfE`֛,“ƒO69ybd Ij 4k $9L,`PV9WP4UafT6 H;+/+u&+5WM;yU_T=ُSN}flB/Ϯ_ED/=6ꓨb=_VŰP y.$IIENDB`phpsysinfo-3.4.4/gfx/images/RoboLinux.png000066400000000000000000000042241467431054600204200ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsod)IDATXGWkO\s&0<<01:vehO?H|m5U*KU8 4Rbue^3üww3ks&Hg咞;Z.FCvr|&===P,7} rtZ-l ^9H\&jnJ[ ft:va T`"RY*E)JR7/_޾fU\*"Mz^5#CjjD \5O:B)7R3Wf:K%>>Zu:I˥׭vK뵺Fo!Kg$ɣa3[$ϐ8CFg ڨ7dcWKd2J|~FDRd*5Ȼ2ӛI"g!VŚR@dkkkr=y⅂6Miښ6J13$@B?ݻwS'$LU會4u;|ky; F[c3>CrL M{ Jaw|5u XB%Ƿ^o| q N@5,fZsaCR|dzUH0;w~!׮esenµzM(D۠%>by?)Z">o\n*4ۄCv4.7 ,Yrf. T:wkdƇ%1:9O$\u{\)C}%D#S\R;`Vq?BNy. 233#ccZ^l8|^ "_]x=Prj<8 OH\7QTё.ZAPP#qtX>F)daaA 9/dgQՠ/l1* r9i..2lɌƔ6uN777;"4}D斛r-8Y\`*gTZZ轘|ի %%N+J޾.gt64|%;;d4uDd  јޯޓ~QWvl*KҥK l]Y~hc I"|K&FƂ#ǗR󿾾[9Y}Lo DSR;!s# h e{)"04R+|Sb Ʌ ƍz7,%9FĝgzMtש$ȸsa+  ~R=qJkl>H] "} H`FZZ(5F1WH6528Z>]pf¨I_](3FrfAF\LL}D/c}hD4"K x Y^R_$` o_$<.7 q-;C??IENDB`phpsysinfo-3.4.4/gfx/images/Rocky.png000066400000000000000000000013471467431054600175710ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%XIDATXGkA/Ơh^Z+!kB,l Q삚RU1)"ƹ{f۝m4L< K[ =FSG&|=0:pB"9|wGp \58çÔYם3Tp >CkӸ;AxRW s)$* )I~&񠸣]m 3m~8 s9SOYZ:KV؊Z,HVx"+WZvUDZUeHji}جbQiEAB,< }J6%ٯ.06¡"s$~wR,!dbHtD\0#E'?J$KJh!JYXH}^p$8NtvwLѵ/],c <ƹ -AZ̖=監{$qS&^NP -䊤,EΑIp{"o*-}H Iq\`E%Hx0YInII$ܯ儯`xÊ >sO.Imc p ȧ R_!,q$@bUsprWg 1% ?ȅ$1.[_c?J>Fl =*3_iJ?ݰƯcE;->8O My9BvtI(j,uIENDB`phpsysinfo-3.4.4/gfx/images/Runtu.png000066400000000000000000000032501467431054600176120ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%IDATXGVOeĘ,^yhŦn͋lnqlS)-B#=hKP =_fNboW{^+cirH9껋SՒ^n1ٶG"* 6B*Q*. /ʕz=Uc(N;tOTa-z΋ %"BLh\f D{#$RS7P*e^rbeuf\.ǚ&D)R"b{;,@WVH/'r p!^p@N1^ +~,&D!d}ǎwvR^ɑ X"ͥG haդ!ӽDfe~*IR<8,2+.:nr>A JStٝ_RG!hT&H2aAYDeٯǰU* YvRnnND̈-\( qq{-اV]ƌ&䦙wk15­Q+'Ǚ H0Z̰Mf2C/WNOp9i43.dah7ޱ9&E)]S~H$8׊s8J\kkZ)7n]yvD2CQkչ.|t ͩϮ{ŤիX1G:{FpN%Go buh`0 =v'^$wh۫}>pM@51vcD)ŴI]-JDYFPK!u'|4 r׳ mܝ\{V)gNJ3HiA~̘aߜ.- qJoыx tݾc\42 "<@%RF{IHs80`bl ʅ>IM8yq|z o rL)Xag6JȪNJu骄LX2\p\0̘5R:,N5Nq=Ro&84M-xzH6POj\CVBd1D ^Љck^*61b'㛢h`0[11=7*H/{>Imo/-nCTvqo3jH !7qBҲSb쏟cG2A6 )݃{vB2~|\DQ?3(MW,L9=>8\L,G>fb>(lmZ KZ6 yр,k2unM;J,͕&&90m+Q[,# +)_Rgx%Rb廟vR(N+ ^zϵjm2O[WQF'/%'鼼_۫emmc%IENDB`phpsysinfo-3.4.4/gfx/images/SMEServer.png000066400000000000000000000016471467431054600203200ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%IDATXGIHagԬPQ%мAAXiiB"mf,Syie[ 8K]! ""hwzY:~]}dUV@zZ{y3] 5|/R؆=\ FS|n/_KcKHe-\o~+\2cOl_`hu}HAlq*>A'wύy]c0*>8 wx/ahN N\ |n'?VpfD\8 *O@j&L8i-vx` ,?34"6M7!tZ 2y[Ƒ-ubK*]V3&I"XM uS dxojnJ+|pǩ; DkNfN] g^x] -1]5»օbu>/wnTF=a:B`-NNEIpԈ^' Z?!,'heN:/T߂fKI N,">P֯k @]& @BTB/ȧfp:y O) k.CQ's۱ЪbiS >;q!܅ 5.>pWװDlw{SnL$}W@JwJ=!bzPoDUe7W"U%ͬ j[E;x;Z.&- .jwvՌ_e&749[>z&XIENDB`phpsysinfo-3.4.4/gfx/images/SMS.png000066400000000000000000000032331467431054600171400ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGOTWL&>VX@|h @X%*ZQEUn28\fu~٧iRl^pc{wu]djW2*Ѡ=V~=3yVUPbS26NRLfb:ɨvtXffEh GeU1S(9Od&6k5JmБ߼x.r92H._hD KW˚{H ":woʍ:C\Ј4(qCw֎:xFζ..PHKES;6\򌧑 JWC|^)%b6_oH]i43;C!\.b&>51.3c^WŷTڄuIßod߀74̐ܜ<])_zTQp/QyP>dR0LmsAox "H./ANLnݹƪ!oj`^T8d8]JaJMJrň\3F`!)@(kf/OnS[n:}bs 9& @biEN;/陊. m&Q9q6_,ʢF7r 9)j!?y6 8G1^e{G @p"TK@brF ^(0߳ ^xM+y5H V/B BqDmLm:.:V-5mj&&.g +Ib e6 cs & bH @k慤0{p&3Kɵʼnm!L6Ȉ0lI;A"+>M#w`0Q1{1XV3ھy="҂F"'M$RBxOdvTI1<2bHw󁐌utkHS&9Oj\PlDd` ^!]=4fE)kѨ|rآk0F!0FhSG<䖫E1g93.| zobCn[@[6}Xv@MH Km> " +1!4B0'\ArOp4P3Fݰkh4J9y"I;UU:? NS,)皀h^ixO`Pn 8u}51 ?F -Pxd8o+ZT=uM!U7jgYk{w9w..?.?[籰4in9kI'lReweOyY'=['X\<&pXa46Q|3Y'|mv/Pꜛti.910U$  0qqǔғ%(:ːQw {ץ_E&@S5arN%"Zn۵Q ˻i"0 }h=؊(fDzModoR#j  g2a$^3lj"*bĈV8|pX'8 h&3o!M|>OЂ-ʼOx\#8\_: pV6 ÃWkB?2#)@l.L@]Q` yp.ŮKhpg%#=6ȧW Fb|ZKO!<}s^"ɹP SH*lc8]}cOEZחfP 6a7Gb4 ՋE>ǐ匨k\4?Nɷ!ޛI$K?ØyB[W( :) ys2Bz6@g k*v X9,[P|Kx{:T<%>>bf睔!xJAel+pk7Awr4ݯ*`+E啅97ϔ2[^^ UyuoQ|GZ DL&S5}5!f3]Z"ާVAXl۽y>9D8 dq] :BNwg+lTqGFY.yER.#vI_B$oRgP9"FeV gKm]➚*^.˫*bYWIiy,-^ a=쥆]9CIoWV{UVx%D Tc8mg=kv1PXX)i@Ll^ gȊ 쾭}yigsO&m=ߗ-gdrs\x/ W&u80y)6@>(VS>oN=0+,e}}Z-2ӽxwksk}@sh3;>sޔ1e8kq&B%eBh4<.J LI l:!eϿ2Q<˞6mLi>gكR􄗀hiqxcq]g`#RPKBZ\w߼i ǭڬgW$?x(⛀.Lq`6`59sLh5~|crs/z <--#>̡~-Z@ࠬx%dSMkww}k ZxcY\Kw,X3`>K 0A8/#y18_NL0o] 895!NIfvs#?9l8~H\4Њ1菲߹#1`Х_4LMӿIYٺYxZW~ȕk򞽪= & ]9 ][sjш_u1 ǢH݃9QP/_EGTx jP /k(OʙR h#9+gy5` `Q;?a.IENDB`phpsysinfo-3.4.4/gfx/images/SalentOS.png000066400000000000000000000042251467431054600201700ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGD pHYsodsIDATXík$UVUwOϓ]Ev]`wyHWx$DcH"&BF~0D ѠY "%81Ϟ骮{9~y JNs-~+B|Ay<«+/oQr;&oAdɵ,]vBP>%A#~ .q,=^f:)`z*gXPL *P]"^!Ċ`~Tly;/7~Oivs){,9<1RU`0PeU k2ZB8+?G.x_}_nq;=3&i Mp4AqAhX?@aJY{zeurP,cbbxt%=2DړZpf:wbkǥgɵQfs 3eery2T:ȐKn3:6]najow*\.){hm\sh;:m{]:}ml3S؝<'*ܓ-##lf=TX=~$'JnmVjc8@0FFFȔ|_ }9+/ھ󴂂%8 Ǐ=֑TI?/e,IAD #YO4_l"IJAZd! zbKaK{vwO#{dzٝ9cGҝZٕ\h62D\(kFԂ 7CHj52(%~w^/.1UJլbHn0\j[lLg.vι7 51 Aᒔ$i&MҴ$m %s`!bBY&Z+`@)6]w 7Ȳ b@"}TC"hMB[UU9& iITĉ/;4[[h6h>:SZMWKb蚝*)~l<ʆk0S0)E\":8"\jhj/b@E(iI1oHBgؼSrײN9վj,a5s,bu=V*Fp`reuȗ761m 3U,Q V_3,IN]6ۻb"UknQzPgW0ai3̀r`% T:ZW.K(p8;NV@t]SiY]̺}D,af@ϾͲb1@ZKcA +ĸL4.bi! J(}Okb_U&$`V$\$yc2f}"||ݵJ~܋"ن|r%LdPZ}Pa%̊ė+?zd}TN6^WOuY- IAh^9rw{!fB_+ýik({A,}y+jO+X4 ;7^;ꝋou6u}z*'ny8; 8+ WגɃo4}o?pi8ܝG_~||B~C/}kᷛI=/0soYf0v0O%tEXtdate:create2019-03-03T22:09:16+00:00@%tEXtdate:modify2019-03-03T22:09:16+00:00`tEXtSoftwarepaint.net 4.0.84NIENDB`phpsysinfo-3.4.4/gfx/images/Salix.png000066400000000000000000000014501467431054600175550ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYs oytIME b]tEXtSoftwarepaint.net 4.0.84NgIDATXGŗ0 uF1\Fe9{*ט2YNJ>Q=u o?}Q3`IENDB`phpsysinfo-3.4.4/gfx/images/Scientific.png000066400000000000000000000040701467431054600205560ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYs  ~tEXtCommentCreated with The GIMPd%ntEXtSoftwarepaint.net 4.0.84NaIDATXG͗SUg71QlQ"* 6Ċ%R(TT[%vb!M2/ddp[ \0OsoќCZr^ݚ46{!\ Acu3[ʺfE_vj|f͊nf7Fmh[^4¬ wfU-1XhVaV:t3N$ 󮩇8~l4P R1͹fOVdHHlwFcpY d"`X߃5i:hTx @:n6?AQRa@wEpVL(5;; v )K |oˉfL`s68td<}*K&jatLN>'ОqֶW6H}VP/ʊm;r-cS @ iE?ȵ|Cm;Fb>]6x('l7 ICz+zcdOUExny'4pVݡ-QBTl6EcIɓ0^ (d&uD#/4PRל䐐]ts^/P-W# ׬@fT $Em+;5wMɘ\StÖ'{6*˙lX4'BHqٖS14,xq^EQU g/u~vqϞvn=]h#`U2 1uNK6Л?‰>fN [4>y\ش}R8EF}N HjH*|KhsifjT݌TP5I|E fLѪYB =ۃhUJJI}gG)iYQ7}\ϛTSՈ 32=Jo|)1C8ZwN)SS ]s"2ܯ}&jF`YXG##Oq(Oݒ"ΥJ)U`%fh kGMѢ"D:juƃB]iO3dP<|/+,lA1"ɆS#YqQE*m w|j؁PJPgZK ^چaa5BC{|c<ÈVX#:FՅ(*t_&Ya5ƲqPr?xFy>G2zGSM5 9LJn Nju^ro3S^,Ji~Xժnr)+XUyƯx@X$Ԭ. `ͭq0u}Ts$ 0@5|Q5\Mݺ!3))LLD+`8hjnմ!j_Ge@H :o B;YFEn7Qw=BD{/Qߊ\IKd l F3={5KZGKtUYsR,IB6׎ bloMXw_N~"o@B0)xa~66oD;جwze!20cشy-W}j QEMr}ʁpx(Bv \z)Tn͡ pz"|ܖs1)DN)>k !٠"X.G'n;7@ ,̷d`EcMrܴޖ*و+v#CO|ߋ)9cܧmgL˦8`* F"_YSѻ M5''聞qz^yf뜥C/>Y4Q@ 2RGeH!K2wOI uEf$)mdKi > *[s\U.頺T d۠)$P5zZ@-(PddIm,hnlx&` !6@$WQj\֖li( OD<:ǭ*,,B`0 7U ڨra;.i󰤣—CXYkCg+QAaND3  iAئ^/`+/0[ty~29Ci8IAv:!or@4 Y{آ2"0p8P|D,+DNGT8A!}w#+h噂7IĪXaKAxd1s%vѰۗ+Le`jR+m vP vžFxT6/d㳊G(yo?\UQu;%4tk<?d,ȯG7i@3`f1=>.+3ސXa$:`)s=}/Ssh^sWatY=3Ȃ Ly0GK=i4#1b[+Pg ͈0$ [3:G=77& eݻwuǜES9yF8ؤŦzdQR;,!#{"<apN( T'݉x׵vm*λ@wyFUjTcL>DU>F۫WQtM`u(=hDg9!M`T3jFѡ-XV0.CV-=R 0$7-(!%qĩ`]Dn^ G\.NNZ:M"lx;<ŵб U2L<(aJ\!3lTiAԗoHK{ R/{ kSzjU:SH+SJ) lNbSҹ7L&Ha!zij: 5Xm4*]Ӓ{4`_4VU#% r\(@Q Ǿ -Zr/`"])sEt4KXgvcM@,| 2P,] _ڲ!݌A&䗶"jZ+WhWȞ O?9>S7=zDkki"Ns=bFY\; GdN"=ᗋpqE0y( gy5vSW֋&-p/knJUQ$4Jg,dĆuX4oV G 8T@q[,>{ '믐X,E&+ b9dPMX4, PĩTL}٢ڰ%">g]ʃ^Pe Q\8o%̖2*碋9 2&>3b`ɢjbkWC <x  -=HeWO*'1,Z 1*ݧ{J~L@."FIRPZ;U~X<5tԄj_L2@[ 1 iA%f`sw(m5d _,gR%y9c0Xd,ƍqZ9V_K!'cZm(]*h1ZFVQζwi] #"Y ,LLNAvia*\]4c<n+a̢B MTv7}*hGn]1-.Š?7"d0h9˕&/ X{tEَ])fN@ "xkD??/͈4@cq{'| "B猈? 5WOxO"*[SZ!FTulYp 9a>5RH{4[;ٵO5;0BSk~#yAq 7ڠLRpi%Ã--HL@B#H<8]u!v F]}ɉ%;3g={jH36o#8XM!0bIΝ8qyE"R3YEIENDB`phpsysinfo-3.4.4/gfx/images/Slax.png000066400000000000000000000035321467431054600174070ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGD pHYs+\IDATXõk]Uks}t0!ƪN&5 %415X $$4 6S/0()!,PjCo;Lu=iiQq%Ue)!b?emN|P32d)n_JX"o恡}:z5B7 Ȁ覻Խǚ{j-uwSDRhY?gF|;œ8p̓Y ϐ~P*=L?ɡ!MM`ץm]Jl -a!1sK<5x ;>B0|󷥸|>'*}7픇^-PbGPM< Ix|ꉍCA<`r)6BVvˁ!Bs/mȖ{Uy@$M6(x#xTI|Ć)U2mdNɌ'$vz#/޸!uQ'zPPxC<jNHTy;8@ +y]{agg@736Ʌl  ڎ>ƃJY![!LEP `b"A9f@}gdWm7Ѳ<= sf/<_/5C'A}y],V/4$s}YOk`b[l+w +uyDmsV~QƇzvSN.i2Нӆ` 9#?2SȔDI0';&um`++,ǣ"$(~ݷ(-HN*'4qee h)6gxZWC=zn?ecX[c<; ۱ݭ/=)N:te&_gww|3(IWcJ7k1u XsƍR-tqapPkȗT~9/UhͯӌSr|꿗ܖ9U:{!N'7MX Nrcy?ȍ`Փj w;~Obޏ91Ugk f`NtV*ttu!ξ49qI MZEsӍ vfKkEK Yxa3iI·%tEXtdate:create2019-03-03T22:09:16+00:00@%tEXtdate:modify2019-03-03T22:09:16+00:00`IENDB`phpsysinfo-3.4.4/gfx/images/SliTaz.png000066400000000000000000000031171467431054600177050ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXG}LVuǯ5iьf6m6lլHR((* @D xADCq|>C?wz Iɢh95Y֬]-/N{Ayw_VZii=%]V@^pҶ3gHOȅPV^*:IXQy9P.Nw쥑 =yu?=Y|8ƛKROC+GHzƶ ص'[uҌJ\S=&Y=g[Z\ozn 0^ P~u%흭k=4)B6%n I3OYuͶ 0ˆI4k5ʕKOU,_:fۅUh4BU'G^6 p`iԍնUh$1HЎ ~o8HVܹ;%ēSǑ|+>(롪Mc(T}VaT##5 81E k3R]X),]X4! Z0UZ}vsi*Cj qP؄]w9OqP:J)ڑV=]~/i{='!H͏b;} (0 #HZJ#5It.Fρ>g.߰N@f*SOkak*Lv3y "HjD abg`&g9k՛@NnNIsR/^[j2sؙ5`ZC7i?s%={n62d&\a 01d1-8FEpɈClq`S k x 3f9GT !s"C}vzG, 1p*@)^RitQ![&̀#䚥B%8f-v!8`A'O5kIFkb*!4X-*i0:D|#((H*!g-Ts@D|( 9rd\r%8sg&yEUbۅU@Giȟ,'jU71LIXo Ǜc_V'E.=\7\ԗ͗]IY) )5 %ysJω$]6_Mt4ΓΦP/ %A}bܿc #>0l0i9fN|[(Jk #Qb6* q|hn\ToNJYQr,o^ iJkrg\=SQ s2)8P|iY 65k΃7Ρۓd@1gv3.(9P80 5wIENDB`phpsysinfo-3.4.4/gfx/images/SmartOS.png000066400000000000000000000007621467431054600200320ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NcIDATXGcXsO9hgC®NM }nLk/ I!??FaID\,b xwϭ߸8AY9E?PpaQ uH?e V9b1EPKml c8 ?!Ms(v0myCWkz&X  t@/hqX1MBszV9tLP:`:5O iw@dY%@unUfPZ}O`(vx;F`(^+!Uw\`䟙#^IENDB`phpsysinfo-3.4.4/gfx/images/Snal.png000066400000000000000000000020561467431054600173750ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodIDATXGKYO2Ɍ01fӸtuma[ZJKZbC]|B?웻 RaB[P|IR)®XUk~6'nľ{s(R~礽. B+M<ZjO&4ѓ9L>~S2e. , BQ[smiiԁط`?۔[9g`8 ls\`sdx@ئX)ƂM^l;bsA-`,嵍\rob TPu'ͅ~z "ZNdLpbRA2[Jx.%v}lKZr'msёqQ-9R [& ʄü}6zUK!jL*%z)& W}hhkf۝8˲ )qzztRoQ?@Iz@qJ$(]B[PpIXL_:N3 033ӛHݥx(!6d|UP݌^XFemSp뺭PVV'z=4ݐ x'3֡#c@tL/¢<(*AAb\.qYɾ{ݤ!Wzt'AZM* ~֮@Q^ټgjj*fqB] Q!̈YIC XVXRn+5iOscok5>(@UNKs v =:Cćïw3ird$!uuQX)3f(UXc[ݝ!;QhNtw:k0$fYe*>))p.?{dPT"uV cMQUI\t7Xc(r%&e\U. Ukgİh}WB"8IENDB`phpsysinfo-3.4.4/gfx/images/Solus.png000066400000000000000000000035671467431054600176150ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGVYLWfiild6i&UtƊ ?*bETDQ@\pG1 J "EE@bYs,關3{s= t:??ev 5B\-~VhKZ}L ^HTJ):q? .8#ZtQڟAwwxɝƜՑD0.d(8fV6 WlheM(,)+7H-spD.Ɇ=VM;A$7u_{!9z;d6?g/{J-{)*~Ӊ͙Ԍ#m* 9;3>DlxI%YͶNn|Θt7_ی7x]IENDB`phpsysinfo-3.4.4/gfx/images/SolusOS.png000066400000000000000000000044511467431054600200500ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGD pHYs++IDATXí{TUUǯf DI&3)c8"G" f-$s&W)(VS1Bq ܫz1.pgPBZu[}~? ظȩF}9}M{*-! $ٸ0 PV EEԮŕmh9m{ V)moqe;TMD܅CW]ש*A~W{e7WK,-LG>; I|SLk[h5Kˢ\){EFpN܊z y[8gٛ"ZS iOsl/В\xkJ.ձDVm(+c]<1I!3to`l,Y#0G.<]k9|!,̚X4[sY'$IJ$g%&Ef0CfP;.8-Bt9* sp8ǒ' rLD XC6~ѤY=a5CE 7|W~*nwD5j(!RdUOׇEjæUwWY;cd`uw۟U`rhBŔZw%yD(04HJW%[%6)a_E=}$<$6y+1\KTXN-J{ޓJ( fQ#n{Ͷ@ ;Ácn ?-q~_8VcG"Ub#QNqQwחpظ*gu VT{LjY)N8g!"GKu9r7N'ĩs,P%7HQcwȱe4t=n}Ŀcߠ=EC&޼_&o+*9>PtTJ4ITqJA_ű7EZ!Rsu1v]E ߉Ը]47XTmfP?7+g{"~z's.*՘Ȗ+tW`qWcb Td's,0gr&ޫf hkC~S;c=OI4ݯ傳kBOF͡qT2C|TChnmLrLj>d@ GLvD,²q/WxSOC)@B **όÞGi92KԢ_F%1KX"LP*RW=LɊ|23&mb%tEXtdate:create2019-03-03T22:09:16+00:00@%tEXtdate:modify2019-03-03T22:09:16+00:00`IENDB`phpsysinfo-3.4.4/gfx/images/SolydXK.png000066400000000000000000000031221467431054600200300ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGLeD넍bekb֊[F!Q#)M a!`MK*:,~$䁠(?J*aF iPP2o9pT׳{xz?yp:'٭b8jC{d|]όhKmؗq:,t|>~NVI. `-LBY'R!ݲ͠& ޫNp(x1H/=t<]%%u?z&lFI:>ת0\I+]KIbݷIfO¸3yb`|F5~.:?rUz/\)݌8 c3-nSs (5>&FT"ޘ@dN#်Ϗ9璐[l@n{=g1=9<)]1oiSxt;AY_9 H *PpP@?w'[PX}d|0,^>!V{'ʮ |4ˤ4 c &-b (6O a 0&F+ҍL `n_D'#94 ]ya`@)׎e#Y+b~Dq M7Ꝛq\x! x9zMgKk|m v$rPi޲.'/(?F$:1)B4oOw[CCN R]SXu8iHzpz127{&PnQۀ.^+]Ld0IENDB`phpsysinfo-3.4.4/gfx/images/Sparky.png000066400000000000000000000044101467431054600177450ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodIDATXGWipS=Ŗf/,O2`RBC„!()2Hn`L& 4qp,y`# e˒%˖d}.44Gόts}> ǨKQ#iqvd D]e÷j{w'{Jßb4dg$Fn?+}Q]Yw ͍%)Ne{ҥZ44c͊ǙUTSaF{(<@cu@ Jh Z8f﨔YFeύ" L/whb5̲hnkLX-v&df娅oUmAJ|$&OJC2yovhr.vR/zͽͭF& 044>,?Ƀ0!arfznZtkXNj/nJ(Ccc+vD"X}`F ƞZLpvEƖV45驊ʫꊳS3GhK|>gOa䩰Z*B\t|aF!9)?~^ƲϐR Cdd(^nzzzJx!>~8~`U?1f ! $ܢb 4\ 9Ima[{N&q,4LuRbl4֞dndLYzW!n5^"4T}+9}Vڛر(]sё$p!T&GBj222 !?}Nt?<*NwN,\sIRHH$R 7M*92m_Dbͫo`6 V݄V U @{ Ry"/ G)!z~B)dɆns/$)ݝHNE2 ~?QD[D%JJN% nkA"i lf4]D?ԢGOmExtRz.%g1#4Ѝ6df=eCkHwQqQaLe"X[ Fw2t`B|Z" L1mw:˭)EhU' OFK+lU`BaB. d}*-IlV:Щ,/c'RUUc'J6Y_ÔB2Ϯۦ =ɠW96| HEE̥щe 2: t/cu'%1@#Eo񭘿rjBkM}yz=ΟOF()L PKcQ陹PcB,aWh4I}VV0BYD??wb+=T"ؑB:>5HHtzLimoUl$堣VyRD♥sve%Up sUs1$P]q{T5Ǩp8|\ _2DJT@";8r``0A3X<+/bEwt~{xx٪MhԒ#881U d Nzzg>b^].DG5WAo'ɧ7itN /U,"X.Ä b]iq[w99J\$8(w@0N"͝hJ4W`wյM4)&H$ T@>dYnomQpD`k/}F)p#w gə$$dK|O𢳧'+1uLzl{c Հsx;-(M,zA|"-uv[q܀GCĨćv<\N00a<%;͟QO1 8Jnƌ<qթɿ&d:hLBг-/[W/u%#סAo :k|H;٭'(}cSi\WDzǴ.8@1:!r0\4 Zfdzy\əj~W{+&Sfeq1'p6V)IvŎ2cxdMm\O]0Tq۩4q!-]FxѴ䀺IENDB`phpsysinfo-3.4.4/gfx/images/StartOS.png000066400000000000000000000030051467431054600200320ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NvIDATXGŗoSeG41 #x J1aDDGLİ(cscݠ+ݺKYo[/m]v7uӜCs O{}=ౢ:(onXF>38iDCr u;l:Ԥ _[/ " Y6&|Yh>tN^Hfu*hʠAsRFfK dso_ .|^ttFprxtQ{ \N|m-hRݏw)?$ Dž;jܴ͓DIENDB`phpsysinfo-3.4.4/gfx/images/SteamOS.png000066400000000000000000000030671467431054600200160ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGOWW( E`mH6iF1gj}ITV)( c0օ=Y0;o\ȜsYWŜKHǞS[.׋$t|7 ],yXhEBI"wsYwjuAgc.sM.|b aSH\QnW7VD #,Ge桝A,a=;zأ(` 6lXD~TijX͏]eZ-=b:]R[{$Lq "U!LYKGU nxuE pm6g4?^ Cݗ{s&ٲ$WH hsM#2:$M!m HBy׶: hL w:$iHprpwHYi&) B [] N3 ǵ8P)H$h#4n]s~k\z@Hy0@Rq`$+150LzN(t[Io`'0"HLjH 59&4>w D{#*ܔb{A@%2Y2U>@qg x%H$୙"& @?_|g iDq4^H"{x'z)a0<)L+&}q0!^/$Ō +x9_ /Y |qV ~L/x/:M?:I7?׻A Lq]^\IENDB`phpsysinfo-3.4.4/gfx/images/SunOS.png000066400000000000000000000053021467431054600175040ustar00rootroot00000000000000PNG  IHDR szz pHYs  tIME 6/ybKGD OIDATXÝWWSֵ\u>i"UL"QŒŀy&!C ! C 1ý{T{9[ @WIbtg${l{zՊ|B~AT_F>[,,*6 QE[4A44hl+0p"[ߋb@`I2Rb~/]ن_n{z Ⱥ?J[]TUk^0D X8@( ܊~E`nCUށ4|8$'UKJ3dWJt7WПCv؋~?bVQ xjEk r9JԴY!0&DX,z{(s:;uHHHEEy7.g#""cVطyZ=nyeEf\0?$&kyh)ڝhhCJ6Ĺ JJn8dfq+> PYœFXV!g/R)2 $$%zY $pv$&Ay~6DVf;ra;0aC-,EoyRBD\#83Bޓ.qv82S΢v[CtǠLEw.ΦeV;Ǡ"Pk] B=uKHQUڠÛ-4P[ŒiihuC0C1y(/oŃj,-Q@ RKJ%`Ԁ z܌zduuX#?_w+hk",14èʀ3g>y5_ e"[ZZpZ*ʺp>cvLRP]Ӂ_C!zw8udyOw(.iAȉ8ܸj8pf /uFHŅT,,8=huK`:1=HlkNd+qV>F_ażVbfh>T;p=,.xL0W~\ETFFMXlfKxDVE_FX,{ٶEjF)1LBmgB")Cs_\pN\?K+;LM/l~.8f&tv.C1E9߉9bA 019u }j /o``H%J D MP̿B|BZ#I=|m BaKXYݦj&) ;dʬj|u4Ďp#6hoA~@=x_}uJ44A1e/ϑ_>҆O) mbG}9P7 rɁԻeVMN%MM tM`r56IjqMԓ[IGP!1. 6"mZ6ψf{&|;q 7xZՅF^ok6Aވju7$R+1bemp5"5%22 f$/br=&?"t"z{gNܱUJ5e{eTM mTW)w7EbaMz Wv2[ eԼ^3f q#-ELT.}> 3Z}CԉG}BoSٳqx' zފZ~1D\IY+ M҈%Ꞽ!< 9Q5q#+7Q!)GTDNUqkm]/.4S`GeyCCX_%0P6st/ $GTHRPE&Rwp%<8EAA!N|ٙ*FaZa >u' 45#;VWrU;-dddcT`LTz*t@ͩD̵BDtjǩSpM0IگV;@{#HK+u|)iiUf˔7yb$[x Yq8*đ#*\ VR@]3Mݔ #uRRx:/-·_AvN邍hzLgK_ ݬcRŃpx y-?m}Z>,.琺e6Ùco#-# ..lPsh$l$~Խ+cBP|>;$V\&%"H)GL M=['FՉR;J\KA}^v5u5\Ҹ[[o!S.C͟3?yxaᣊ@B^~58C<~<@Mh7 %M?gf^ \RD'S'cVw>A1+C cAFݪGXx *PG=uP* Eϓrޏ&@@dٲ:\DjZg!h3^*KL?ߥ?@'df&M)s]&ϜvpIENDB`phpsysinfo-3.4.4/gfx/images/Synology.png000066400000000000000000000022411467431054600203170ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz%u0`:o_F pHYs  ~tIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGWKLTW>Zk|5Qх+hMW&vӅ.ƨMnYSт3Ml*:&.4&&F-2sg0 3a@~sv08l87QD`9QK =#D&gBf0ߨQ0 COĄ$F|&0M CXh<@ 8/~:?dΒ@y9TUOQv݉g6&˩'RO`E]j$p5)̏+xWs=:6Wuz#7?xi~B Fx b~ cu >l2fe{(ֳQb l:v2!A'jGS;ClǖqFȨ~ыy ;VkƆ3O O;#a Ok:LE7Li<뱼v!yo~@Yv_0y\D36ZjIL5cWMQmy=5f7޴ k$JPǙ%o :; Yn.*eҝK0 x:] ƜcWFrwq?6:)]b=eM _BZڋfn1ľ&0LW'uVKni에$$ yМ->mP/q#ws$-uq=9 0! g 0F&i|ꢛFb`2؛Ȇ5lcN,8`&0˧bRj6UnB_NmS ~QK,WIENDB`phpsysinfo-3.4.4/gfx/images/Tails.png000066400000000000000000000022211467431054600175460ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGOaA~fM2%r[c#Ib$RCԖdiaTFQѡsR'tt|s.}O|^~83\!x ⬚{{32>OY>O8]Iʧ7>5*ܧ@ ;{hthN:Jϥzm3kӎKOQ7$Y-w ]_}XOlpUU4h}/8 9hmIO4@؄'jkCo+8f;%bѩԘ>EdPJ-d`BK~ڔMiQcNR [/uV%DmmݢW7 ,`2d=[\@Ba]([f$l^vF\{<Ύ^:oϻV*QTSݬe3K9ܧ[(uuvL^5=MK< q"he{O2A}x%ܧ#PqAh2?Dz/DlrYVZ=?ZYbnzS8Bl=]}bbnS#x^Tn4$0C7=|N/)tx1eZ `=[#|#9HBNF>xQI S=|hb5X { 1# Hjg^' WP~!(q9}thkeRlT$XtŜ8 o0NXz>EtLMwMIͤsO0˥t}%O.+}}]é/nS@'8x1KfjԞNW{p"r"}=<.t{crOO-8zp" g;n__Mm%H|IENDB`phpsysinfo-3.4.4/gfx/images/Tanglu.png000066400000000000000000000025151467431054600177320ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGW}hUgK%$hT(T"R1XSum)ǘ+fX ݹ>5V^tt͖RR"x~}{sv?~><_\Ƅ^*C3cI0J3J(! \'}(1 ==-NEY.[N8!xnN(1|,-EG|^\Eu8!HTȫ{jx_Gj':Ut2a^)Gs~5z؁|?Cb:Ixp!9A9TUДmft#WTM("R]8kpԤ- ^_K#"wc VmmjKUނ8/#J vvߢxY"մb [ gZG)PQLU#$` J@K ء%ꂦC&xrs&`~B vn%@L, #3 [ș:ηv<<Å>xz NjHq2AV ۲ђ ÷ՙ~r]}~.po86. YG ;[[{Nc (HS 7])Ca~);[ vДӏ~M@F(Lçk" |REf8ʇ~lU|⦫>ƎpOmvƠ|wO[jnǴccwaPΟ-v;p }-j׃KiڢͭO B@gWqS(JE *-878: 0@sBŋԗ^( w2`IENDB`phpsysinfo-3.4.4/gfx/images/TinyCore.png000066400000000000000000000022511467431054600202310ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGTohUe~yyϿ{k{LkD.B?iч ]) eNL&QCW r̨4(Anї@N=k779{>{~wLJ2I($$LJ2I($$+\j@ UJ@ihchY)! vB?*} S0)m@ㆃ=B.1[ V}8w E0 so-Dk Y&uOa@\#`W.A / Fp "3]nt O{4'aߍVp`33V/ék-x7GU}zdiXI8^?­AL@O]eHUg 2]p+ikga[*[ϑ Ҝ!n[:3x2:!tET4p[E+Sp˯2[/uR7axrkǸ 0;k\l@`T8ă6}̖9M:hml03u4 ůpmn8 ~ ==g- @V Hac;L<,Y9l>z`kad993+`w1یsmoFڭ^C_@I& %$dPIBI& %$dPIBI& %"*eYIENDB`phpsysinfo-3.4.4/gfx/images/Tizen.png000066400000000000000000000036151467431054600175730ustar00rootroot00000000000000PNG  IHDR szzgAMA a pHYsktEXtSoftwarePaint.NET v3.36% IDATXGV{PU?., P~²TyD>hjlj6 6YM+|eQ4SHT(4 "ž~M%#3wι;7Z9qoC{ߥVo N0{΁ %Wh'iN0w3ڗ7L;:vÉ}C{W^Io Sͯ;ṡq x5iOL;pbYΡq@w1Xp@фh4Z֢jC3'?^/E (20ڙhb~TtBS}i\|'qɈXC$pD\"ညC,#Pfiځ#P<'6̣oxiAg0u>Ua-mt,Ǝ)5#zfHۻ(>(^1jMm<;J9DIzP˜XX'qV^ ; JY8Me1=TwtN_3Ӧ_5ôfj>o.ё16.ɦkn^TGbrNdsdNϖ܂_1":g?yZ{B_C 40>8aFN,Q_b)Jz'Yluq=z=-jYB|NYw4`>k9ܷ`I]Ki- qK:NB3'8mK͘)>N4)1IikLxeVϤuOnG;=uTu'ŸP-WXRN}xL·k/)9!-SO3$@GbmQž_:8k=W-ExhS+ 3}o85?d$ !1i}(2!TŦñfDjmrQstі_~Q۹ȕܵ^QDN\TC. ;L^%&G.[2Q4+E֋#ŽrЈYų$KǙV.@5x" l08ՑhQY ߠn8@:Gէl'S{蓬D>i1dpHx(g) =E*8<* FvRE-L7q]qOsZ6ԀFp" B֪j$Ҝ"~|R~[ 8.%CQ_Cmx`Vq0KAos*/2b*vpi0*p{vT8Ђ1=XaVȄ(L9q !LʿLۨeRҕT{IJKL l0Wt~ iA!:3:8n!02cKN!=!Z"^zϕ}ǺvoT?8tc#k !uDkbAYr.9ڸIN@1DW`$Q#rO% npcи1nskZH SPh(xA_!b niIhե;<E*ə.96^4w=ҷYA+T@]h DD0,>šy[$Ġ poxeEcy7(^aAxrԷ@CFHsRWAV[Wx=S a)ŰL7 ?ŠCJp/WwMF1x+qW8G^\>J +FC?>e3O] )vөfj/[8juq]70Z . gIENDB`phpsysinfo-3.4.4/gfx/images/Trisquel.png000066400000000000000000000040131467431054600203030ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGD pHYs B(x IDATX՗U?;w;k;]{3$Hi$q !D/ؿ×cĘ("BYDBta2s{h|ޜWOs}3;yEȋrRd)Si@F<}Du7+8>d^Do㋬zd/pR U7mu̽(J&m4c.,ÛJ.2Nm)$H=J3VWgM$7MGt="WАQ#UV8Xll0ojܡW8`,H'TfArRdxld1jᕡT)\ϚHn v-,ka3Iɞt[[]^&9ZaUKCc*@e#HoisMB6= ;cAJ0nVgr6_r< kD)~}H bN msKq2N&m&IDhx9! Li|Pjo_T"UFvl9X)q̲(j=txmӬ8 Jķԫm;aY"³?uV.&BSsI4'$E Ehec?t6@@2lv{4 .c"S5*<8 " EULN"+0 WW(rL 1(hm`1{R@S &B S#MY_Ts0 -L6zg8A< 6\Y- 6 ;2`4c͘LXx+'qS|:4,H&DhGa+(JKJ;4M3'g~S s=hw 0m~ -HWy  ~(Ջy&2!3!z+X{L %Oh*TSrUd z>5-#g="5pGsfWNPfAxuVbBWQ|aF(|j *~JgA{"I։X/ '+sPܗLȔEFfb X FXF:, H҃iyӡ9NB"UaLQ.1bBgFzz Uz%k٨a2: 󠵲> +L enKB}:I@PX #(l ]k4 zؕ}`,iŢW_R([ŕl (:dR( 96'б@†`T6 D_3A9| wRqJ4VD**ɱu;*E`'.BnpCG=?A/?@MG0g:wu!c0UI@IENDB`phpsysinfo-3.4.4/gfx/images/Trustix.png000066400000000000000000000041531467431054600201620ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs  ~tEXtSoftwareMacromedia Fireworks 8hxtEXtCreation Time12/28/08GjIDATXõ TC gՉx`n(RE(ڈlW( 0 \r!!p Mޛx˦Q#G60'Ą Y@cS׆+'SahȂuu>^t-2033Ü9d2ɒsyFNGd{xlH(իiqoo/tt\b8PP"q4"$b۶"??׭ۻwǓ}0;2:_cHc!?fL2[|h__[~iHIg F]2 k?#;],^?KnNJi(؜@g|{Fs w-!WAkȌ,.[7:!;OuY Ӈ"vЈcXEաح^[QP#''AU wP&(Dž "$ dg6{.NCYx:2L\DX$ǟŋ(**L&EssXudw=ef~ >[ߠ 8|  nXK. ?Ghhr v<ii8e,a,"Z|t*+%Xjyy8> `꺿|6(ۡkNk׈CN0PtrOed>)Ê5edSa _x+6 =Ȍ00S V ʗ_\I6+vlC^u~d@)yZ FxT{ѡUU6it_[USS[NQrנ73,#jOqgϞ]sc܄#>x?::1zђl#tFk?ǔNCe_ _,pd )dNG9=ep),,'껛-*#Av \t -4IENDB`phpsysinfo-3.4.4/gfx/images/Turbo.png000066400000000000000000000016621467431054600175750ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYs  ~tIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGkQƿVkOSIR. E Tܙv!A .DAZ *3̤ů-߽gs R)8g3T0kgA ~o*\{J**mPmTbEGza WV"@7!-m1l~\Ȑm^̀W hߖɥn@JBe ,& *\]XEI(X}=ToF$` ?*k}n=T:̖1g3` 3^wb=H'2buVP8^*F(Qcrm"kaǃVqi25c͠bKʴ DҥEE1i /,d#ܚ @}\Td 8&Gdϐq.Wń,' 3à"[T7-Y]h>àb0ӒdD#ʹbàb{%,M\A@ hPofNˠb3p&ܜ̔ͅF̌oDEy'X@xQ5x='ea>G: QȖLT5ggq~nAܲydGٜ8P1."-Xv"[noN8P.N6[A|TaR~Y|>Ƣz#LoN ԔIENDB`phpsysinfo-3.4.4/gfx/images/Tuxedo.png000066400000000000000000000014311467431054600177440ustar00rootroot00000000000000PNG  IHDR szzgAMA a pHYsktEXtSoftwarePaint.NET v3.36%IDATXGNA- [' G)K:#!"$(J(J%R$"MLh|zYsw{p|;7;.RLj|?_p&X +_8 %¾`ZdW\C&SZIBKb n$H산@DnƜ4:|#;~&lW/w&0O{9 ɮU%IWZA* ~VGD6xzp̶wB׿<{wO?Sv\oG9ߖ3cX r&і|CkDMbh(c(EG}!\q<-g$@F4n8339$?~iWJr 4R?lq,,g$  YYNg?<_2mőpzE~.qwq+AKb[>w\~>>-HX&-=ɝ f IX[ɯ\h4zrX,̪AXefk=hJۂNgC ,JI:[0 F1&4BGDLv$|dMOfTم ~76ws``}sBfO9N`PIENDB`phpsysinfo-3.4.4/gfx/images/UOS.png000066400000000000000000000016411467431054600171450ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGMLTWDF1MmӸ'b51i Wݸ41?45&DB* "0T" 00f:tT(9x.ܸ.:O&}|RU eh,C;e)NYv2S $Sj>J-`LIL7(qV¯7X)%fDk 5JߑH:IcaF`nR0"Nn}\L䌨]2D&'m(rkYzmȵ$*K]GAA #=J{;7Fr+jgv//ڻ~ҵB;3s2\tsy@Dg6p9Khޣ665 6|A7`0o6M,\j^G0!=u䷺/J0NhsZ^Ue즏X8:q8&>~?[T;}+>imD}}MLg\ z1 ` ϨzUM68Z!?63=ZggwLrDlK{ZovDitH613DăɛS`^ H6*vjݫΉ7f J */.Wn:uع'U4;w!gw,Y(zrߚ㔝Q=<-Ưa?1v\81 .g?ZjKƱqXc#?+y:QLl/pyh >`# k90L۵IENDB`phpsysinfo-3.4.4/gfx/images/UltimateEdition.png000066400000000000000000000030151467431054600215740ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NLIDATXGgse3:hFO@!}{&MPBMbH `e F(uǹs^e߄@fpS}S@)ذH0@jꪥ!T/U5n气UJY巟|'DeuUVHm}#!TQ 55*7IgwttK_LVWJw{&&ٹYuZ-^KKk(k@H}+&wmPo1\TR(A JEU1jL8ڮDGgHWO W|$Mb27e/1h8F;cj@5`n`蜌M̤} Jbbj\'ǤU#CG"q;D!z؞'z醖H&S6v[[X2;6;?pЪTSZrb[Q 6\lrv4cH,I|;g,I ;gۺ[5$1vk =dʎNG˫z FGGs xc #xzTA 렄8t`; y9Ԝ>   0\][ٕ y g㕵LER8Bޥ/\~@iKp xzvJKsLAir$ܴ)d/CJvS`Ajލ ҥExNxL҂YxB;(o{fi*zV,Fn6#9 $yH.7vE;%+^~skmDT '$⫫IDuϹciGu9pd= 2o },쥋&.fhr&ހAמ7crHɨu.cMsCI/:{.0aB!'00a+1>7 ?t!oHpA)BO1Z*Hou}w< dGoN> Ht"?ωv}H^}mgr (@"PB5K/xFC4s;wCJTWkWIENDB`phpsysinfo-3.4.4/gfx/images/Ultramarine.png000066400000000000000000000020311467431054600207540ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodIDATXG]HTQgE*+)jeZ~@aI)POы=tRܔ 3A$ܵ 47ST4?̽w?\wΰ̙{\R 6^M/☏:څBYҡPuXL/9O:*%`D`!x?o Q*jT2%xlplF @eaCiaybrj[`TmK 宙BH~_+9A)K8>v N.03 dXwz''(GPczM(@mTrrѩj@ԅ񅌴 sZz/v`[Eg2 sӲt>6PU;ID1hx,=*J`NNS my4=,qP'I(,=xCmM6dX]T .%k9P(FKLȩ0xמ+kYᡛ$](6 C)*HN ӹ=nsP[Cׄ5#mCKlr_;0 Ƨ4 jZux(HK[ܖPt1 $`;"ÊE;1a.=zwZe%@wf_"zlx2iu?`-׎2;4{M *2Lm~٪u k)#]ɊD#R1qLNP [b:ݯf_+ŠX򓛠2Wְ':633o77[uJ %64B,8?۬>BG#!1Q AoT< ǡ7@+>͊MOG?\9>Gmǩ=ypVf0!IENDB`phpsysinfo-3.4.4/gfx/images/Uruk.png000066400000000000000000000026031467431054600174240ustar00rootroot00000000000000PNG  IHDR szzgAMA a pHYs(JtEXtSoftwarePaint.NET v3.36%IDATXGV[L\EZ>` !oImbD}ZDhjnh4*Pf+ XX*J-+{3gw |93mfσ16m2v3-vp;4㥉)ϺDF *-2l`2xO|T塼zsV3 V\E] Y;L p;ӻ@stn JۛM'3---lJ^^w냍k5bROT=aJN3Yݳp+*VCg%H(~H[wԧ ַD{fɢ%ߥ7Q vfm?^dU:tx\vP@P~? h5م]:zZ߄Ru* Qv mN*|eJ;htY+ Dmxo&;}I']N l@}Ҋ83Ԇ*d[|,E&fS; f'Ji]+?<'•8wyd9m 6KPRkenU}PYX}(> HB۸քXbbW "9$7KST$%y]$lp!apѭ29x[%gܱm-J2} .wZ{>MEw ;0 Fo!6x ,ߪKa 4 6CK}x~wGV&N4Sk`fsGvL11:~"uh\UĘ;*vPsaƷAr=c*-@z  ^7a+</\(r5 Zs^xf%7Js$dպ'BX->>Jdӂ ;ѻ'cFQhֺhRMdCu [9Topol%9 {Y,KQvVuʔs^׊sw*qJqu@?&ۮcMK k+'Ch͞UL5p&c8DAO0Y\9AW>`(k*$LWUJ1X'o~>]|tiڭa褬٬0nrM3$>^SY~oha Ҕr׿>ϲOb|ik;T}Aa;#/s_g|$IZ3;z¢0 WE;}4]]=L0϶@ށfduԶ\~s#mqP^<`o"_@T8qj|4)Y}FuhftHz6l>g>RoʫfXPY@;vEMA-~)>%t,K rQ`,-6[ k6tSڼ³tD)~3 f.+Lܕ(驥JyεvWj.KԜ9 ۲0!_?pjm&le*]1O3/ٲ0!ɣbEmK2¸\^ }U,Ld%‰%'QG}kK* >XzX I[ EX;i<[A\ijY;-jIENDB`phpsysinfo-3.4.4/gfx/images/Vector.png000066400000000000000000000043641467431054600177460ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsod1tEXtCommentCreated with The GIMP for DistroWatch.commtEXtSoftwarepaint.net 4.0.84N(IDATXG{Tu.M{fYnft<k&TH ( EA[ q` r_P:=|߼y}1{-ܣ/&DY[*OJ\)DjQƥ#:#~QFzM P\΄jV)'4qy|tUkCf3Rn Uk畵*}(V]]Ћ6Quu}?Aȕ[DlRO5!Aͷ(!e8'GU5K$Iul]vjIwrVgr$i4['~Ђ[R1@KU &"]ܗKOD^QUxV'MߙF#/; tg SPhvn&.vmĤX^;rfR޲[$,;>W0uxewj=a-8t$boD >8\&F*{"dvA "O&*YJŃele7Eʼn۔<57ۋRy"!|S fkh m.-Ė/NicߡjDk+襤E?0HU-KoB2NiYlGKtCSUFŻ:i !"SqNx:#rx)a^>̤D h=^IJ5u մ06]tmW.WCKZ~Arul&Qp Xl#DdsMox3a3owo<Ƒg>O[TM6tLN`z-% ,w 'd h{7[o}" 0ơ6i2LaUDd~IZS*(R7fQӋpCdV'YGNқ$nhfoK⪟H@t d>XxiU cc!Hi65q0=g< TA!Ff 18ݓ7-!m(dcXZۖ2e/}p41!SA-:AN1xhá9Zz\ɩFBJE\`$&XY3 {Iii4;~63fI'Sql=͝!aGVяq*p*\00bC_:$䱕2ڒ1Yq4|vKy7=YtYYe =ވ\,+AW9^t}WFm5g<|ɦYqklUfF#e ϹE+)2Zxa)!M1k|? 2<6gc$/6VG$滰Ӛ7e̲T;Go;y'b<+[hD=\ y[1[&Y$3_x0\ʹUKx=< _(ox`F i5K8*}U] mhFb?ZS,5t!+^om U^ WG_'Er%͑|QoFXiʏ8IENDB`phpsysinfo-3.4.4/gfx/images/Venom.png000066400000000000000000000012401467431054600175560ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsod5IDATXGˮ)A1`Kx/ \NLDbjb€_]ݧ۶[Ko]VS"1xch6)N$]Wz4ϙq8f5ϭV+j6l!() B@RIk<|>LEj4\=F0ed4@4՘TJ}Oh4rɕ˅Rbx̴O `zΕnX,TbcZW@壿B!>"5jǐ`@͆+)@2TX.?G`zt4dbP8wcCJj}È 䨟ðvM+ dDnO|6p:X_兑!>jp#0rvJ7=2ޞgno"n?2^i2p**ʏQEBoGgp8PZxLS$/Q^_( r%1i6 W%rE=B#8xo1 C͓IENDB`phpsysinfo-3.4.4/gfx/images/Virtuozzo.png000066400000000000000000000013721467431054600205330ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%kIDATXGOMa$)$%Аdd_IvR ٰPJ(EYXhFؙB)4$JDIj)ɟa|{OS{yϙZٰ , ;c*Kᕲ: x2~{%L)4&>ߠSR*s/<׸Y_Q6ks-G܀FU6ۨAxBamD[/tE9m'~L@wIV>GwCc^P6oUލ8[cNWy"N>1e!⧚+7X2|ב{E$og<7tOt:{\֪-6n>٘Gķ^rKVL8uZGxIENDB`phpsysinfo-3.4.4/gfx/images/Void.png000066400000000000000000000022621467431054600174000ustar00rootroot00000000000000PNG  IHDR szzgAMA a pHYs(JtEXtSoftwarepaint.net 4.0.84N0IDATXGVOSW/8۔}!9HÚBnі!!G@(]( l # #,R@eR14,[f?'^۵:>'{= /qE4@hOzxYfF燱qfzAiۃk+=_$''"$ i[PjY8[\d01ZT5M*DéSpl\,a;齩EHx_m rRYd2M|+4 ߪɳU~p`/hDQBsQ5JLggcd'FD^[|neiYس Ykˠ֔[ RnA6E6Ƈ2SZSU[܂7}]\Qn^II{Ԙ9"NYӴq2$FZ?L¾}4^^$a~M^F8I,NO NQ޻d0&$25OB߁sj|[DB'|>98s,UQ<2R0I@1nw+/aoӀ{sцacv 2Fzl65@Xڡ yM~hŃ;y3' s5ҽjd/t\vKWVbv9?q{Lj <@!{Y}3};K#Hy}r;kM'{$b k'vU"0=\!0p[4ѿYqzƻ./.maQf8ݮ-PxQ 5ךxd[O l` c\4IENDB`phpsysinfo-3.4.4/gfx/images/VortexBox.png000066400000000000000000000022151467431054600204350ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXG;kQ-Ƽ=>A4T,,#(ZH$IBb!iD!1 Usw&3`c{9gws +QgueٌZhVFN?"%SR]Ǐ`MM齯laHMvt!ej[HaHM4:Rz Mn-v~R)VaRM=2k|cHM,HwD=*Tvyfd6R ǔյ,u_SOzqb5W7_PA-G Ct(+^|B& CIuZ0pb\sDQӨVzW`ꅑBa_Bdds63w\4_Wqo хڌLczkUN1NUnu YH0 /VK1 9en)5CrŨ򱺺Aa9xniBFHSng ?6r)!S! ZQvȁ nDN!ŵ >ϵ #z aFo|.H1hiTA>F;/Tsyw`gzt豊ϱ8HlB~f e& ęLJ΍Yits"6A(,CaJtW6l>+AH[f*;{Ay+$x+2e$E qw;^v检#0H/?uzlX[RoVD.$}2ur7RPr'IENDB`phpsysinfo-3.4.4/gfx/images/WINNT.png000066400000000000000000000034021467431054600173730ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NsIDATXGW lTUv:{; _Rt e5$P,HZ)%!( "R- V EAY`CЙo,uhKNs}GHٙHٙϚ(Vg'Eh'3aU]u3IR(1y-MӴ")dj Ik%8cLܡdCs`FÓ"PU2Jqj$]Qj(Ecp .(/Y(SyU)/-a $/r:y!}\zFHe6 aIʔe"~ b)Axde !բ)o48_gd(22cG)$I+q&,MJKKu:dtnEP|8 f,Gq**d(w%i&'}4' {0@U4GcnMQbqf-GE)" MP8M|aaOX@rx( /da.+YO SD@>) ,2).[QW< !u}I `:漎+x/Ժ\4' 萁/O485R6HN{l goPՔ9 uYkN>cTyxx`7wqpCd$ ,@"t]B0/HZa.h"">n܄SR(;zoWU X;E:Pp6ΘLEA/=ViL[$!uр<7Lqj-V^kݼW `Q yhqqA7Ph.`tj7'HyS|wr ;POp";wbp?B,rgq+7%|AbmDy ([xA^x8oT{z<6!C[㕚܊E95@<c!'}Q(潂"Y 01Zh)t 5Po7V _ 7$ /ƪ*I&f@b رxq#(PhroPkl:on߰O0͛(->I"V FӇV>lAtg` p4Ժ^~WFIqnU–BYN]x喂 L3Hp#駏xY׈R/熐 BIV癮A<ٛ7~,6E b)D-BU>mxyйӊ]·DÄT 77~ dOp_(H&k8ܨ# ?uMFwѧ2&SU6"cD("N?qؑX5[/+6JcwE뀻E?Fh8c=ߥDD -)IENDB`phpsysinfo-3.4.4/gfx/images/Win11.png000066400000000000000000000003301467431054600173700ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYskmIDATXGcJ30T\e3``'d2t`r :`uȕ+E +#G(pX=T!0ZuF0Qte6iiIENDB`phpsysinfo-3.4.4/gfx/images/Win2000.png000066400000000000000000000021231467431054600175320ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGŖ1hSQϨR%(тY,JI.A]7Sc 2vD=^^l2aBIs9qK0+ K̅=#YȢQBM#!?=$Kb\ N+]Kcr!/p'B_$s2/bF:S!/?dM/?8 zZCXQ!vadLH=J='gߐ1RT`# 2_X z.͖傳x%/z*0odD68OdC!pCyK<IENDB`phpsysinfo-3.4.4/gfx/images/Win8.png000066400000000000000000000014611467431054600173240ustar00rootroot00000000000000PNG  IHDR szzgAMA a pHYs(JtEXtSoftwarepaint.net 4.0.84NIDATXGoQj!14`#9A -SHJ –DP ! :UU IA?=):lM9{9;y$+"ctg$4LT֥TVgUC$<3f[!oXjA ?=0@4\zXY֤[8CyɆ=dk},!@; ;^$ -4ZtG+F d2ta(E$&veQ!Ьj;0%3t@V0vX70h>;%lb ЮBD..yS@?ѦV;͆G;\%>xɸ]˱ۃ]+L@6y*,~t8܍n'v0ކ-ӟ"kRQuk;KmWڈ, }!EKZtQ]<Azn +uj}zTCW{a|Rr sruI/9 Sr(F{$sJ}"wI:I%шjAGŐ;oqp|'3lZ 2RVR#*xKU<"XC!$N>*f\2iNz$Br ybBGIENDB`phpsysinfo-3.4.4/gfx/images/WinVista.png000066400000000000000000000052031467431054600202410ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B4tEXtSoftwareMacromedia Fireworks 8hxtEXtCreation Time12/28/08Gj IDATXíkysy}sv{w}۵ B"4D1r6 JZ*LPEoqD/jHIjUUCTb㵽mv}sy3 4AqΧg-BI%;kׂ^m`~:޻bnyȚ&&.[٬eh yQ ʹŅV }䵻&/|bا/߲Un޸foB {JSxج[Xj]vOӹ5@㪛wyл7^u+Es?]qR 1eūf9rx+ :/|gE4ᓻ}ὗ\Y[xBZy RBcKG0oo켷?\i3QR%pS:G<)0J"| c5ish8z{?}f}ǙXKl ޑYwgxʓyTprVZoDBi3xkn9o-'sՃphc{On-3)nHH=<ɜS98DH3CIJҫ ׾ofg~|AoP ;r^pDI@_0@>8Yej-ShXVQT`Uvٟy4]g:m+KiEeɊ漧aF IԒEoIϭA~_bݶeÒq7 fy+fOQUN!G ȝdk-d mR$CF%I\b &D)CĴZct҄N!k!Ρ,K'XJop#BR92)`zd$&㠇AlF\reX"=9N:'!:3t[),OoTl?+T(B(Rz39˶ќx&QO Ԙ@5*o ߘar Η% .)Yo'J~^sgשּׁ īXgh2KV \,MzZϑ5:A=A, FQ|ZFj["i,Ut'odu7wplQ5k .%d;~INN#p92t>c(ԴF:{ؽg>Xs/;u .par9؂ +<3]K8vw-ofM%Z"sɑ&Ǚ 2P⣃/;׿v vO{ȆK{edzWL&C ӻA8Ey0lu% W>'.;}JUܴl`o>mW SV(7qjL6lϴ: @$ u(kK] 4,bۋ?gTk=}c @\((!cJ5`Z:Çd@Ux^W q*c[90 {7^ܩϦidT,$N WlZ⚋wQ|[e!+cwc%Qy^xny@iJC[kA(֔*,(EK}5@?"iȢ Ec!wP*eu7;T^DUi@i(]/Ezr.'W{yYׅ+PRJز :=(xBܻ?T@iBylVK7>53`oF˻!Gzm0} ˮX'_c}YN9cPJ" 8fbhlKXyՑ;yr>vE?٦ogV{ \n1 /V+6Z(TYżK{y ZQo7/{}vS#[~U!'_IENDB`phpsysinfo-3.4.4/gfx/images/XeroLinux.png000066400000000000000000000030521467431054600204320ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%IDATXGViPSW~/ C RF8SRۑ*j]ZX,u.bز1XkKԙ VJȴ:v[sԥ?o/s{=^  3Rg cކ$Ik!0nO:dasΎ)c~2aٴ#_oCȖjhށ"hʑޕNL"iQZ(cJMP >&O^/ZSz]z,ۋפOV,br,\,\.2pOpCY{Mtlgqg)XyY\ؤa)Nq96?;/&dV% < S5V|Qy:q6IENDB`phpsysinfo-3.4.4/gfx/images/Zenwalk.png000066400000000000000000000015261467431054600201140ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84NIDATXGŕKSQzA/((KSĭ?6cn͖3Y+: L*ztGg3^||9<&NXQ'V +ks=, '+XQx98Е/ODqғþT58v~%cVvoz&?Oi2sȓkObQLԂ%J/{!yh ݵI2IF`E/hLbq3M&Xj,&_@` As|c i=2r.e~$RvPձT s\|`3Y!-Ȍ+&0hױ  p*$r+L`/A7j"pgdž Dfv,'q]_4lqghDfwxV̋jzf]ץ2%)4bF;.AV/dW`ciYț}֠L.,ӽy:B4D-{]WɄ$@! "Z5CEL+KR!cklɽ^ qAoH ` rBLmGeE4>XNtÊ:aENXQ'V +8yltFIENDB`phpsysinfo-3.4.4/gfx/images/Zorin.png000066400000000000000000000013761467431054600176050ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ< pHYsodtIME b]tEXtSoftwarepaint.net 4.0.84N=IDATXGŖ?K\A4e@RO ic-Sk+vi@2 + QAAeyo;ϳٷo͙{ϝ}μu"P1'T -%39Ƿ P1d&ǠcL5eyrŰ_:XeWބץ fX ەY# P1'T svd s>n+غog>_r]'|vi;`_[rZKŮLc4h sbrn]}q%2mS>*C#w)F={T0j!*cXa˽9&yj#U! WSwensϧ 96ߵ >CE 5:vqx̯2^qNK/=k8_t =f,荞18kO;x *愊{[ 4&6Xd5** H<[o:h! X ]yioO;@E L~WLkBEۓq5kBŜP1'Ṫ:K,: IENDB`phpsysinfo-3.4.4/gfx/images/antiX.png000066400000000000000000000032661467431054600175670ustar00rootroot00000000000000PNG  IHDR szzgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84N4IDATXGWOwOkt%QGZFq bf٘a x6ìuRUmO;h:UI-g~ᕼz$p/`buŊ-$c چNYwp"1׿.Cz8aD8k<9"n, xnHdc DUs| &ٗF8" V' _[c=Qx)H:Zht "2j.~͗8G\ LS3r:Z@˅i!sV@.}B||q`h wc Gd6j[+ /V#{gA4+7pC}5HqT*q*>,430BQgg 8|(T6ɰ7(=xfhFHJ(좼]7ѓx3 ziuEQ]h' Z#YEu7R1'))V%c.'Tdt [ȿ[;>;Mgp[gϽOA?l؜߷d*JDQp@A$j79+ `ۖ0f2oB&8^]wnX-;xPޘV˲\|\Y1yLѣ,,ԲmN&^m\x9\ހ@8.\h X;zhiqqi;sZF ̳(GA I^"U &0QN@T!PιTf !Sy]i[K礖`_ӄ &R5O"a~rj^& >GisC2bȉʛr%"F$-)e֗xxPoC /{*)Q;|eH$ $r)jdHS/%7|C_ri(BɀރGH<#@TH zYHՉi\_(J?&y_ޥT) u㏾? /TL2|[\ג~I[TB/7)W\NE@S" U?JihLqIENDB`phpsysinfo-3.4.4/gfx/images/dahliaOS.png000066400000000000000000000014111467431054600201560ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%zIDATXG=kQÂh!.֦S jEL#D΄7DSX b!~$ϛ\ y9w{ðQ ; A;A ^ofa^7hޱ?0.Llɏ<'#׶LAegR>cRe!aIi/I fVda0J{νs{33{YXkBj۰l|F|`e˶w>!I=[6ÓO_j98.&xDxX]Us S%;.Xh% < `̅BS(}hrx̆H`gWg΀}gKu*? a iV.Jh#Q#ȳHz׾WL.ngz ݆:oP+}kcg\컅Z^P'?Cm ۭ5ZAF2mHjY+8vB-W`zΒ b3Ǻ 'PK۩=j0}>PքZ^'5h;2-D29vu!E攳0,D;^3hPKVc0X n3֗QE̊: Cv]c!Kí6$N )w0چ<ش?e5R3y K :t0V!]Ft'0'tٰçY枻r%J𖥍:+2d\ ۪W:5=fCW$d<B ~&O٠S#ReFKp:,ׯW^^^;6|Vw L= ې{s#N%DK^Rg@t_H;{#ċxf7ʬ[&='p/`Ȕ1Ljˆk>r<|^B!Y`jV{LݬM~ouzV9e.yhF!ۯa G&2w~7!;j^8 Vf6ސSBuIENDB`phpsysinfo-3.4.4/gfx/images/gNewSense.png000066400000000000000000000014101467431054600203670ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodIDATXG_LQό֟_B[iKdF$J!M6Mʋ-V!%%+֓+] J"v[d|gL޹w'~3sΟ;;&&&'bI65Jdq*E;AΤS%\N"lJ\ &8Ol͘e 'ؚ1=v`1SDx a1j Љ7z 7cJ ~r\-x9ixp,*[MЃ&;1I\:-xK 2g*I g1hJл!O|q!۔c{7Εu^F0P~@8UEC!.AG9=U{nmPC 8wP_:QW˶ek;uq A!c1/ Q/(aP|̚tbcSȄIhzÄ_11116Iv`WpIENDB`phpsysinfo-3.4.4/gfx/images/openEuler.png000066400000000000000000000020151467431054600204310ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%~IDATXGilLQK'EB="!" R DbJnk)4AS-jފjs;7wf '/=̛7yyǑW#>H-$ j!$H516׻L:]!PRHT UfTV0Ljb'2ԑMrz1 ; vRAT!md7CDf;89ސX{ næchKAEK}xU(KMrvyaz_*ؽ;͍GEo(-i5.-['bY&Cfg"> z%q廟#iV|ᔏnMQq%ڏbs/Y(SWG:#`SN_{ 36z=tT\\HWtz.ccp$%Yӝ k*.s;mMķBM2&7giv;O2ati s#)𧯖x-;9RMvζ[t/PwFY?MLߎ)GָZ_~/\O&.pvGTw] a܏"D_d$w&1DUI$PVw#$ٲ'LRWV #Kwj"Ud[գxj!w' x j9{ $gF+/?ַLSQiIENDB`phpsysinfo-3.4.4/gfx/images/openSUSE.png000066400000000000000000000016141467431054600201400ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYsLLutEXtCreation Time12/30/08 5tEXtSoftwareMacromedia Fireworks 8hxIDATX]UwK"kXٔKP% veZDQtq *.ʮ.pObXY* H*+a]-J>0pf=w)6L+3z$JB܎%8؋mC>_cȻYLU*/= "5F~Ǐ {-C?*`U9yē1#c*O!y8^Q>({^Ê)"Q X7aHT N!0N܏5 7`ywlSL^ZECxZʻv)8fzթRSmXC"í;,^:MnR̮RWX[n+aloW}]ÚThIRދ!S8~K;kr|&څ%1P\|ƾ>L1_ckBh}xY v*C mui^5VVf̭Ryvӵz~WhF|WĐjx c+5{*gO$` M?[jL1bU*9Q1cO TRP+j56]vNŝnt֧bb4[p.&tk6s5\+n, kEaEWNĐ'>ט3ጀi7{˃!IENDB`phpsysinfo-3.4.4/gfx/images/pfSense.png000066400000000000000000000010351467431054600200770ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84NIDATXGŖMr0 (VV]X]~3o,=d$e2_g*]->>Co#0G=?,řb# H9u} 1] HIGwwYwCq-G&3g)uRL6ҍ``!7}Oc3 K%O N6 fo3 T8H ЧV:N9o[QBU-c K b8/,1BO_K.qUm r3iAyV)XH1Gs־E6 lBEk2-$a1>_"u*ɭ$3I[I~+KRRʞRRVAAO;VEKRJ]IENDB`phpsysinfo-3.4.4/gfx/images/risiOS.png000066400000000000000000000031051467431054600177040ustar00rootroot00000000000000PNG  IHDR szzsRGBgAMA a pHYsodtEXtSoftwarePaint.NET v3.36%IDATXGkPSGQzCH"-F)AWvD*(0Ajw/Jgԩ:RZc+XEqT89` 79{ٽܵ p 9hn~Sp99~rBF?cEIM"xr4: 8ILVY &!+@zo 2,hM[5E҈l8=?7s;Ja Z lJz< DfthHs[/A&ެڰ:: `@5H} &d*ĖEE=$h&?AػP[t*ĚӖDvD1VcפY qWiGbpw"SIry#&uᱱdMn'817|!) pZ9nZB [+0yKq0Zf !fw퍰"ݟdf(&&r?^&;%r#\seh>lz|e U~= *Xa8-됗` ?Ovb$s*UojZ[y oec.]%[:k)Sr#&.h veAXcH`n_1$sY2XTX OEQ$iS.ANJYec9;1/dcV U)]kx}__[^j hD16^Ckѕ$ y1(E03` 09k9p4<(@>_`1Ajr|Ī3M&*!E Z% <lf{ý2\6$jgkZhi1/꧆кXE8G8MFkk!=ѼؗEzE - . kTgCzjh)XډxĸP@"9ż R q@JC~)b_ZKG6(Ҩ 6nD9kB篁!7hb_z?F̐҃ˮ v_=EIp_h0i ?B6  gL 9H<V x|."d"t'gE3\Hw$V^@Aʱk醍/]|niutp=ⱑd҂;Omo8q]rzܠS.Rs ?oӯEG܇sdn Bx|2X;Yyu q9hnE/o)2JzXE k}Zs{> LG RZ IENDB`phpsysinfo-3.4.4/gfx/images/unknown.png000066400000000000000000000037361467431054600202050ustar00rootroot00000000000000PNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGD pHYs B4$IDATXŗKo{{^8| %+!E$8pb@YDYc#Q@bDRd"=C9]U^tp@ 1a:sn=?R~_jT66Gy_5S ^"96rVapo+*`lll>M>wGa\^q;ۑKe蜥9bLfsWbȰ\.^_߼ϘdC`ރ,z0$ xÓɀR*?*L=5===|…' [[[PY2uTT"BY% /ٙ{X]٠\^l^ry*jEaFQ&^YK#ǫ8qk-/f晜i׫xjL (y1ιV 1< qzD`޾̍[uL`9s?ϽϾdiB6i&Jg lVjY`cO?؉WqMrWөiV7lD&YIrβOT-Da&$L4333Vef 7pUB*8nշ"]:ηߖZaiJyq=%Uyz=!biF/J6#ɍf_Sޡ- "( qq*b6%/(:{xgW8{86" ^Q#\DeyGOs>k+U1jf[T"LX{td# GOrY+Y[C!71I78n'P\|Jsc <8t Lb%QI5F6 lmM2d1wAYM:h_aJK ǢS} S$"TIҤRݪ&3^묭=Cݧ2p@#K HyǍhUC6EĬd ib\D1b4Ʊ|ގ?F Vgtwi(nʋ%֗ɄgсǵiM JPg9v;w~qP(ZܺukTy72A9K+o{(]{ 󿜟voWaK.`样J8>O,uuuE_Η zTXtCommentsI-./-άJMQLE\\ɚ F ^٥I Y %yE: \%%V Ĝ*.% % :0-z陹zE,=Q%%tEXtdate:create2019-03-03T22:09:16+00:00@%tEXtdate:modify2019-03-03T22:09:16+00:00`tEXtSoftwareMacromedia Fireworks 8hxIENDB`phpsysinfo-3.4.4/gfx/logo_32.gif000066400000000000000000000024051467431054600164560ustar00rootroot00000000000000GIF89a .,"$&$*,.,2464:<><2464><$"$$&$,*,,.,424464<:<<><BDFDJLNLRTVTZ\^\^\ jl nl rt vt z| ~|bdfdjlnlrtDBDDFDLNLTVT\Z\\^\ljllnltrttvt|z| !, QH0Ç#JlXċ)RǏ Cr0!ɓ(S\ir0cA8sxгhO@( ӧD!@}pA`A >dTJV@)T@h)Dp T(O@"E 6Q 6!@ K  Hpa!(AKPh"%F&bA@\Î=Drxн(;|rظ a qD <+e -fR&0tw7M$QHq @Vtv!AAv(5(E RxCt~8ލ@^ .z u@0Z'`7,Xs&0ؙ6 ТVXA` `ttZRZ jhlzh ht> )3;phpsysinfo-3.4.4/gfx/next.gif000066400000000000000000000015751467431054600161770ustar00rootroot00000000000000GIF89atvtĄ䌊Ԭ􄂄̤씒ܴ!,Z"\X ÅJHQ p c+ @Ȩ I )`0 (QbDG'*80€;phpsysinfo-3.4.4/gfx/prev.gif000066400000000000000000000015751467431054600161750ustar00rootroot00000000000000GIF89atvtĄ䌊Ԭ􄂄̤씒ܴ!,ZH *xp„ BH*&0(&` 4Q"XQ?fX8'УNؐ)€;phpsysinfo-3.4.4/gfx/reload.gif000066400000000000000000000016471467431054600164670ustar00rootroot00000000000000GIF89a#`Д9|2\TNJȅtg_f[(j$E=RJnfnd! ,` * `@#.@X#GAZ, !Gtȑsl̆t `J4`@L98@$T ZH@ .`UԪN2Q'M;phpsysinfo-3.4.4/gfx/right_black.gif000066400000000000000000000001011467431054600174520ustar00rootroot00000000000000GIF89a!,h˼|:4A;phpsysinfo-3.4.4/gfx/right_gray.gif000066400000000000000000000001011467431054600173400ustar00rootroot00000000000000GIF89a!,h˼|:4A;phpsysinfo-3.4.4/gfx/sort_asc.gif000066400000000000000000000002031467431054600170210ustar00rootroot00000000000000GIF89a!,0Ij ٗ`(мla ;AF,ȤrTF;phpsysinfo-3.4.4/gfx/sort_both.gif000066400000000000000000000002261467431054600172140ustar00rootroot00000000000000GIF89a! ,CIj ٗ`e$2S. oJA F)l(oB+j+܋$-KH<(zD0;phpsysinfo-3.4.4/gfx/sort_desc.gif000066400000000000000000000002011467431054600171670ustar00rootroot00000000000000GIF89a!,.I8ͻ`(ќhCh6GCC A:0 ;phpsysinfo-3.4.4/gfx/treeTable/000077500000000000000000000000001467431054600164315ustar00rootroot00000000000000phpsysinfo-3.4.4/gfx/treeTable/blank.gif000066400000000000000000000000671467431054600202120ustar00rootroot00000000000000GIF89a!,ڋ>;phpsysinfo-3.4.4/gfx/treeTable/tv-collapsable-last.gif000066400000000000000000000002011467431054600227620ustar00rootroot00000000000000GIF89a!,.p9] 'R@Sf`*t X!<Ȥ;phpsysinfo-3.4.4/gfx/treeTable/tv-collapsable.gif000066400000000000000000000001321467431054600220240ustar00rootroot00000000000000GIF89a!,+?ʟsR{'P$twa60i"`{;phpsysinfo-3.4.4/gfx/treeTable/tv-expandable-last.gif000066400000000000000000000002031467431054600226060ustar00rootroot00000000000000GIF89a!,00]֞ 7R ԞK-*)0-I/gl.#;phpsysinfo-3.4.4/gfx/treeTable/tv-expandable.gif000066400000000000000000000002051467431054600216470ustar00rootroot00000000000000GIF89a!,20]֞ 7R ԞK-*)0-I/D6Y;phpsysinfo-3.4.4/gfx/treeTable/tv-item-last.gif000066400000000000000000000001021467431054600214370ustar00rootroot00000000000000GIF89a!,ʟsj.֕K!F扦f;phpsysinfo-3.4.4/gfx/treeTable/tv-item.gif000066400000000000000000000001061467431054600205020ustar00rootroot00000000000000GIF89a!,ʟsj.֕KYA)yFmZ;phpsysinfo-3.4.4/gfx/treeTable/vertline.gif000066400000000000000000000001041467431054600207430ustar00rootroot00000000000000GIF89a!,ʟsj.֕Kfؘ=;phpsysinfo-3.4.4/includes/000077500000000000000000000000001467431054600155445ustar00rootroot00000000000000phpsysinfo-3.4.4/includes/autoloader.inc.php000066400000000000000000000054501467431054600211700ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: autoloader.inc.php 660 2012-08-27 11:08:40Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ error_reporting(E_ALL | E_STRICT); /** * automatic loading classes when using them * * @param string $class_name name of the class which must be loaded * * @return void */ function psi_autoload($class_name) { //$class_name = str_replace('-', '', $class_name); /* case-insensitive folders */ $dirs = array('/plugins/'.strtolower($class_name).'/', '/includes/mb/', '/includes/ups/'); foreach ($dirs as $dir) { if (file_exists(PSI_APP_ROOT.$dir.'class.'.strtolower($class_name).'.inc.php')) { include_once PSI_APP_ROOT.$dir.'class.'.strtolower($class_name).'.inc.php'; return; } } /* case-sensitive folders */ $dirs = array('/includes/', '/includes/interface/', '/includes/to/', '/includes/to/device/', '/includes/os/', '/includes/plugin/', '/includes/xml/', '/includes/web/', '/includes/error/', '/includes/js/', '/includes/output/'); foreach ($dirs as $dir) { if (file_exists(PSI_APP_ROOT.$dir.'class.'.$class_name.'.inc.php')) { include_once PSI_APP_ROOT.$dir.'class.'.$class_name.'.inc.php'; return; } } $error = PSI_Error::singleton(); $error->addError("psi_autoload(\"".$class_name."\")", "autoloading of class file (class.".$class_name.".inc.php) failed!"); $error->errorsAsXML(); } spl_autoload_register('psi_autoload'); /** * sets a user-defined error handler function * * @param integer $level contains the level of the error raised, as an integer. * @param string $message contains the error message, as a string. * @param string $file which contains the filename that the error was raised in, as a string. * @param integer $line which contains the line number the error was raised at, as an integer. * * @return void */ function errorHandlerPsi($level, $message, $file, $line) { $error = PSI_Error::singleton(); if ((PSI_DEBUG && !preg_match("/^fgets\(|^stream_select\(/", $message)) || (($level !== 2) && ($level !== 8)) || !preg_match("/^[^:]*: open_basedir |^fopen\(|^fwrite\(|^is_readable\(|^file_exists\(|^fgets\(|^stream_select\(/", $message)) { // disable open_basedir, fopen, is_readable, file_exists, fgets and stream_select warnings and notices $error->addPhpError("errorHandlerPsi : ", "Level : ".$level." Message : ".$message." File : ".$file." Line : ".$line); } } set_error_handler('errorHandlerPsi'); phpsysinfo-3.4.4/includes/class.CommonFunctions.inc.php000066400000000000000000001050721467431054600232570ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.CommonFunctions.inc.php 699 2012-09-15 11:57:13Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * class with common functions used in all places * * @category PHP * @package PSI * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class CommonFunctions { /** * holds dmi memory data * * @var array */ private static $_dmimd = null; private static function _parse_log_file($string) { if (defined('PSI_LOG') && is_string(PSI_LOG) && (strlen(PSI_LOG)>0) && ((substr(PSI_LOG, 0, 1)=="-") || (substr(PSI_LOG, 0, 1)=="+"))) { $log_file = substr(PSI_LOG, 1); if (file_exists($log_file)) { $contents = @file_get_contents($log_file); if ($contents && preg_match("/^\-\-\-[^-\r\n]+\-\-\- ".preg_quote($string, '/')."\r?\n/m", $contents, $matches, PREG_OFFSET_CAPTURE)) { $findIndex = $matches[0][1]; if (preg_match("/\r?\n/m", $contents, $matches, PREG_OFFSET_CAPTURE, $findIndex)) { $startIndex = $matches[0][1]+1; if (preg_match("/^\-\-\-[^-\r\n]+\-\-\- /m", $contents, $matches, PREG_OFFSET_CAPTURE, $startIndex)) { $stopIndex = $matches[0][1]; return substr($contents, $startIndex, $stopIndex-$startIndex); } else { return substr($contents, $startIndex); } } } } } return false; } /** * Find a system program, do also path checking when not running on WINNT * on WINNT we simply return the name with the exe extension to the program name * * @param string $strProgram name of the program * * @return string|null complete path and name of the program */ public static function _findProgram($strProgram) { $path_parts = pathinfo($strProgram); if (empty($path_parts['basename'])) { return null; } $arrPath = array(); if (empty($path_parts['dirname']) || ($path_parts['dirname'] == '.')) { if ((PSI_OS == 'WINNT') && empty($path_parts['extension'])) { $strProgram .= '.exe'; $path_parts = pathinfo($strProgram); } if (PSI_OS == 'WINNT') { if (self::readenv('Path', $serverpath)) { $arrPath = preg_split('/;/', $serverpath, -1, PREG_SPLIT_NO_EMPTY); } } else { if (self::readenv('PATH', $serverpath)) { $arrPath = preg_split('/:/', $serverpath, -1, PREG_SPLIT_NO_EMPTY); } } if (defined('PSI_UNAMEO') && (PSI_UNAMEO === 'Android') && !empty($arrPath)) { array_push($arrPath, '/system/bin'); // Termux patch } if (defined('PSI_ADD_PATHS') && is_string(PSI_ADD_PATHS)) { if (preg_match(ARRAY_EXP, PSI_ADD_PATHS)) { $arrPath = array_merge(eval(PSI_ADD_PATHS), $arrPath); // In this order so $addpaths is before $arrPath when looking for a program } else { $arrPath = array_merge(array(PSI_ADD_PATHS), $arrPath); // In this order so $addpaths is before $arrPath when looking for a program } } } else { //directory defined array_push($arrPath, $path_parts['dirname']); $strProgram = $path_parts['basename']; } //add some default paths if we still have no paths here if (empty($arrPath) && (PSI_OS != 'WINNT')) { if (PSI_OS == 'Android') { array_push($arrPath, '/system/bin'); } else { array_push($arrPath, '/bin', '/sbin', '/usr/bin', '/usr/sbin', '/usr/local/bin', '/usr/local/sbin'); } } $exceptPath = ""; if ((PSI_OS == 'WINNT') && self::readenv('WinDir', $windir)) { foreach ($arrPath as $strPath) { if ((strtolower($strPath) == strtolower($windir)."\\system32") && is_dir($windir."\\SysWOW64")) { if (is_dir($windir."\\sysnative\\drivers")) { // or strlen(decbin(~0)) == 32; is_dir($windir."\\sysnative") sometimes does not work $exceptPath = $windir."\\sysnative"; //32-bit PHP on 64-bit Windows } else { $exceptPath = $windir."\\SysWOW64"; //64-bit PHP on 64-bit Windows } array_push($arrPath, $exceptPath); break; } } } elseif (PSI_OS == 'Android') { $exceptPath = '/system/bin'; } foreach ($arrPath as $strPath) { // Path with and without trailing slash if (PSI_OS == 'WINNT') { $strPath = rtrim($strPath, "\\"); $strPathS = $strPath."\\"; } else { $strPath = rtrim($strPath, "/"); $strPathS = $strPath."/"; } if (($strPath !== $exceptPath) && !is_dir($strPath)) { continue; } $strProgrammpath = $strPathS.$strProgram; if (is_executable($strProgrammpath) || ((PSI_OS == 'WINNT') && (strtolower($path_parts['extension']) == 'py') && is_file($strProgrammpath))) { return $strProgrammpath; } } return null; } /** * Execute a system program. return a trim()'d result. * does very crude pipe and multiple commands (on WinNT) checking. you need ' | ' or ' & ' for it to work * ie $program = CommonFunctions::executeProgram('netstat', '-anp | grep LIST'); * NOT $program = CommonFunctions::executeProgram('netstat', '-anp|grep LIST'); * * @param string $strProgramname name of the program * @param string $strArguments arguments to the program * @param string &$strBuffer output of the command * @param boolean $booErrorRep en- or disables the reporting of errors which should be logged * @param int $timeout timeout value in seconds (default value is PSI_EXEC_TIMEOUT_INT) * * @return boolean command successfull or not */ public static function executeProgram($strProgramname, $strArguments, &$strBuffer, $booErrorRep = true, $timeout = PSI_EXEC_TIMEOUT_INT, $separator = '') { if (PSI_ROOT_FILESYSTEM !== '') { // disabled if ROOTFS defined return false; } if ((PSI_OS != 'WINNT') && preg_match('/^([^=]+=[^ \t]+)[ \t]+(.*)$/', $strProgramname, $strmatch)) { $strSet = $strmatch[1].' '; $strProgramname = $strmatch[2]; } else { $strSet = ''; } $strAll = trim($strSet.$strProgramname.' '.$strArguments); if (defined('PSI_LOG') && is_string(PSI_LOG) && (strlen(PSI_LOG)>0) && ((substr(PSI_LOG, 0, 1)=="-") || (substr(PSI_LOG, 0, 1)=="+"))) { $out = self::_parse_log_file("Executing: ".$strAll); if ($out == false) { if (substr(PSI_LOG, 0, 1)=="-") { $strBuffer = ''; return false; } } else { $strBuffer = $out; return true; } } $PathStr = ''; if (defined('PSI_EMU_PORT') && !in_array($strProgramname, array('ping', 'snmpwalk'))) { if (defined('PSI_SUDO_COMMANDS') && is_string(PSI_SUDO_COMMANDS)) { if (preg_match(ARRAY_EXP, PSI_SUDO_COMMANDS)) { $sudocommands = eval(PSI_SUDO_COMMANDS); } else { $sudocommands = array(PSI_SUDO_COMMANDS); } if (in_array($strProgramname, $sudocommands)) { $strAll = 'sudo '.$strAll; } } $strSet = ''; $strProgramname = 'sshpass'; $strOptions = ''; if (defined('PSI_EMU_ADD_OPTIONS') && is_string(PSI_EMU_ADD_OPTIONS)) { if (preg_match(ARRAY_EXP, PSI_EMU_ADD_OPTIONS)) { $arrParams = eval(PSI_EMU_ADD_OPTIONS); } else { $arrParams = array(PSI_EMU_ADD_OPTIONS); } foreach ($arrParams as $Params) if (preg_match('/(\S+)\s*\=\s*(\S+)/', $Params, $obuf)) { $strOptions = $strOptions.'-o '.$obuf[1].'='.$obuf[2].' '; } } if (defined('PSI_EMU_ADD_PATHS') && is_string(PSI_EMU_ADD_PATHS)) { if (preg_match(ARRAY_EXP, PSI_EMU_ADD_PATHS)) { $arrPath = eval(PSI_EMU_ADD_PATHS); } else { $arrPath = array(PSI_EMU_ADD_PATHS); } foreach ($arrPath as $Path) { if ($PathStr === '') { $PathStr = $Path; } else { $PathStr = $PathStr.':'.$Path; } } if ($separator === '') { $strArguments = '-e ssh -Tq '.$strOptions.'-o ConnectTimeout='.$timeout.' -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null '.PSI_EMU_USER.'@'.PSI_EMU_HOSTNAME.' -p '.PSI_EMU_PORT.' "PATH=\''.$PathStr.':$PATH\' '.$strAll.'"' ; } else { $strArguments = '-e ssh -Tq '.$strOptions.'-o ConnectTimeout='.$timeout.' -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null '.PSI_EMU_USER.'@'.PSI_EMU_HOSTNAME.' -p '.PSI_EMU_PORT; } } else { if ($separator === '') { $strArguments = '-e ssh -Tq '.$strOptions.'-o ConnectTimeout='.$timeout.' -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null '.PSI_EMU_USER.'@'.PSI_EMU_HOSTNAME.' -p '.PSI_EMU_PORT.' "'.$strAll.'"' ; } else { $strArguments = '-e ssh -Tq '.$strOptions.'-o ConnectTimeout='.$timeout.' -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null '.PSI_EMU_USER.'@'.PSI_EMU_HOSTNAME.' -p '.PSI_EMU_PORT; } } $externally = true; } else { $externally = false; } $strProgram = self::_findProgram($strProgramname); $error = PSI_Error::singleton(); if (!$strProgram) { if ($booErrorRep || $externally) { $error->addError('find_program("'.$strProgramname.'")', 'program not found on the machine'); } return false; } else { if (preg_match('/\s/', $strProgram)) { $strProgram = '"'.$strProgram.'"'; } } if ((PSI_OS != 'WINNT') && !defined('PSI_EMU_HOSTNAME') && defined('PSI_SUDO_COMMANDS') && is_string(PSI_SUDO_COMMANDS)) { if (preg_match(ARRAY_EXP, PSI_SUDO_COMMANDS)) { $sudocommands = eval(PSI_SUDO_COMMANDS); } else { $sudocommands = array(PSI_SUDO_COMMANDS); } if (in_array($strProgramname, $sudocommands)) { $sudoProgram = self::_findProgram("sudo"); if (!$sudoProgram) { $error->addError('find_program("sudo")', 'program not found on the machine'); return false; } else { if (preg_match('/\s/', $sudoProgram)) { $strProgram = '"'.$sudoProgram.'" '.$strProgram; } else { $strProgram = $sudoProgram.' '.$strProgram; } } } } $strArgs = $strArguments; // see if we've gotten a | or &, if we have we need to do path checking on the cmd if ($strArgs) { $arrArgs = preg_split('/ /', $strArgs, -1, PREG_SPLIT_NO_EMPTY); for ($i = 0, $cnt_args = count($arrArgs); $i < $cnt_args; $i++) { if (($arrArgs[$i] == '|') || ($arrArgs[$i] == '&')) { $strCmd = $arrArgs[$i + 1]; $strNewcmd = self::_findProgram($strCmd); if (!$strNewcmd) { if ($booErrorRep || $externally) { $error->addError('find_program("'.$strCmd.'")', 'program not found on the machine'); } return false; } if (preg_match('/\s/', $strNewcmd)) { if ($arrArgs[$i] == '|') { $strArgs = preg_replace('/\| '.$strCmd.'/', '| "'.$strNewcmd.'"', $strArgs); } else { $strArgs = preg_replace('/& '.$strCmd.'/', '& "'.$strNewcmd.'"', $strArgs); } } else { if ($arrArgs[$i] == '|') { $strArgs = preg_replace('/\| '.$strCmd.'/', '| '.$strNewcmd, $strArgs); } else { $strArgs = preg_replace('/& '.$strCmd.'/', '& '.$strNewcmd, $strArgs); } } } } $strArgs = ' '.$strArgs; } $strBuffer = ''; $strError = ''; $pipes = array(); $descriptorspec = array(0=>array("pipe", "r"), 1=>array("pipe", "w"), 2=>array("pipe", "w")); if ($externally) { putenv('SSHPASS='.PSI_EMU_PASSWORD); } if (defined("PSI_MODE_POPEN") && PSI_MODE_POPEN) { if ($separator !== '') { $error->addError('executeProgram', 'wrong execution mode'); return false; } if (PSI_OS == 'WINNT') { $process = $pipes[1] = popen($strSet.$strProgram.$strArgs." 2>nul", "r"); } else { $process = $pipes[1] = popen($strSet.$strProgram.$strArgs." 2>/dev/null", "r"); } } else { $process = proc_open($strSet.$strProgram.$strArgs, $descriptorspec, $pipes); if ($separator !== '') { if ($PathStr === '') { fwrite($pipes[0], $strAll."\n "); // spaces at end for handling 'more' } else { fwrite($pipes[0], 'PATH=\''.$PathStr.':$PATH\' '.$strAll."\n"); } } } if ($externally) { putenv('SSHPASS'); } if (is_resource($process)) { $te = self::_timeoutfgets($pipes, $strBuffer, $strError, $timeout, $separator); if (defined("PSI_MODE_POPEN") && PSI_MODE_POPEN) { $return_value = pclose($pipes[1]); } else { fclose($pipes[0]); fclose($pipes[1]); fclose($pipes[2]); // It is important that you close any pipes before calling // proc_close in order to avoid a deadlock if ($te) { proc_terminate($process); // proc_close tends to hang if the process is timing out $return_value = 0; } else { $return_value = proc_close($process); } } } else { if ($booErrorRep) { $error->addError($strProgram, "\nOpen process error"); } return false; } $strError = trim($strError); $strBuffer = trim($strBuffer); if (defined('PSI_LOG') && is_string(PSI_LOG) && (strlen(PSI_LOG)>0) && (substr(PSI_LOG, 0, 1)!="-") && (substr(PSI_LOG, 0, 1)!="+")) { error_log("---".gmdate('r T')."--- Executing: ".$strAll."\n".$strBuffer."\n", 3, PSI_LOG); } if (! empty($strError)) { if ($booErrorRep) { $error->addError($strProgram, $strError."\nReturn value: ".$return_value); } return $return_value == 0; } return true; } /** * read a one-line value from a file with a similar name * * @return value if successfull or null if not */ public static function rolv($similarFileName, $match = "//", $replace = "") { if (defined('PSI_EMU_PORT')) { return null; } $filename = preg_replace($match, $replace, $similarFileName); if (self::fileexists($filename) && self::rfts($filename, $buf, 1, 4096, false) && (($buf=trim($buf)) != "")) { return $buf; } else { return null; } } /** * read data from array $_SERVER * * @param string $strElem element of array * @param string &$strBuffer output of the command * * @return string */ public static function readenv($strElem, &$strBuffer) { $strBuffer = ''; if (PSI_OS == 'WINNT') { //case insensitive if (isset($_SERVER)) { foreach ($_SERVER as $index=>$value) { if (is_string($value) && (trim($value) !== '') && (strtolower($index) === strtolower($strElem))) { $strBuffer = $value; return true; } } } } else { if (isset($_SERVER[$strElem]) && is_string($value = $_SERVER[$strElem]) && (trim($value) !== '')) { $strBuffer = $value; return true; } } return false; } /** * read a file and return the content as a string * * @param string $strFileName name of the file which should be read * @param string &$strRet content of the file (reference) * @param int $intLines control how many lines should be read * @param int $intBytes control how many bytes of each line should be read * @param boolean $booErrorRep en- or disables the reporting of errors which should be logged * * @return boolean command successfull or not */ public static function rfts($strFileName, &$strRet, $intLines = 0, $intBytes = 4096, $booErrorRep = true) { if (defined('PSI_EMU_PORT')) { return false; } if (defined('PSI_LOG') && is_string(PSI_LOG) && (strlen(PSI_LOG)>0) && ((substr(PSI_LOG, 0, 1)=="-") || (substr(PSI_LOG, 0, 1)=="+"))) { $out = self::_parse_log_file("Reading: ".$strFileName); if ($out == false) { if (substr(PSI_LOG, 0, 1)=="-") { $strRet = ''; return false; } } else { $strRet = $out; return true; } } if (PSI_ROOT_FILESYSTEM !== '') { $rfsinfo = "[".PSI_ROOT_FILESYSTEM."]"; } else { $rfsinfo = ''; } $strFile = ""; $intCurLine = 1; $error = PSI_Error::singleton(); if (file_exists(PSI_ROOT_FILESYSTEM.$strFileName)) { if (is_readable(PSI_ROOT_FILESYSTEM.$strFileName)) { if ($fd = fopen(PSI_ROOT_FILESYSTEM.$strFileName, 'r')) { while (!feof($fd)) { $strFile .= fgets($fd, $intBytes); if ($intLines <= $intCurLine && $intLines != 0) { break; } else { $intCurLine++; } } fclose($fd); $strRet = $strFile; if (defined('PSI_LOG') && is_string(PSI_LOG) && (strlen(PSI_LOG)>0) && (substr(PSI_LOG, 0, 1)!="-") && (substr(PSI_LOG, 0, 1)!="+")) { if ((strlen($strRet)>0)&&(substr($strRet, -1)!="\n")) { error_log("---".gmdate('r T')."--- Reading: ".$strFileName."\n".$strRet."\n", 3, PSI_LOG); } else { error_log("---".gmdate('r T')."--- Reading: ".$strFileName."\n".$strRet, 3, PSI_LOG); } } } else { if ($booErrorRep) { $error->addError('fopen('.$rfsinfo.$strFileName.')', 'file can not read by phpsysinfo'); } return false; } } else { if ($booErrorRep) { $error->addError('fopen('.$rfsinfo.$strFileName.')', 'file permission error'); } return false; } } else { if ($booErrorRep) { $error->addError('file_exists('.$rfsinfo.$strFileName.')', 'the file does not exist on your machine'); } return false; } return true; } /** * read a data file and return the content as a string * * @param string $strDataFileName name of the data file which should be read * @param string &$strRet content of the data file (reference) * * @return boolean command successfull or not */ public static function rftsdata($strDataFileName, &$strRet) { $strFile = ""; $strFileName = PSI_APP_ROOT."/data/".$strDataFileName; $error = PSI_Error::singleton(); if (file_exists($strFileName)) { if (is_readable($strFileName)) { if ($fd = fopen($strFileName, 'r')) { while (!feof($fd)) { $strFile .= fgets($fd, 4096); } fclose($fd); $strRet = $strFile; } else { $error->addError('fopen('.$strFileName.')', 'file can not read by phpsysinfo'); return false; } } else { $error->addError('fopen('.$strFileName.')', 'file permission error'); return false; } } else { $error->addError('file_exists('.$strFileName.')', 'the file does not exist on your machine'); return false; } return true; } /** * Find pathnames matching a pattern * * @param string $pattern the pattern. No tilde expansion or parameter substitution is done. * @param int $flags * * @return an array containing the matched files/directories, an empty array if no file matched or false on error */ public static function findglob($pattern, $flags = 0) { if (defined('PSI_EMU_PORT')) { return false; } $outarr = glob(PSI_ROOT_FILESYSTEM.$pattern, $flags); if (PSI_ROOT_FILESYSTEM == '') { return $outarr; } elseif ($outarr === false) { return false; } else { $len = strlen(PSI_ROOT_FILESYSTEM); $newoutarr = array(); foreach ($outarr as $out) { $newoutarr[] = substr($out, $len); // path without ROOTFS } return $newoutarr; } } /** * file exists * * @param string $strFileName name of the file which should be check * * @return boolean command successfull or not */ public static function fileexists($strFileName) { if (defined('PSI_EMU_PORT')) { return false; } if (defined('PSI_LOG') && is_string(PSI_LOG) && (strlen(PSI_LOG)>0) && ((substr(PSI_LOG, 0, 1)=="-") || (substr(PSI_LOG, 0, 1)=="+"))) { $log_file = substr(PSI_LOG, 1); if (file_exists($log_file) && ($contents = @file_get_contents($log_file)) && preg_match("/^\-\-\-[^-\n]+\-\-\- ".preg_quote("Reading: ".$strFileName, '/')."\n/m", $contents)) { return true; } else { if (substr(PSI_LOG, 0, 1)=="-") { return false; } } } $exists = file_exists(PSI_ROOT_FILESYSTEM.$strFileName); if (defined('PSI_LOG') && is_string(PSI_LOG) && (strlen(PSI_LOG)>0) && (substr(PSI_LOG, 0, 1)!="-") && (substr(PSI_LOG, 0, 1)!="+")) { if ((substr($strFileName, 0, 5) === "/dev/") && $exists) { error_log("---".gmdate('r T')."--- Reading: ".$strFileName."\ndevice exists\n", 3, PSI_LOG); } } return $exists; } /** * reads a directory and return the name of the files and directorys in it * * @param string $strPath path of the directory which should be read * @param boolean $booErrorRep en- or disables the reporting of errors which should be logged * * @return array content of the directory excluding . and .. */ public static function gdc($strPath, $booErrorRep = true) { $arrDirectoryContent = array(); $error = PSI_Error::singleton(); if (is_dir($strPath)) { if ($handle = opendir($strPath)) { while (($strFile = readdir($handle)) !== false) { if ($strFile != "." && $strFile != "..") { $arrDirectoryContent[] = $strFile; } } closedir($handle); } else { if ($booErrorRep) { $error->addError('opendir('.$strPath.')', 'directory can not be read by phpsysinfo'); } } } else { if ($booErrorRep) { $error->addError('is_dir('.$strPath.')', 'directory does not exist on your machine'); } } return $arrDirectoryContent; } /** * Check for needed php extensions * * We need that extensions for almost everything * This function will return a hard coded * XML string (with headers) if the SimpleXML extension isn't loaded. * Then it will terminate the script. * See bug #1787137 * * @param array $arrExt additional extensions for which a check should run * * @return void */ public static function checkForExtensions($arrExt = array()) { if (defined('PSI_SYSTEM_CODEPAGE') && (PSI_SYSTEM_CODEPAGE !== null) && ((strcasecmp(PSI_SYSTEM_CODEPAGE, "UTF-8") == 0) || (strcasecmp(PSI_SYSTEM_CODEPAGE, "CP437") == 0))) $arrReq = array('simplexml', 'pcre', 'xml', 'dom'); elseif (PSI_OS == 'WINNT') $arrReq = array('simplexml', 'pcre', 'xml', 'dom', 'mbstring', 'com_dotnet'); else $arrReq = array('simplexml', 'pcre', 'xml', 'dom', 'mbstring'); $extensions = array_merge($arrExt, $arrReq); $text = ""; $error = false; $text .= "\n"; $text .= "\n"; $text .= " \n"; foreach ($extensions as $extension) { if (!extension_loaded($extension)) { $text .= " checkForExtensions\n"; $text .= " phpSysInfo requires the ".$extension." extension to php in order to work properly.\n"; $error = true; } } $text .= " \n"; $text .= ""; if ($error) { header('Content-Type: text/xml'); echo $text; die(); } } /** * get the content of stdout/stderr with the option to set a timeout for reading * * @param array $pipes array of file pointers for stdin, stdout, stderr (proc_open()) * @param string &$out target string for the output message (reference) * @param string &$err target string for the error message (reference) * @param int $timeout timeout value in seconds * * @return boolean timeout expired or not */ private static function _timeoutfgets($pipes, &$out, &$err, $timeout, $separator = '') { $w = null; $e = null; $te = false; if (defined("PSI_MODE_POPEN") && PSI_MODE_POPEN) { $pipe2 = false; } else { $pipe2 = true; } while (!(feof($pipes[1]) && (!$pipe2 || feof($pipes[2])))) { if ($pipe2) { $read = array($pipes[1], $pipes[2]); } else { $read = array($pipes[1]); } $n = stream_select($read, $w, $e, $timeout); if ($n === false) { error_log('stream_select: failed !'); break; } elseif ($n === 0) { error_log('stream_select: timeout expired !'); // if ($separator !== '') { // fwrite($pipes[0], "q"); // } $te = true; break; } foreach ($read as $r) { if ($r == $pipes[1]) { $out .= fread($r, 4096); } elseif (feof($pipes[1]) && $pipe2 && ($r == $pipes[2])) {//read STDERR after STDOUT $err .= fread($r, 4096); } } // if (($separator !== '') && preg_match('/'.$separator.'[^'.$separator.']+'.$separator.'/', $out)) { if (($separator !== '') && preg_match('/'.$separator.'[\s\S]+'.$separator.'/', $out)) { fwrite($pipes[0], "quit\n"); $separator = ''; //only one time // $te = true; // break; } } return $te; } /** * get all configured plugins from phpsysinfo.ini (file must be included and processed before calling this function) * * @return array */ public static function getPlugins() { if (defined('PSI_PLUGINS') && is_string(PSI_PLUGINS)) { if (preg_match(ARRAY_EXP, PSI_PLUGINS)) { return eval(strtolower(PSI_PLUGINS)); } else { return array(strtolower(PSI_PLUGINS)); } } else { return array(); } } /** * name natural compare function * * @return comprasion result */ public static function name_natural_compare($a, $b) { return strnatcmp($a->getName(), $b->getName()); } /** * get virtualizer from dmi data * * @return string|null */ public static function decodevirtualizer($vendor_data) { if (gettype($vendor_data) === "array") { $vendarray = array( 'KVM' => 'kvm', // KVM 'OpenStack' => 'kvm', // Detect OpenStack instance as KVM in non x86 architecture 'KubeVirt' => 'kvm', // Detect KubeVirt instance as KVM in non x86 architecture 'Amazon EC2' => 'amazon', // Amazon EC2 Nitro using Linux KVM 'QEMU' => 'qemu', // QEMU 'VMware' => 'vmware', // VMware https://kb.vmware.com/s/article/1009458 'VMW' => 'vmware', 'innotek GmbH' => 'oracle', // Oracle VM VirtualBox 'VirtualBox' => 'oracle', 'Xen' => 'xen', // Xen hypervisor 'Bochs' => 'bochs', // Bochs 'Parallels' => 'parallels', // Parallels // https://wiki.freebsd.org/bhyve 'BHYVE' => 'bhyve', // bhyve 'Hyper-V' => 'microsoft', // Hyper-V 'Apple Virtualization' => 'apple', // Apple Virtualization.framework guests 'Microsoft Corporation Virtual Machine' => 'microsoft' // Hyper-V ); for ($i = 0; $i < count($vendor_data); $i++) { foreach ($vendarray as $vend=>$virt) { if (preg_match('/^'.$vend.'/', $vendor_data[$i])) { return $virt; } } } } elseif (gettype($vendor_data) === "string") { $vidarray = array( 'bhyvebhyve' => 'bhyve', // bhyve 'KVMKVMKVM' => 'kvm', // KVM 'LinuxKVMHv' => 'hv-kvm', // KVM (KVM + HyperV Enlightenments) 'MicrosoftHv' => 'microsoft', // Hyper-V 'lrpepyhvr' => 'parallels', // Parallels 'UnisysSpar64' => 'spar', // Unisys sPar 'VMwareVMware' => 'vmware', // VMware 'XenVMMXenVMM' => 'xen', // Xen hypervisor 'ACRNACRNACRN' => 'acrn', // ACRN hypervisor 'TCGTCGTCGTCG' => 'qemu', // QEMU 'QNXQVMBSQG' => 'qnx', // QNX hypervisor 'VBoxVBoxVBox' => 'oracle', // Oracle VM VirtualBox 'SRESRESRESRE' => 'sre' // LMHS SRE hypervisor ); $shortvendorid = trim(preg_replace('/[\s!\.]/', '', $vendor_data)); if (($shortvendorid !== "") && isset($vidarray[$shortvendorid])) { return $vidarray[$shortvendorid]; } } return null; } /** * readdmimemdata function * * @return array */ public static function readdmimemdata() { if ((PSI_OS != 'WINNT') && (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT')) && (self::$_dmimd === null)) { self::$_dmimd = array(); $buffer = ''; if (defined('PSI_DMIDECODE_ACCESS') && (strtolower(PSI_DMIDECODE_ACCESS)==='data')) { self::rftsdata('dmidecode.tmp', $buffer); } elseif (self::_findProgram('dmidecode')) { self::executeProgram('dmidecode', '-t 17', $buffer, PSI_DEBUG); } if (!empty($buffer)) { $banks = preg_split('/^(?=Handle\s)/m', $buffer, -1, PREG_SPLIT_NO_EMPTY); foreach ($banks as $bank) if (preg_match('/^Handle\s/', $bank)) { $lines = preg_split("/\n/", $bank, -1, PREG_SPLIT_NO_EMPTY); $mem = array(); foreach ($lines as $line) if (preg_match('/^\s+([^:]+):(.+)/', $line, $params)) { if (preg_match('/^0x([A-F\d]+)/', $params2 = trim($params[2]), $buff)) { $mem[trim($params[1])] = trim($buff[1]); } elseif ($params2 != '') { $mem[trim($params[1])] = $params2; } } if (!empty($mem)) { self::$_dmimd[] = $mem; } } } } return self::$_dmimd; } } phpsysinfo-3.4.4/includes/class.Parser.inc.php000066400000000000000000000356621467431054600214010ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.Parser.inc.php 604 2012-07-10 07:31:34Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * parser class with common used parsing metods * * @category PHP * @package PSI * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Parser { /** * parsing the output of lspci command * * @param bool $debug * @return array */ public static function lspci($debug = PSI_DEBUG) { $arrResults = array(); if (CommonFunctions::executeProgram("lspci", (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS)?"-m":"", $strBuf, $debug)) { $arrLines = preg_split("/\n/", $strBuf, -1, PREG_SPLIT_NO_EMPTY); foreach ($arrLines as $strLine) { $dev = new HWDevice(); $arrParams = preg_split('/(\"? ")|(\" (?=-))/', trim($strLine)); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && ($cp = count($arrParams)) >= 6) { $arrParams[$cp-1] = trim($arrParams[$cp-1], '"'); // remove last " $dev->setName($arrParams[1].': '.$arrParams[2].' '.$arrParams[3]); if (preg_match('/^-/', $arrParams[4])) { if (($arrParams[5] !== "") && !preg_match('/^Unknown vendor/', $arrParams[5])) { $dev->setManufacturer(trim($arrParams[5])); } if (($arrParams[6] !== "") && !preg_match('/^Device /', $arrParams[6])) { $dev->setProduct(trim($arrParams[6])); } } else { if (($arrParams[4] !== "") && !preg_match('/^Unknown vendor/', $arrParams[4])) { $dev->setManufacturer(trim($arrParams[4])); } if (($arrParams[5] !== "") && !preg_match('/^Device /', $arrParams[5])) { $dev->setProduct(trim($arrParams[5])); } } } else { $strLine=trim(preg_replace('/(")|( -\S+)/', '', $strLine)); $arrParams = preg_split('/ /', trim($strLine), 2); if (count($arrParams) == 2) $strName = preg_replace('/\(rev\s[^\)]+\)/', '', $arrParams[1]); else $strName = "unknown"; $dev->setName($strName); } $arrResults[] = $dev; } } return $arrResults; } /** * parsing the output of df command * * @param string $df_param additional parameter for df command * @param bool $get_inodes * * @return array */ public static function df($df_param = "", $get_inodes = true) { $arrResult = array(); if (CommonFunctions::executeProgram('mount', '', $mount, PSI_DEBUG)) { $mount = preg_split("/\n/", $mount, -1, PREG_SPLIT_NO_EMPTY); foreach ($mount as $mount_line) { if (preg_match("/(\S+) on ([\S ]+) type (.*) \((.*)\)/", $mount_line, $mount_buf)) { $parm = array(); $parm['mountpoint'] = trim($mount_buf[2]); $parm['fstype'] = $mount_buf[3]; $parm['name'] = $mount_buf[1]; if (PSI_SHOW_MOUNT_OPTION) $parm['options'] = $mount_buf[4]; $mount_parm[] = $parm; } elseif (preg_match("/(\S+) is (.*) mounted on (\S+) \(type (.*)\)/", $mount_line, $mount_buf)) { $parm = array(); $parm['mountpoint'] = trim($mount_buf[3]); $parm['fstype'] = $mount_buf[4]; $parm['name'] = $mount_buf[1]; if (PSI_SHOW_MOUNT_OPTION) $parm['options'] = $mount_buf[2]; $mount_parm[] = $parm; } elseif (preg_match("/(\S+) (.*) on (\S+) \((.*)\)/", $mount_line, $mount_buf)) { $parm = array(); $parm['mountpoint'] = trim($mount_buf[3]); $parm['fstype'] = $mount_buf[2]; $parm['name'] = $mount_buf[1]; if (PSI_SHOW_MOUNT_OPTION) $parm['options'] = $mount_buf[4]; $mount_parm[] = $parm; } elseif (preg_match("/(\S+) on ([\S ]+) \((\S+)(,\s(.*))?\)/", $mount_line, $mount_buf)) { $parm = array(); $parm['mountpoint'] = trim($mount_buf[2]); $parm['fstype'] = $mount_buf[3]; $parm['name'] = $mount_buf[1]; if (PSI_SHOW_MOUNT_OPTION) $parm['options'] = isset($mount_buf[5]) ? $mount_buf[5] : ''; $mount_parm[] = $parm; } } } elseif (CommonFunctions::rfts(((PSI_ROOT_FILESYSTEM === '')||(PSI_OS !== 'Linux'))?"/etc/mtab":"/proc/1/mounts", $mount)) { $mount = preg_split("/\n/", $mount, -1, PREG_SPLIT_NO_EMPTY); foreach ($mount as $mount_line) { if (preg_match("/(\S+) (\S+) (\S+) (\S+) ([0-9]+) ([0-9]+)/", $mount_line, $mount_buf)) { $parm = array(); $mount_point = preg_replace("/\\\\040/i", ' ', $mount_buf[2]); //space as \040 $parm['mountpoint'] = $mount_point; $parm['fstype'] = $mount_buf[3]; $parm['name'] = $mount_buf[1]; if (PSI_SHOW_MOUNT_OPTION) $parm['options'] = $mount_buf[4]; $mount_parm[] = $parm; } } } $df = ""; CommonFunctions::executeProgram('df', '-k '.$df_param, $df, PSI_DEBUG); if ($df!=="") { $df = preg_split("/\n/", $df, -1, PREG_SPLIT_NO_EMPTY); if ($get_inodes && PSI_SHOW_INODES) { if (CommonFunctions::executeProgram('df', '-i '.$df_param, $df2, PSI_DEBUG)) { $df2 = preg_split("/\n/", $df2, -1, PREG_SPLIT_NO_EMPTY); // Store inode use% in an associative array (df_inodes) for later use foreach ($df2 as $df2_line) { if (preg_match("/^(\S+).*\s([0-9]+)%/", $df2_line, $inode_buf)) { $df_inodes[$inode_buf[1]] = $inode_buf[2]; } } } } foreach ($df as $df_line) { $df_buf1 = preg_split("/(\%\s)/", $df_line, 3); if (count($df_buf1) < 2) { continue; } if (preg_match("/(.*)(\s+)(([0-9]+)(\s+)([0-9]+)(\s+)([\-0-9]+)(\s+)([0-9]+)$)/", $df_buf1[0], $df_buf2)) { if (count($df_buf1) == 3) { $df_buf = array($df_buf2[1], $df_buf2[4], $df_buf2[6], $df_buf2[8], $df_buf2[10], $df_buf1[2]); } else { $df_buf = array($df_buf2[1], $df_buf2[4], $df_buf2[6], $df_buf2[8], $df_buf2[10], $df_buf1[1]); } if (count($df_buf) == 6) { $df_buf[5] = trim($df_buf[5]); $dev = new DiskDevice(); $dev->setName(trim($df_buf[0])); if ($df_buf[2] < 0) { $dev->setTotal($df_buf[3] * 1024); $dev->setUsed($df_buf[3] * 1024); } else { $dev->setTotal($df_buf[1] * 1024); $dev->setUsed($df_buf[2] * 1024); if ($df_buf[3]>0) { $dev->setFree($df_buf[3] * 1024); } } if (PSI_SHOW_MOUNT_POINT) $dev->setMountPoint($df_buf[5]); $notwas = true; if (isset($mount_parm)) { foreach ($mount_parm as $mount_param) { //name and mountpoint find if (($mount_param['name']===trim($df_buf[0])) && ($mount_param['mountpoint']===$df_buf[5])) { $dev->setFsType($mount_param['fstype']); if (PSI_SHOW_MOUNT_OPTION && (trim($mount_param['options'])!=="")) { if (PSI_SHOW_MOUNT_CREDENTIALS) { $dev->setOptions($mount_param['options']); } else { $mpo=$mount_param['options']; $mpo=preg_replace('/(^guest,)|(^guest$)|(,guest$)/i', '', $mpo); $mpo=preg_replace('/,guest,/i', ',', $mpo); $mpo=preg_replace('/(^user=[^,]*,)|(^user=[^,]*$)|(,user=[^,]*$)/i', '', $mpo); $mpo=preg_replace('/,user=[^,]*,/i', ',', $mpo); $mpo=preg_replace('/(^username=[^,]*,)|(^username=[^,]*$)|(,username=[^,]*$)/i', '', $mpo); $mpo=preg_replace('/,username=[^,]*,/i', ',', $mpo); $mpo=preg_replace('/(^password=[^,]*,)|(^password=[^,]*$)|(,password=[^,]*$)/i', '', $mpo); $mpo=preg_replace('/,password=[^,]*,/i', ',', $mpo); $dev->setOptions($mpo); } } $notwas = false; break; } } if ($notwas) foreach ($mount_parm as $mount_param) { //mountpoint find if ($mount_param['mountpoint']===$df_buf[5]) { $dev->setFsType($mount_param['fstype']); if (PSI_SHOW_MOUNT_OPTION && (trim($mount_param['options'])!=="")) { if (PSI_SHOW_MOUNT_CREDENTIALS) { $dev->setOptions($mount_param['options']); } else { $mpo=$mount_param['options']; $mpo=preg_replace('/(^guest,)|(^guest$)|(,guest$)/i', '', $mpo); $mpo=preg_replace('/,guest,/i', ',', $mpo); $mpo=preg_replace('/(^user=[^,]*,)|(^user=[^,]*$)|(,user=[^,]*$)/i', '', $mpo); $mpo=preg_replace('/,user=[^,]*,/i', ',', $mpo); $mpo=preg_replace('/(^username=[^,]*,)|(^username=[^,]*$)|(,username=[^,]*$)/i', '', $mpo); $mpo=preg_replace('/,username=[^,]*,/i', ',', $mpo); $mpo=preg_replace('/(^password=[^,]*,)|(^password=[^,]*$)|(,password=[^,]*$)/i', '', $mpo); $mpo=preg_replace('/,password=[^,]*,/i', ',', $mpo); $dev->setOptions($mpo); } } $notwas = false; break; } } } if ($notwas) { $dev->setFsType('unknown'); } if ($get_inodes && PSI_SHOW_INODES && isset($df_inodes[trim($df_buf[0])])) { $dev->setPercentInodesUsed($df_inodes[trim($df_buf[0])]); } $arrResult[] = $dev; } } } } else { if (isset($mount_parm)) { foreach ($mount_parm as $mount_param) { if (is_dir($mount_param['mountpoint'])) { $total = disk_total_space($mount_param['mountpoint']); if (($mount_param['fstype'] != 'none') && ($total > 0)) { $dev = new DiskDevice(); $dev->setName($mount_param['name']); $dev->setFsType($mount_param['fstype']); if (PSI_SHOW_MOUNT_POINT) $dev->setMountPoint($mount_param['mountpoint']); $dev->setTotal($total); $free = disk_free_space($mount_param['mountpoint']); if ($free > 0) { $dev->setFree($free); } else { $free = 0; } if ($total > $free) $dev->setUsed($total - $free); if (PSI_SHOW_MOUNT_OPTION) { if (PSI_SHOW_MOUNT_CREDENTIALS) { $dev->setOptions($mount_param['options']); } else { $mpo=$mount_param['options']; $mpo=preg_replace('/(^guest,)|(^guest$)|(,guest$)/i', '', $mpo); $mpo=preg_replace('/,guest,/i', ',', $mpo); $mpo=preg_replace('/(^user=[^,]*,)|(^user=[^,]*$)|(,user=[^,]*$)/i', '', $mpo); $mpo=preg_replace('/,user=[^,]*,/i', ',', $mpo); $mpo=preg_replace('/(^username=[^,]*,)|(^username=[^,]*$)|(,username=[^,]*$)/i', '', $mpo); $mpo=preg_replace('/,username=[^,]*,/i', ',', $mpo); $mpo=preg_replace('/(^password=[^,]*,)|(^password=[^,]*$)|(,password=[^,]*$)/i', '', $mpo); $mpo=preg_replace('/,password=[^,]*,/i', ',', $mpo); $dev->setOptions($mpo); } } $arrResult[] = $dev; } } } } } return $arrResult; } } phpsysinfo-3.4.4/includes/error/000077500000000000000000000000001467431054600166755ustar00rootroot00000000000000phpsysinfo-3.4.4/includes/error/class.PSI_Error.inc.php000066400000000000000000000216571467431054600231010ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.Error.inc.php 569 2012-04-16 06:08:18Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * class for the error handling in phpsysinfo * * @category PHP * @package PSI_Error * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class PSI_Error { /** * holds the instance of this class * * @static * @var PSI_Error */ private static $_instance; /** * holds the error messages * * @var array */ private $_arrErrorList = array(); /** * current number ob errors * * @var integer */ private $_errors = 0; /** * initalize some used vars */ private function __construct() { $this->_errors = 0; $this->_arrErrorList = array(); } /** * Singleton function * * @return PSI_Error instance of the class */ public static function singleton() { if (!isset(self::$_instance)) { $c = __CLASS__; self::$_instance = new $c; } return self::$_instance; } /** * triggers an error when somebody tries to clone the object * * @return void */ public function __clone() { trigger_error("Can't be cloned", E_USER_ERROR); } /** * adds an phpsysinfo error to the internal list * * @param string $strCommand Command, which cause the Error * @param string $strMessage additional Message, to describe the Error * * @return void */ public function addError($strCommand, $strMessage) { $this->_addError($strCommand, $this->_trace($strMessage)); } /** * adds an error to the internal list * * @param string $strCommand Command, which cause the Error * @param string $strMessage message, that describe the Error * * @return void */ private function _addError($strCommand, $strMessage) { $index = count($this->_arrErrorList) + 1; $this->_arrErrorList[$index]['command'] = $strCommand; $this->_arrErrorList[$index]['message'] = $strMessage; $this->_errors++; } /** * add a config error to the internal list * * @param string $strCommand Command, which cause the Error * @param string $strMessage additional Message, to describe the Error * * @return void */ public function addConfigError($strCommand, $strMessage) { $this->_addError($strCommand, "Wrong Value in phpsysinfo.ini for ".$strMessage); } /** * add a php error to the internal list * * @param string $strCommand Command, which cause the Error * @param string $strMessage additional Message, to describe the Error * * @return void */ public function addPhpError($strCommand, $strMessage) { $this->_addError($strCommand, "PHP throws a error\n".$strMessage); } /** * adds a waraning to the internal list * * @param string $strMessage Warning message to display * * @return void */ public function addWarning($strMessage) { $index = count($this->_arrErrorList) + 1; $this->_arrErrorList[$index]['command'] = "WARN"; $this->_arrErrorList[$index]['message'] = $strMessage; } /** * converts the internal error and warning list to a XML file * * @return void */ public function errorsAsXML() { $dom = new DOMDocument('1.0', 'UTF-8'); $root = $dom->createElement("phpsysinfo"); $dom->appendChild($root); $xml = new SimpleXMLExtended(simplexml_import_dom($dom), 'UTF-8'); $generation = $xml->addChild('Generation'); $generation->addAttribute('version', PSI_VERSION_STRING); $generation->addAttribute('timestamp', time()); $xmlerr = $xml->addChild("Errors"); foreach ($this->_arrErrorList as $arrLine) { // $error = $xmlerr->addCData('Error', $arrLine['message']); $error = $xmlerr->addChild('Error'); $error->addAttribute('Message', $arrLine['message']); $error->addAttribute('Function', $arrLine['command']); } header('Cache-Control: no-cache, must-revalidate'); header('Content-Type: text/xml'); echo $xml->getSimpleXmlElement()->asXML(); exit(); } /** * add the errors to an existing xml document * * @param String $encoding encoding * * @return SimpleXmlElement */ public function errorsAddToXML($encoding) { $dom = new DOMDocument('1.0', 'UTF-8'); $root = $dom->createElement("Errors"); $dom->appendChild($root); $xml = simplexml_import_dom($dom); $xmlerr = new SimpleXMLExtended($xml, $encoding); foreach ($this->_arrErrorList as $arrLine) { // $error = $xmlerr->addCData('Error', $arrLine['message']); $error = $xmlerr->addChild('Error'); $error->addAttribute('Message', $arrLine['message']); $error->addAttribute('Function', $arrLine['command']); } return $xmlerr->getSimpleXmlElement(); } /** * check if errors exists * * @return boolean true if are errors logged, false if not */ public function errorsExist() { if ($this->_errors > 0) { return true; } else { return false; } } /** * generate a function backtrace for error diagnostic, function is genearally based on code submitted in the php reference page * * @param string $strMessage additional message to display * * @return string formatted string of the backtrace */ private function _trace($strMessage) { $arrTrace = array_reverse(debug_backtrace()); $strFunc = ''; $strBacktrace = htmlspecialchars($strMessage)."\n\n"; foreach ($arrTrace as $val) { // avoid the last line, which says the error is from the error class if ($val == $arrTrace[count($arrTrace) - 1]) { break; } if (isset($val['file'])) { $strBacktrace .= str_replace(PSI_APP_ROOT, ".", $val['file']).' on line '.$val['line']; } if ($strFunc) { $strBacktrace .= ' in function '.$strFunc; } if ($val['function'] == 'include' || $val['function'] == 'require' || $val['function'] == 'include_once' || $val['function'] == 'require_once') { $strFunc = ''; } else { $strFunc = $val['function'].'('; if (isset($val['args'][0])) { if (($val['function'] == 'executeProgram') && ($val['args'][0] == 'sshpass') && isset($val['args'][1]) && preg_match('/"([^"]+)"$/', $val['args'][1], $tmpout)) { $val['args'][1] = 'ssh: '. $tmpout[1]; } $strFunc .= ' '; $strComma = ''; foreach ($val['args'] as $valArgs) { $strFunc .= $strComma.$this->_printVar($valArgs); $strComma = ', '; } $strFunc .= ' '; } $strFunc .= ')'; } $strBacktrace .= "\n"; } return $strBacktrace; } /** * convert some special vars into better readable output * * @param mixed $var value, which should be formatted * * @return string formatted string */ private function _printVar($var) { if (is_string($var)) { $search = array("\x00", "\x0a", "\x0d", "\x1a", "\x09"); $replace = array('\0', '\n', '\r', '\Z', '\t'); return ('"'.str_replace($search, $replace, $var).'"'); } elseif (is_bool($var)) { if ($var) { return ('true'); } else { return ('false'); } } elseif (is_array($var)) { $strResult = 'array( '; $strComma = ''; foreach ($var as $key=>$val) { $strResult .= $strComma.$this->_printVar($key).' => '.$this->_printVar($val); $strComma = ', '; } $strResult .= ' )'; return ($strResult); } // anything else, just let php try to print it return (var_export($var, true)); } } phpsysinfo-3.4.4/includes/interface/000077500000000000000000000000001467431054600175045ustar00rootroot00000000000000phpsysinfo-3.4.4/includes/interface/class.PSI_Interface_OS.inc.php000066400000000000000000000030731467431054600251100ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.PSI_Interface_OS.inc.php 263 2009-06-22 13:01:52Z bigmichi1 $ * @link http://phpsysinfo.sourceforge.net */ /** * define which methods a os class for phpsysinfo must implement * to be recognized and fully work without errors, these are the methods which * are called from outside to include the information in the main application * * @category PHP * @package PSI_Interfaces * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ interface PSI_Interface_OS { /** * get a special encoding from os where phpsysinfo is running * * @return string */ public function getEncoding(); /** * build the os information * * @return void */ public function build(); /** * get the filled or unfilled (with default values) system object * * @return System */ public function getSys(); /** * get os specific language * * @return string */ public function getLanguage(); } phpsysinfo-3.4.4/includes/interface/class.PSI_Interface_Output.inc.php000066400000000000000000000021031467431054600260600ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.PSI_Interface_Output.inc.php 214 2009-05-25 08:32:40Z bigmichi1 $ * @link http://phpsysinfo.sourceforge.net */ /** * define which methods a output class for phpsysinfo must implement * to be recognized and fully work without errors * * @category PHP * @package PSI_Interfaces * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ interface PSI_Interface_Output { /** * generate the output * * @return void */ public function run(); } phpsysinfo-3.4.4/includes/interface/class.PSI_Interface_Plugin.inc.php000066400000000000000000000025771467431054600260350ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.PSI_Interface_Plugin.inc.php 273 2009-06-24 11:40:09Z bigmichi1 $ * @link http://phpsysinfo.sourceforge.net */ /** * define which methods a plugin class for phpsysinfo must implement * to be recognized and fully work without errors, these are the methods which * are called from outside to include the information in the main application * * @category PHP * @package PSI_Interfaces * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ interface PSI_Interface_Plugin { /** * doing all tasks before the xml can be build * * @return void */ public function execute(); /** * build the xml * * @return SimpleXMLElement entire XML content for the plugin which than can be appended to the main XML */ public function xml(); } phpsysinfo-3.4.4/includes/interface/class.PSI_Interface_Sensor.inc.php000066400000000000000000000025221467431054600260360ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.PSI_Interface_Sensor.inc.php 263 2009-06-22 13:01:52Z bigmichi1 $ * @link http://phpsysinfo.sourceforge.net */ /** * define which methods every sensor class for phpsysinfo must implement * to be recognized and fully work without errors, these are the methods which * are called from outside to include the information in the main application * * @category PHP * @package PSI_Interfaces * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ interface PSI_Interface_Sensor { /** * build the mbinfo information * * @return void */ public function build(); /** * get the filled or unfilled (with default values) MBInfo object * * @return MBInfo */ public function getMBInfo(); } phpsysinfo-3.4.4/includes/interface/class.PSI_Interface_UPS.inc.php000066400000000000000000000023271467431054600252370ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.PSI_Interface_UPS.inc.php 263 2009-06-22 13:01:52Z bigmichi1 $ * @link http://phpsysinfo.sourceforge.net */ /** * define which methods a ups class for phpsysinfo must implement * to be recognized and fully work without errors * * @category PHP * @package PSI_Interfaces * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ interface PSI_Interface_UPS { /** * build the ups information * * @return void */ public function build(); /** * get the filled or unfilled (with default values) UPSInfo object * * @return UPSInfo */ public function getUPSInfo(); } phpsysinfo-3.4.4/includes/js/000077500000000000000000000000001467431054600161605ustar00rootroot00000000000000phpsysinfo-3.4.4/includes/js/README000066400000000000000000000007621467431054600170450ustar00rootroot00000000000000versions, links and simple description of used files =========================================================== class.JavaScriptPacker.inc.php --------- VERSION : 1.1+FF4 URL : http://dean.edwards.name DESC : Downloaded from http://dean.edwards.name/download/ http://joliclic.free.fr/php/javascript-packer/en/ + Firefox 4 fix LICENSE : LGPL 2.1 (http://creativecommons.org/licenses/LGPL/2.1/) USED : define('PSI_JS_COMPRESSION', 'None'); or define('PSI_JS_COMPRESSION', 'Normal'); phpsysinfo-3.4.4/includes/js/class.JavaScriptPacker.inc.php000066400000000000000000000655731467431054600237610ustar00rootroot00000000000000pack(); * * or * * $myPacker = new JavaScriptPacker($script, 'Normal', true, false); * $packed = $myPacker->pack(); * * or (default values) * * $myPacker = new JavaScriptPacker($script); * $packed = $myPacker->pack(); * * * params of the constructor : * $script: the JavaScript to pack, string. * $encoding: level of encoding, int or string : * 0,10,62,95 or 'None', 'Numeric', 'Normal', 'High ASCII'. * default: 62. * $fastDecode: include the fast decoder in the packed result, boolean. * default : true. * $specialChars: if you are flagged your private and local variables * in the script, boolean. * default: false. * * The pack() method return the compressed JavasScript, as a string. * * see http://dean.edwards.name/packer/usage/ for more information. * * Notes : * # need PHP 5 . Tested with PHP 5.1.2, 5.1.3, 5.1.4, 5.2.3 * * # The packed result may be different than with the Dean Edwards * version, but with the same length. The reason is that the PHP * function usort to sort array don't necessarily preserve the * original order of two equal member. The Javascript sort function * in fact preserve this order (but that's not require by the * ECMAScript standard). So the encoded keywords order can be * different in the two results. * * # Be careful with the 'High ASCII' Level encoding if you use * UTF-8 in your files... */ class JavaScriptPacker { // constants const IGNORE = '$1'; // validate parameters private $_script = ''; private $_encoding = 62; private $_fastDecode = true; private $_specialChars = false; private $LITERAL_ENCODING = array( 'None' => 0, 'Numeric' => 10, 'Normal' => 62, 'High ASCII' => 95 ); public function __construct($_script, $_encoding = 62, $_fastDecode = true, $_specialChars = false) { $this->_script = $_script . "\n"; if (array_key_exists($_encoding, $this->LITERAL_ENCODING)) $_encoding = $this->LITERAL_ENCODING[$_encoding]; $this->_encoding = min((int) $_encoding, 95); $this->_fastDecode = $_fastDecode; $this->_specialChars = $_specialChars; } public function pack() { $this->_addParser('_basicCompression'); if ($this->_specialChars) $this->_addParser('_encodeSpecialChars'); if ($this->_encoding) $this->_addParser('_encodeKeywords'); // go! return $this->_pack($this->_script); } // apply all parsing routines private function _pack($script) { for ($i = 0; isset($this->_parsers[$i]); $i++) { $script = call_user_func(array(&$this, $this->_parsers[$i]), $script); } return $script; } // keep a list of parsing functions, they'll be executed all at once private $_parsers = array(); private function _addParser($parser) { $this->_parsers[] = $parser; } // zero encoding - just removal of white space and comments private function _basicCompression($script) { $parser = new ParseMaster(); // make safe $parser->escapeChar = '\\'; // protect strings $parser->add('/\'[^\'\\n\\r]*\'/', self::IGNORE); $parser->add('/"[^"\\n\\r]*"/', self::IGNORE); // remove comments $parser->add('/\\/\\/[^\\n\\r]*[\\n\\r]/', ' '); $parser->add('/\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\//', ' '); // protect regular expressions $parser->add('/\\s+(\\/[^\\/\\n\\r\\*][^\\/\\n\\r]*\\/g?i?)/', '$2'); // IGNORE $parser->add('/[^\\w\\x24\\/\'"*)\\?:]\\/[^\\/\\n\\r\\*][^\\/\\n\\r]*\\/g?i?/', self::IGNORE); // remove: ;;; doSomething(); if ($this->_specialChars) $parser->add('/;;;[^\\n\\r]+[\\n\\r]/'); // remove redundant semi-colons $parser->add('/\\(;;\\)/', self::IGNORE); // protect for (;;) loops $parser->add('/;+\\s*([};])/', '$2'); // apply the above $script = $parser->exec($script); // remove white-space $parser->add('/(\\b|\\x24)\\s+(\\b|\\x24)/', '$2 $3'); $parser->add('/([+\\-])\\s+([+\\-])/', '$2 $3'); $parser->add('/\\s+/', ''); // done return $parser->exec($script); } private function _encodeSpecialChars($script) { $parser = new ParseMaster(); // replace: $name -> n, $$name -> na $parser->add( '/((\\x24+)([a-zA-Z$_]+))(\\d*)/', array('fn' => '_replace_name') ); // replace: _name -> _0, double-underscore (__name) is ignored $regexp = '/\\b_[A-Za-z\\d]\\w*/'; // build the word list $keywords = $this->_analyze($script, $regexp, '_encodePrivate'); // quick ref $encoded = $keywords['encoded']; $parser->add( $regexp, array( 'fn' => '_replace_encoded', 'data' => $encoded ) ); return $parser->exec($script); } private function _encodeKeywords($script) { // escape high-ascii values already in the script (i.e. in strings) if ($this->_encoding > 62) $script = $this->_escape95($script); // create the parser $parser = new ParseMaster(); $encode = $this->_getEncoder($this->_encoding); // for high-ascii, don't encode single character low-ascii $regexp = ($this->_encoding > 62) ? '/\\w\\w+/' : '/\\w+/'; // build the word list $keywords = $this->_analyze($script, $regexp, $encode); $encoded = $keywords['encoded']; // encode $parser->add( $regexp, array( 'fn' => '_replace_encoded', 'data' => $encoded ) ); if (empty($script)) return $script; else { //$res = $parser->exec($script); //$res = $this->_bootStrap($res, $keywords); //return $res; return $this->_bootStrap($parser->exec($script), $keywords); } } private function _analyze($script, $regexp, $encode) { // analyse // retreive all words in the script $all = array(); preg_match_all($regexp, $script, $all); $_sorted = array(); // list of words sorted by frequency $_encoded = array(); // dictionary of word->encoding $_protected = array(); // instances of "protected" words $all = $all[0]; // simulate the javascript comportement of global match if (!empty($all)) { $unsorted = array(); // same list, not sorted $protected = array(); // "protected" words (dictionary of word->"word") $value = array(); // dictionary of charCode->encoding (eg. 256->ff) $this->_count = array(); // word->count $i = count($all); $j = 0; //$word = null; // count the occurrences - used for sorting later do { --$i; $word = '$' . $all[$i]; if (!isset($this->_count[$word])) { $this->_count[$word] = 0; $unsorted[$j] = $word; // make a dictionary of all of the protected words in this script // these are words that might be mistaken for encoding //if (is_string($encode) && method_exists($this, $encode)) $values[$j] = call_user_func(array(&$this, $encode), $j); $protected['$' . $values[$j]] = $j++; } // increment the word counter $this->_count[$word]++; } while ($i > 0); // prepare to sort the word list, first we must protect // words that are also used as codes. we assign them a code // equivalent to the word itself. // e.g. if "do" falls within our encoding range // then we store keywords["do"] = "do"; // this avoids problems when decoding $i = count($unsorted); do { $word = $unsorted[--$i]; if (isset($protected[$word]) /*!= null*/) { $_sorted[$protected[$word]] = substr($word, 1); $_protected[$protected[$word]] = true; $this->_count[$word] = 0; } } while ($i); // sort the words by frequency // Note: the javascript and php version of sort can be different : // in php manual, usort : // " If two members compare as equal, // their order in the sorted array is undefined." // so the final packed script is different of the Dean's javascript version // but equivalent. // the ECMAscript standard does not guarantee this behaviour, // and thus not all browsers (e.g. Mozilla versions dating back to at // least 2003) respect this. usort($unsorted, array(&$this, '_sortWords')); $j = 0; // because there are "protected" words in the list // we must add the sorted words around them do { if (!isset($_sorted[$i])) $_sorted[$i] = substr($unsorted[$j++], 1); $_encoded[$_sorted[$i]] = $values[$i]; } while (++$i < count($unsorted)); } return array( 'sorted' => $_sorted, 'encoded' => $_encoded, 'protected' => $_protected); } private $_count = array(); private function _sortWords($match1, $match2) { return $this->_count[$match2] - $this->_count[$match1]; } // build the boot function used for loading and decoding private function _bootStrap($packed, $keywords) { $ENCODE = $this->_safeRegExp('$encode\\($count\\)'); // $packed: the packed script $packed = "'" . $this->_escape($packed) . "'"; // $ascii: base for encoding $ascii = min(count($keywords['sorted']), $this->_encoding); if ($ascii == 0) $ascii = 1; // $count: number of words contained in the script $count = count($keywords['sorted']); // $keywords: list of words contained in the script foreach ($keywords['protected'] as $i=>$value) { $keywords['sorted'][$i] = ''; } // convert from a string to an array ksort($keywords['sorted']); $keywords = "'" . implode('|', $keywords['sorted']) . "'.split('|')"; $encode = ($this->_encoding > 62) ? '_encode95' : $this->_getEncoder($ascii); $encode = $this->_getJSFunction($encode); $encode = preg_replace('/_encoding/', '$ascii', $encode); $encode = preg_replace('/arguments\\.callee/', '$encode', $encode); $inline = '\\$count' . ($ascii > 10 ? '.toString(\\$ascii)' : ''); // $decode: code snippet to speed up decoding if ($this->_fastDecode) { // create the decoder $decode = $this->_getJSFunction('_decodeBody'); if ($this->_encoding > 62) $decode = preg_replace('/\\\\w/', '[\\xa1-\\xff]', $decode); // perform the encoding inline for lower ascii values elseif ($ascii < 36) $decode = preg_replace($ENCODE, $inline, $decode); // special case: when $count==0 there are no keywords. I want to keep // the basic shape of the unpacking funcion so i'll frig the code... if ($count == 0) $decode = preg_replace($this->_safeRegExp('($count)\\s*=\\s*1'), '$1=0', $decode, 1); } // boot function $unpack = $this->_getJSFunction('_unpack'); if ($this->_fastDecode) { // insert the decoder $this->buffer = $decode; $unpack = preg_replace_callback('/\\{/', array(&$this, '_insertFastDecode'), $unpack, 1); } $unpack = preg_replace('/"/', "'", $unpack); if ($this->_encoding > 62) { // high-ascii // get rid of the word-boundaries for regexp matches $unpack = preg_replace('/\'\\\\\\\\b\'\s*\\+|\\+\s*\'\\\\\\\\b\'/', '', $unpack); } if ($ascii > 36 || $this->_encoding > 62 || $this->_fastDecode) { // insert the encode function $this->buffer = $encode; $unpack = preg_replace_callback('/\\{/', array(&$this, '_insertFastEncode'), $unpack, 1); } else { // perform the encoding inline $unpack = preg_replace($ENCODE, $inline, $unpack); } // pack the boot function too $unpackPacker = new JavaScriptPacker($unpack, 0, false, true); $unpack = $unpackPacker->pack(); // arguments $params = array($packed, $ascii, $count, $keywords); if ($this->_fastDecode) { $params[] = 0; $params[] = '{}'; } $params = implode(',', $params); // the whole thing //Firefox 4 fix, old: return 'eval(' . $unpack . '(' . $params . "))\n"; return "(typeof setTimeout=='function'?setTimeout:eval)(" . $unpack . "(" . $params . "));\n"; } private $buffer; private function _insertFastDecode($match) { return '{' . $this->buffer . ';'; } private function _insertFastEncode($match) { return '{$encode=' . $this->buffer . ';'; } // mmm.. ..which one do i need ?? private function _getEncoder($ascii) { return $ascii > 10 ? $ascii > 36 ? $ascii > 62 ? '_encode95' : '_encode62' : '_encode36' : '_encode10'; } // zero encoding // characters: 0123456789 private function _encode10($charCode) { return $charCode; } // inherent base36 support // characters: 0123456789abcdefghijklmnopqrstuvwxyz private function _encode36($charCode) { return base_convert($charCode, 10, 36); } // hitch a ride on base36 and add the upper case alpha characters // characters: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ private function _encode62($charCode) { $res = ''; if ($charCode >= $this->_encoding) { $res = $this->_encode62((int) ($charCode / $this->_encoding)); } $charCode = $charCode % $this->_encoding; if ($charCode > 35) return $res . chr($charCode + 29); else return $res . base_convert($charCode, 10, 36); } // use high-ascii values // characters: ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ private function _encode95($charCode) { $res = ''; if ($charCode >= $this->_encoding) $res = $this->_encode95($charCode / $this->_encoding); return $res . chr(($charCode % $this->_encoding) + 161); } private function _safeRegExp($string) { return '/'.preg_replace('/\$/', '\\\$', $string).'/'; } private function _encodePrivate($charCode) { return "_" . $charCode; } // protect characters used by the parser private function _escape($script) { return preg_replace('/([\\\\\'])/', '\\\$1', $script); } // protect high-ascii characters already in the script private function _escape95($script) { return preg_replace_callback( '/[\\xa1-\\xff]/', array(&$this, '_escape95Bis'), $script ); } private function _escape95Bis($match) { return '\x'.((string) dechex(ord($match))); } private function _getJSFunction($aName) { if (defined('self::JSFUNCTION'.$aName)) return constant('self::JSFUNCTION'.$aName); else return ''; } // JavaScript Functions used. // Note : In Dean's version, these functions are converted // with 'String(aFunctionName);'. // This internal conversion complete the original code, ex : // 'while (aBool) anAction();' is converted to // 'while (aBool) { anAction(); }'. // The JavaScript functions below are corrected. // unpacking function - this is the boot strap function // data extracted from this packing routine is passed to // this function when decoded in the target // NOTE ! : without the ';' final. const JSFUNCTION_unpack = 'function ($packed, $ascii, $count, $keywords, $encode, $decode) { while ($count--) { if ($keywords[$count]) { $packed = $packed.replace(new RegExp(\'\\\\b\' + $encode($count) + \'\\\\b\', \'g\'), $keywords[$count]); } } return $packed; }'; /* 'function ($packed, $ascii, $count, $keywords, $encode, $decode) { while ($count--) if ($keywords[$count]) $packed = $packed.replace(new RegExp(\'\\\\b\' + $encode($count) + \'\\\\b\', \'g\'), $keywords[$count]); return $packed; }'; */ // code-snippet inserted into the unpacker to speed up decoding const JSFUNCTION_decodeBody = //_decode = function () { // does the browser support String.replace where the // replacement value is a function? ' if (!\'\'.replace(/^/, String)) { // decode all the values we need while ($count--) { $decode[$encode($count)] = $keywords[$count] || $encode($count); } // global replacement function $keywords = [function ($encoded) {return $decode[$encoded]}]; // generic match $encode = function () {return \'\\\\w+\'}; // reset the loop counter - we are now doing a global replace $count = 1; } '; //}; /* ' if (!\'\'.replace(/^/, String)) { // decode all the values we need while ($count--) $decode[$encode($count)] = $keywords[$count] || $encode($count); // global replacement function $keywords = [function ($encoded) {return $decode[$encoded]}]; // generic match $encode = function () {return\'\\\\w+\'}; // reset the loop counter - we are now doing a global replace $count = 1; }'; */ // zero encoding // characters: 0123456789 const JSFUNCTION_encode10 = 'function ($charCode) { return $charCode; }';//;'; // inherent base36 support // characters: 0123456789abcdefghijklmnopqrstuvwxyz const JSFUNCTION_encode36 = 'function ($charCode) { return $charCode.toString(36); }';//;'; // hitch a ride on base36 and add the upper case alpha characters // characters: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ const JSFUNCTION_encode62 = 'function ($charCode) { return ($charCode < _encoding ? \'\' : arguments.callee(parseInt($charCode / _encoding))) + (($charCode = $charCode % _encoding) > 35 ? String.fromCharCode($charCode + 29) : $charCode.toString(36)); }'; // use high-ascii values // characters: ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ const JSFUNCTION_encode95 = 'function ($charCode) { return ($charCode < _encoding ? \'\' : arguments.callee($charCode / _encoding)) + String.fromCharCode($charCode % _encoding + 161); }'; } class ParseMaster { public $ignoreCase = false; public $escapeChar = ''; // constants const EXPRESSION = 0; const REPLACEMENT = 1; const LENGTH = 2; // used to determine nesting levels private $GROUPS = '/\\(/';//g private $SUB_REPLACE = '/\\$\\d/'; private $INDEXED = '/^\\$\\d+$/'; private $TRIM = '/([\'"])\\1\\.(.*)\\.\\1\\1$/'; private $ESCAPE = '/\\\./';//g private $QUOTE = '/\'/'; private $DELETED = '/\\x01[^\\x01]*\\x01/';//g public function add($expression, $replacement = '') { // count the number of sub-expressions // - add one because each pattern is itself a sub-expression $length = 1 + preg_match_all($this->GROUPS, $this->_internalEscape((string) $expression), $out); // treat only strings $replacement if (is_string($replacement)) { // does the pattern deal with sub-expressions? if (preg_match($this->SUB_REPLACE, $replacement)) { // a simple lookup? (e.g. "$2") if (preg_match($this->INDEXED, $replacement)) { // store the index (used for fast retrieval of matched strings) $replacement = (int) (substr($replacement, 1)) - 1; } else { // a complicated lookup (e.g. "Hello $2 $1") // build a function to do the lookup $quote = preg_match($this->QUOTE, $this->_internalEscape($replacement)) ? '"' : "'"; $replacement = array( 'fn' => '_backReferences', 'data' => array( 'replacement' => $replacement, 'length' => $length, 'quote' => $quote ) ); } } } // pass the modified arguments if (!empty($expression)) $this->_add($expression, $replacement, $length); else $this->_add('/^$/', $replacement, $length); } public function exec($string) { // execute the global replacement $this->_escaped = array(); // simulate the _patterns.toSTring of Dean $regexp = '/'; foreach ($this->_patterns as $reg) { $regexp .= '(' . substr($reg[self::EXPRESSION], 1, -1) . ')|'; } $regexp = substr($regexp, 0, -1) . '/'; $regexp .= ($this->ignoreCase) ? 'i' : ''; $string = $this->_escape($string, $this->escapeChar); $string = preg_replace_callback( $regexp, array( &$this, '_replacement' ), $string ); $string = $this->_unescape($string, $this->escapeChar); return preg_replace($this->DELETED, '', $string); } public function reset() { // clear the patterns collection so that this object may be re-used $this->_patterns = array(); } // private private $_escaped = array(); // escaped characters private $_patterns = array(); // patterns stored by index // create and add a new pattern to the patterns collection private function _add() { $arguments = func_get_args(); $this->_patterns[] = $arguments; } // this is the global replace function (it's quite complicated) private function _replacement($arguments) { if (empty($arguments)) return ''; $i = 1; $j = 0; // loop through the patterns while (isset($this->_patterns[$j])) { $pattern = $this->_patterns[$j++]; // do we have a result? if (isset($arguments[$i]) && ($arguments[$i] != '')) { $replacement = $pattern[self::REPLACEMENT]; if (is_array($replacement) && isset($replacement['fn'])) { if (isset($replacement['data'])) $this->buffer = $replacement['data']; return call_user_func(array(&$this, $replacement['fn']), $arguments, $i); } elseif (is_int($replacement)) { return $arguments[$replacement + $i]; } $delete = ($this->escapeChar == '' || strpos($arguments[$i], $this->escapeChar) === false) ? '' : "\x01" . $arguments[$i] . "\x01"; return $delete . $replacement; // skip over references to sub-expressions } else { $i += $pattern[self::LENGTH]; } } } private function _backReferences($match, $offset) { $replacement = $this->buffer['replacement']; $quote = $this->buffer['quote']; $i = $this->buffer['length']; while ($i) { $replacement = str_replace('$'.$i--, $match[$offset + $i], $replacement); } return $replacement; } private function _replace_name($match, $offset) { $length = strlen($match[$offset + 2]); $start = $length - max($length - strlen($match[$offset + 3]), 0); return substr($match[$offset + 1], $start, $length) . $match[$offset + 4]; } private function _replace_encoded($match, $offset) { return $this->buffer[$match[$offset]]; } // php : we cannot pass additional data to preg_replace_callback, // and we cannot use &$this in create_function, so let's go to lower level private $buffer; // encode escaped characters private function _escape($string, $escapeChar) { if ($escapeChar) { $this->buffer = $escapeChar; return preg_replace_callback( '/\\' . $escapeChar . '(.)' .'/', array(&$this, '_escapeBis'), $string ); } else { return $string; } } private function _escapeBis($match) { $this->_escaped[] = $match[1]; return $this->buffer; } // decode escaped characters private function _unescape($string, $escapeChar) { if ($escapeChar) { $regexp = '/'.'\\'.$escapeChar.'/'; $this->buffer = array('escapeChar'=> $escapeChar, 'i' => 0); return preg_replace_callback( $regexp, array(&$this, '_unescapeBis'), $string ); } else { return $string; } } private function _unescapeBis() { if (isset($this->_escaped[$this->buffer['i']]) && $this->_escaped[$this->buffer['i']] != '') { $temp = $this->_escaped[$this->buffer['i']]; } else { $temp = ''; } $this->buffer['i']++; return $this->buffer['escapeChar'] . $temp; } private function _internalEscape($string) { return preg_replace($this->ESCAPE, '', $string); } } phpsysinfo-3.4.4/includes/mb/000077500000000000000000000000001467431054600161425ustar00rootroot00000000000000phpsysinfo-3.4.4/includes/mb/class.cpumem.inc.php000066400000000000000000000105301467431054600220140ustar00rootroot00000000000000 * @author William Johansson * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class CpuMem extends Hwmon { /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { if ((PSI_OS == 'Linux') && !defined('PSI_EMU_HOSTNAME')) { $hwpaths = CommonFunctions::findglob("/sys/devices/platform/coretemp.*/", GLOB_NOSORT); if (is_array($hwpaths) && (count($hwpaths) > 0)) { $hwpaths2 = CommonFunctions::findglob("/sys/devices/platform/coretemp.*/hwmon/hwmon*/", GLOB_NOSORT); if (is_array($hwpaths2) && (count($hwpaths2) > 0)) { $hwpaths = array_merge($hwpaths, $hwpaths2); } $totalh = count($hwpaths); for ($h = 0; $h < $totalh; $h++) { $this->_temperature($hwpaths[$h]); } } } elseif (PSI_OS == 'FreeBSD') { $smp = 1; CommonFunctions::executeProgram('sysctl', '-n kern.smp.cpus', $smp); for ($i = 0; $i < $smp; $i++) { $temp = 0; if (CommonFunctions::executeProgram('sysctl', '-n dev.cpu.'.$i.'.temperature', $temp)) { $temp = preg_replace('/,/', '.', preg_replace('/C/', '', $temp)); $dev = new SensorDevice(); $dev->setName("CPU ".($i + 1)); $dev->setValue($temp); // $dev->setMax(70); $this->mbinfo->setMbTemp($dev); } } } elseif ((PSI_OS == 'WINNT') || defined('PSI_EMU_HOSTNAME')) { $allCpus = WINNT::_get_Win32_Processor(); foreach ($allCpus as $oneCpu) if (isset($oneCpu['CurrentVoltage']) && ($oneCpu['CurrentVoltage'] > 0)) { $dev = new SensorDevice(); $dev->setName($oneCpu['DeviceID']); $dev->setValue($oneCpu['CurrentVoltage']/10); $this->mbinfo->setMbVolt($dev); } $allMems = WINNT::_get_Win32_PhysicalMemory(); $counter = 0; foreach ($allMems as $oneMem) if (isset($oneMem['ConfiguredVoltage']) && ($oneMem['ConfiguredVoltage'] > 0)) { $dev = new SensorDevice(); $dev->setName('Mem'.($counter++)); $dev->setValue($oneMem['ConfiguredVoltage']/1000); if (isset($oneMem['MaxVoltage']) && ($oneMem['MaxVoltage'] > 0)) { $dev->setMax($oneMem['MaxVoltage']/1000); } if (isset($oneMem['MinVoltage']) && ($oneMem['MinVoltage'] > 0)) { $dev->setMin($oneMem['MinVoltage']/1000); } $this->mbinfo->setMbVolt($dev); } } if ((PSI_OS != 'WINNT') && (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT'))) { $dmimd = CommonFunctions::readdmimemdata(); $counter = 0; foreach ($dmimd as $mem) { if (isset($mem['Size']) && preg_match('/^(\d+)\s(M|G)B$/', $mem['Size'], $size) && ($size[1] > 0) && isset($mem['Configured Voltage']) && preg_match('/^([\d\.]+)\sV$/', $mem['Configured Voltage'], $voltage) && ($voltage[1] > 0)) { $dev = new SensorDevice(); $dev->setName('Mem'.($counter++)); $dev->setValue($voltage[1]); if (isset($mem['Minimum Voltage']) && preg_match('/^([\d\.]+)\sV$/', $mem['Minimum Voltage'], $minv) && ($minv[1] > 0)) { $dev->setMin($minv[1]); } if (isset($mem['Maximum Voltage']) && preg_match('/^([\d\.]+)\sV$/', $mem['Maximum Voltage'], $maxv) && ($maxv[1] > 0)) { $dev->setMax($maxv[1]); } $this->mbinfo->setMbVolt($dev); } } } } } phpsysinfo-3.4.4/includes/mb/class.fortisensor.inc.php000066400000000000000000000071551467431054600231140ustar00rootroot00000000000000 * @copyright 2022 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class FortiSensor extends Sensors { /** * content to parse * * @var array */ private $_lines = array(); /** * fill the private array */ public function __construct() { parent::__construct(); $lines = ""; if (defined('PSI_EMU_PORT') && CommonFunctions::executeProgram('execute', 'sensor list', $resulte, false) && ($resulte !== "") && preg_match('/^(.*[\$#]\s*)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { $resulti = substr($resulte, strlen($resulto[1][0])); if (preg_match('/(\n.*[\$#])$/', $resulti, $resulto, PREG_OFFSET_CAPTURE)) { $lines = substr($resulti, 0, $resulto[1][1]); } } $this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); } /** * get temperature information * * @return void */ private function _temperature() { foreach ($this->_lines as $line) { if (preg_match('/^\s*\d+\s(.+)\sTemperature\s+([\d\.]+)\s\S*C\s*$/', $line, $data)) { $dev = new SensorDevice(); $dev->setName($data[1]); $dev->setValue($data[2]); $this->mbinfo->setMbTemp($dev); } elseif (preg_match('/^\s*\d+\s(.+)\s+alarm=(\d)\s+value=(\d+)\s/', $line, $data) && !preg_match('/fan| vin/i', $data[1])) { $dev = new SensorDevice(); $dev->setName(trim($data[1])); $dev->setValue($data[3]); if ($data[2] != 0) { $dev->setEvent("Alarm"); } $this->mbinfo->setMbTemp($dev); } } } /** * get voltage information * * @return void */ private function _voltage() { foreach ($this->_lines as $line) { if (preg_match('/^\s*\d+\s(.+)\s+alarm=(\d)\s+value=([\d\.]+)\s/', $line, $data) && preg_match('/\./', $data[3]) && !preg_match('/fan|temp/i', $data[1])) { $dev = new SensorDevice(); $dev->setName(trim($data[1])); $dev->setValue($data[3]); if ($data[2] != 0) { $dev->setEvent("Alarm"); } $this->mbinfo->setMbVolt($dev); } } } /** * get fan information * * @return void */ private function _fans() { foreach ($this->_lines as $line) { if (preg_match('/^\s*\d+\s(.+)\s+alarm=(\d)\s+value=(\d+)\s/', $line, $data) && preg_match('/fan/i', $data[1])) { $dev = new SensorDevice(); $dev->setName(trim($data[1])); $dev->setValue($data[3]); if ($data[2] != 0) { $dev->setEvent("Alarm"); } $this->mbinfo->setMbFan($dev); } } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $this->_temperature(); $this->_voltage(); $this->_fans(); } } phpsysinfo-3.4.4/includes/mb/class.freeipmi.inc.php000066400000000000000000000135571467431054600223420ustar00rootroot00000000000000 * @copyright 2014 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class FreeIPMI extends Sensors { /** * content to parse * * @var array */ private $_lines = array(); /** * fill the private content var through command or data access */ public function __construct() { parent::__construct(); if ((PSI_OS != 'WINNT') && (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT'))) switch (defined('PSI_SENSOR_FREEIPMI_ACCESS')?strtolower(PSI_SENSOR_FREEIPMI_ACCESS):'command') { case 'command': CommonFunctions::executeProgram('ipmi-sensors', '--output-sensor-thresholds', $lines); $this->_lines = preg_split("/\r?\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); break; case 'data': if (!defined('PSI_EMU_PORT') && CommonFunctions::rftsdata('freeipmi.tmp', $lines)) { $this->_lines = preg_split("/\r?\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); } break; default: $this->error->addConfigError('__construct()', '[sensor_freeipmi] ACCESS'); } } /** * get temperature information * * @return void */ private function _temperature() { foreach ($this->_lines as $line) { $buffer = preg_split("/\s*\|\s*/", $line); if ($buffer[2] == "Temperature" && $buffer[11] != "N/A" && $buffer[4] == "C") { $dev = new SensorDevice(); $dev->setName($buffer[1]); $dev->setValue($buffer[3]); if ($buffer[9] != "N/A") $dev->setMax($buffer[9]); if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'")); $this->mbinfo->setMbTemp($dev); } } } /** * get voltage information * * @return void */ private function _voltage() { foreach ($this->_lines as $line) { $buffer = preg_split("/\s*\|\s*/", $line); if ($buffer[2] == "Voltage" && $buffer[11] != "N/A" && $buffer[4] == "V") { $dev = new SensorDevice(); $dev->setName($buffer[1]); $dev->setValue($buffer[3]); if ($buffer[6] != "N/A") $dev->setMin($buffer[6]); if ($buffer[9] != "N/A") $dev->setMax($buffer[9]); if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'")); $this->mbinfo->setMbVolt($dev); } } } /** * get fan information * * @return void */ private function _fans() { foreach ($this->_lines as $line) { $buffer = preg_split("/\s*\|\s*/", $line); if ($buffer[2] == "Fan" && $buffer[11] != "N/A" && $buffer[4] == "RPM") { $dev = new SensorDevice(); $dev->setName($buffer[1]); $dev->setValue($buffer[3]); if ($buffer[6] != "N/A") { $dev->setMin($buffer[6]); } elseif (($buffer[9] != "N/A") && ($buffer[9]<$buffer[3])) { //max instead min issue $dev->setMin($buffer[9]); } if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'")); $this->mbinfo->setMbFan($dev); } } } /** * get power information * * @return void */ private function _power() { foreach ($this->_lines as $line) { $buffer = preg_split("/\s*\|\s*/", $line); if ($buffer[2] == "Current" && $buffer[11] != "N/A" && $buffer[4] == "W") { $dev = new SensorDevice(); $dev->setName($buffer[1]); $dev->setValue($buffer[3]); if ($buffer[9] != "N/A") $dev->setMax($buffer[9]); if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'")); $this->mbinfo->setMbPower($dev); } } } /** * get current information * * @return void */ private function _current() { foreach ($this->_lines as $line) { $buffer = preg_split("/\s*\|\s*/", $line); if ($buffer[2] == "Current" && $buffer[11] != "N/A" && $buffer[4] == "A") { $dev = new SensorDevice(); $dev->setName($buffer[1]); $dev->setValue($buffer[3]); if ($buffer[6] != "N/A") $dev->setMin($buffer[6]); if ($buffer[9] != "N/A") $dev->setMax($buffer[9]); if ($buffer[11] != "'OK'") $dev->setEvent(trim($buffer[11], "'")); $this->mbinfo->setMbCurrent($dev); } } } /** * get other information * * @return void */ private function _other() { foreach ($this->_lines as $line) { $buffer = preg_split("/\s*\|\s*/", $line); if ($buffer[4] == "N/A" && $buffer[2] != "OEM Reserved" && $buffer[11] != "N/A") { $dev = new SensorDevice(); $dev->setName($buffer[1].' ('.$buffer[2].')'); $dev->setValue(trim($buffer[11], '\'')); $this->mbinfo->setMbOther($dev); } } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $this->_temperature(); $this->_voltage(); $this->_fans(); $this->_power(); $this->_current(); $this->_other(); } } phpsysinfo-3.4.4/includes/mb/class.hddtemp.inc.php000066400000000000000000000117211467431054600221560ustar00rootroot00000000000000 * @author T.A. van Roermund * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class HDDTemp extends Sensors { /** * get the temperature information from hddtemp * access is available through tcp or command * * @return void */ private function _temperature() { $ar_buf = array(); if ((PSI_OS == 'Linux') && (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT'))) switch (defined('PSI_SENSOR_HDDTEMP_ACCESS')?strtolower(PSI_SENSOR_HDDTEMP_ACCESS):'command') { case 'tcp': $lines = ''; // Timo van Roermund: connect to the hddtemp daemon, use a 5 second timeout. $fp = @fsockopen(defined('PSI_EMU_HOSTNAME')?PSI_EMU_HOSTNAME:'localhost', 7634, $errno, $errstr, 5); // if connected, read the output of the hddtemp daemon if ($fp) { while (!feof($fp)) { $lines .= fread($fp, 1024); } fclose($fp); } else { $this->error->addError("HDDTemp error", $errno.", ".$errstr); } $lines = str_replace("||", "|\n|", $lines); $ar_buf = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); break; case 'command': $strDrives = ""; $strContent = ""; $hddtemp_value = ""; if (CommonFunctions::rfts("/proc/diskstats", $strContent, 0, 4096, false)) { $arrContent = preg_split("/\n/", $strContent, -1, PREG_SPLIT_NO_EMPTY); foreach ($arrContent as $strLine) { preg_match("/^\s(.*)\s([a-z]*)\s(.*)/", $strLine, $arrSplit); if (! empty($arrSplit[2])) { $strDrive = '/dev/'.$arrSplit[2]; if (file_exists($strDrive)) { $strDrives = $strDrives.$strDrive.' '; } } } } else { if (CommonFunctions::rfts("/proc/partitions", $strContent, 0, 4096, false)) { $arrContent = preg_split("/\n/", $strContent, -1, PREG_SPLIT_NO_EMPTY); foreach ($arrContent as $strLine) { if (!preg_match("/^\s(.*)\s([\/a-z0-9]*(\/disc))\s(.*)/", $strLine, $arrSplit)) { preg_match("/^\s(.*)\s([a-z]*)\s(.*)/", $strLine, $arrSplit); } if (! empty($arrSplit[2])) { $strDrive = '/dev/'.$arrSplit[2]; if (file_exists($strDrive)) { $strDrives = $strDrives.$strDrive.' '; } } } } } if (trim($strDrives) == "") { break; } if (CommonFunctions::executeProgram("hddtemp", $strDrives, $hddtemp_value, PSI_DEBUG)) { $hddtemp_value = preg_split("/\n/", $hddtemp_value, -1, PREG_SPLIT_NO_EMPTY); foreach ($hddtemp_value as $line) { $temp = preg_split("/:\s/", $line, 3); if (count($temp) == 3 && preg_match("/^[0-9]/", $temp[2])) { preg_match("/^([0-9]*)(.*)/", $temp[2], $ar_temp); $temp[2] = trim($ar_temp[1]); $temp[3] = trim($ar_temp[2]); array_push($ar_buf, "|".implode("|", $temp)."|"); } } } break; default: $this->error->addConfigError("temperature()", "[sensor_hddtemp] ACCESS"); } // Timo van Roermund: parse the info from the hddtemp daemon. foreach ($ar_buf as $line) { $data = array(); if (preg_match("/\|(.*)\|(.*)\|(.*)\|(.*)\|/", $line, $data)) { if (trim($data[3]) != "ERR") { // get the info we need $dev = new SensorDevice(); $dev->setName($data[1] . ' (' . (strpos($data[2], " ")?substr($data[2], 0, strpos($data[2], " ")):$data[2]) . ')'); if (is_numeric($data[3])) { $dev->setValue($data[3]); } // $dev->setMax(60); $this->mbinfo->setMbTemp($dev); } } } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $this->_temperature(); } } phpsysinfo-3.4.4/includes/mb/class.healthd.inc.php000066400000000000000000000113661467431054600221470ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Healthd extends Sensors { /** * content to parse * * @var array */ private $_values = array(); /** * fill the private content var through command or data access */ public function __construct() { parent::__construct(); if (PSI_OS == 'FreeBSD') switch (defined('PSI_SENSOR_HEALTHD_ACCESS')?strtolower(PSI_SENSOR_HEALTHD_ACCESS):'command') { case 'command': if (CommonFunctions::executeProgram('healthdc', '-t', $lines)) { $lines0 = preg_split("/\n/", $lines, 1, PREG_SPLIT_NO_EMPTY); if (count($lines0) == 1) { $this->_values = preg_split("/\t+/", $lines0[0]); } } break; case 'data': if (!defined('PSI_EMU_PORT') && CommonFunctions::rftsdata('healthd.tmp', $lines)) { $lines0 = preg_split("/\n/", $lines, 1, PREG_SPLIT_NO_EMPTY); if (count($lines0) == 1) { $this->_values = preg_split("/\t+/", $lines0[0]); } } break; default: $this->error->addConfigError('__construct()', '[sensor_healthd] ACCESS'); } } /** * get temperature information * * @return void */ private function _temperature() { if (count($this->_values) == 14) { $dev1 = new SensorDevice(); $dev1->setName('temp1'); $dev1->setValue($this->_values[1]); // $dev1->setMax(70); $this->mbinfo->setMbTemp($dev1); $dev2 = new SensorDevice(); $dev2->setName('temp1'); $dev2->setValue($this->_values[2]); // $dev2->setMax(70); $this->mbinfo->setMbTemp($dev2); $dev3 = new SensorDevice(); $dev3->setName('temp1'); $dev3->setValue($this->_values[3]); // $dev3->setMax(70); $this->mbinfo->setMbTemp($dev3); } } /** * get fan information * * @return void */ private function _fans() { if (count($this->_values) == 14) { $dev1 = new SensorDevice(); $dev1->setName('fan1'); $dev1->setValue($this->_values[4]); // $dev1->setMin(3000); $this->mbinfo->setMbFan($dev1); $dev2 = new SensorDevice(); $dev2->setName('fan2'); $dev2->setValue($this->_values[5]); // $dev2->setMin(3000); $this->mbinfo->setMbFan($dev2); $dev3 = new SensorDevice(); $dev3->setName('fan3'); $dev3->setValue($this->_values[6]); // $dev3->setMin(3000); $this->mbinfo->setMbFan($dev3); } } /** * get voltage information * * @return void */ private function _voltage() { if (count($this->_values) == 14) { $dev1 = new SensorDevice(); $dev1->setName('Vcore1'); $dev1->setValue($this->_values[7]); $this->mbinfo->setMbVolt($dev1); $dev2 = new SensorDevice(); $dev2->setName('Vcore2'); $dev2->setValue($this->_values[8]); $this->mbinfo->setMbVolt($dev2); $dev3 = new SensorDevice(); $dev3->setName('3volt'); $dev3->setValue($this->_values[9]); $this->mbinfo->setMbVolt($dev3); $dev4 = new SensorDevice(); $dev4->setName('+5Volt'); $dev4->setValue($this->_values[10]); $this->mbinfo->setMbVolt($dev4); $dev5 = new SensorDevice(); $dev5->setName('+12Volt'); $dev5->setValue($this->_values[11]); $this->mbinfo->setMbVolt($dev5); $dev6 = new SensorDevice(); $dev6->setName('-12Volt'); $dev6->setValue($this->_values[12]); $this->mbinfo->setMbVolt($dev6); $dev7 = new SensorDevice(); $dev7->setName('-5Volt'); $dev7->setValue($this->_values[13]); $this->mbinfo->setMbVolt($dev7); } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $this->_temperature(); $this->_fans(); $this->_voltage(); } } phpsysinfo-3.4.4/includes/mb/class.hwmon.inc.php000066400000000000000000000255021467431054600216630ustar00rootroot00000000000000 * @copyright 2016 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Hwmon extends Sensors { /** * get temperature information * * @param string $hwpath * @return void */ protected function _temperature($hwpath) { $sensor = CommonFunctions::findglob($hwpath."temp*_input", GLOB_NOSORT); if (is_array($sensor) && (($total = count($sensor)) > 0)) { $buf = ""; for ($i = 0; $i < $total; $i++) if (($buf = CommonFunctions::rolv($sensor[$i]))!==null) { $dev = new SensorDevice(); $dev->setValue($buf/1000); if (($buf = CommonFunctions::rolv($sensor[$i], "/\/[^\/]*_input$/", "/name"))!==null) { $name = " (".$buf.")"; } else { $name = ""; } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_label"))!==null) { $dev->setName($buf.$name); } else { $labelname = trim(preg_replace("/_input$/", "", pathinfo($sensor[$i], PATHINFO_BASENAME))); if (($name == " (drivetemp)") && (count($buf = CommonFunctions::gdc($hwpath . "device/block", false)))) { $labelname = "/dev/" . $buf[0]; if (($buf = CommonFunctions::rolv($hwpath . "device/model"))!==null) { $labelname .= " (".$buf.")"; $name = ""; } } if ($labelname !== "") { $dev->setName($labelname.$name); } else { $dev->setName('unknown'.$name); } } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_crit"))!==null) { $dev->setMax($buf/1000); if (CommonFunctions::rolv($sensor[$i], "/_input$/", "_crit_alarm")==="1") { $dev->setEvent("Critical Alarm"); } } elseif (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_max"))!==null) { $dev->setMax($buf/1000); } $this->mbinfo->setMbTemp($dev); } } } /** * get voltage information * * @param string $hwpath * @return void */ private function _voltage($hwpath) { $sensor = CommonFunctions::findglob($hwpath."in*_input", GLOB_NOSORT); if (is_array($sensor) && (($total = count($sensor)) > 0)) { $buf = ""; for ($i = 0; $i < $total; $i++) if (($buf = CommonFunctions::rolv($sensor[$i]))!==null) { $dev = new SensorDevice(); $dev->setValue($buf/1000); if (($buf = CommonFunctions::rolv($sensor[$i], "/\/[^\/]*_input$/", "/name"))!==null) { $name = " (".$buf.")"; } else { $name = ""; } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_label"))!==null) { $dev->setName($buf.$name); } else { $labelname = trim(preg_replace("/_input$/", "", pathinfo($sensor[$i], PATHINFO_BASENAME))); if ($labelname !== "") { $dev->setName($labelname.$name); } else { $dev->setName('unknown'.$name); } } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_max"))!==null) { $dev->setMax($buf/1000); } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_min"))!==null) { $dev->setMin($buf/1000); } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_alarm"))==="1") { $dev->setEvent("Alarm"); } $this->mbinfo->setMbVolt($dev); } } } /** * get fan information * * @param string $hwpath * @return void */ protected function _fans($hwpath) { $sensor = CommonFunctions::findglob($hwpath."fan*_input", GLOB_NOSORT); if (is_array($sensor) && (($total = count($sensor)) > 0)) { $buf = ""; for ($i = 0; $i < $total; $i++) if (($buf = CommonFunctions::rolv($sensor[$i]))!==null) { $dev = new SensorDevice(); $dev->setValue($buf); if (($buf = CommonFunctions::rolv($sensor[$i], "/\/[^\/]*_input$/", "/name"))!==null) { $name = " (".$buf.")"; } else { $name = ""; } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_label"))!==null) { $dev->setName($buf.$name); } else { $labelname = trim(preg_replace("/_input$/", "", pathinfo($sensor[$i], PATHINFO_BASENAME))); if ($labelname !== "") { $dev->setName($labelname.$name); } else { $dev->setName('unknown'.$name); } } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_full_speed"))!==null) { $dev->setMax($buf); } elseif (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_max"))!==null) { $dev->setMax($buf); } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_min"))!==null) { $dev->setMin($buf); } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_alarm"))==="1") { $dev->setEvent("Alarm"); } $this->mbinfo->setMbFan($dev); } } } /** * get power information * * @param string $hwpath * @return void */ private function _power($hwpath) { $sensor = CommonFunctions::findglob($hwpath."power*_input", GLOB_NOSORT); if (is_array($sensor) && (($total = count($sensor)) > 0)) { $buf = ""; for ($i = 0; $i < $total; $i++) if (($buf = CommonFunctions::rolv($sensor[$i]))!==null) { $dev = new SensorDevice(); $dev->setValue($buf/1000000); if (($buf = CommonFunctions::rolv($sensor[$i], "/\/[^\/]*_input$/", "/name"))!==null) { $name = " (".$buf.")"; } else { $name = ""; } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_label"))!==null) { $dev->setName($buf.$name); } else { $labelname = trim(preg_replace("/_input$/", "", pathinfo($sensor[$i], PATHINFO_BASENAME))); if ($labelname !== "") { $dev->setName($labelname.$name); } else { $dev->setName('unknown'.$name); } } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_max"))!==null) { $dev->setMax($buf/1000000); } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_min"))!==null) { $dev->setMin($buf/1000000); } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_alarm"))==="1") { $dev->setEvent("Alarm"); } $this->mbinfo->setMbPower($dev); } } } /** * get current information * * @param string $hwpath * @return void */ private function _current($hwpath) { $sensor = CommonFunctions::findglob($hwpath."curr*_input", GLOB_NOSORT); if (is_array($sensor) && (($total = count($sensor)) > 0)) { $buf = ""; for ($i = 0; $i < $total; $i++) if (($buf = CommonFunctions::rolv($sensor[$i]))!==null) { $dev = new SensorDevice(); $dev->setValue($buf/1000); if (($buf = CommonFunctions::rolv($sensor[$i], "/\/[^\/]*_input$/", "/name"))!==null) { $name = " (".$buf.")"; } else { $name = ""; } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_label"))!==null) { $dev->setName($buf.$name); } else { $labelname = trim(preg_replace("/_input$/", "", pathinfo($sensor[$i], PATHINFO_BASENAME))); if ($labelname !== "") { $dev->setName($labelname.$name); } else { $dev->setName('unknown'.$name); } } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_max"))!==null) { $dev->setMax($buf/1000); } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_min"))!==null) { $dev->setMin($buf/1000); } if (($buf = CommonFunctions::rolv($sensor[$i], "/_input$/", "_alarm"))==="1") { $dev->setEvent("Alarm"); } $this->mbinfo->setMbCurrent($dev); } } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { if ((PSI_OS == 'Linux') && (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT'))) { $hwpaths = CommonFunctions::findglob("/sys/class/hwmon/hwmon*/", GLOB_NOSORT); if (is_array($hwpaths) && (count($hwpaths) > 0)) { $hwpaths2 = CommonFunctions::findglob("/sys/class/hwmon/hwmon*/device/", GLOB_NOSORT); if (is_array($hwpaths2) && (count($hwpaths2) > 0)) { $hwpaths = array_merge($hwpaths, $hwpaths2); } $totalh = count($hwpaths); for ($h = 0; $h < $totalh; $h++) { $this->_temperature($hwpaths[$h]); $this->_voltage($hwpaths[$h]); $this->_fans($hwpaths[$h]); $this->_power($hwpaths[$h]); $this->_current($hwpaths[$h]); } } } } } phpsysinfo-3.4.4/includes/mb/class.hwsensors.inc.php000066400000000000000000000123331467431054600225640ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class HWSensors extends Sensors { /** * content to parse * * @var array */ private $_lines = array(); /** * fill the private content var through command */ public function __construct() { parent::__construct(); if (PSI_OS == 'OpenBSD') { $lines = ""; // CommonFunctions::executeProgram('sysctl', '-w hw.sensors', $lines); CommonFunctions::executeProgram('sysctl', 'hw.sensors', $lines); $this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); } } /** * get temperature information * * @return void */ private function _temperature() { foreach ($this->_lines as $line) { if (preg_match('/^hw\.sensors\.[0-9]+=[^\s,]+,\s+([^,]+),\s+temp,\s+([0-9\.]+)\s+degC.*$/', $line, $ar_buf)) { $dev = new SensorDevice(); $dev->setName($ar_buf[1]); $dev->setValue($ar_buf[2]); $this->mbinfo->setMbTemp($dev); } elseif (preg_match('/^hw\.sensors\.[0-9]+=[^\s,]+,\s+([^,]+),\s+([0-9\.]+)\s+degC$/', $line, $ar_buf)) { $dev = new SensorDevice(); $dev->setName($ar_buf[1]); $dev->setValue($ar_buf[2]); $this->mbinfo->setMbTemp($dev); } elseif (preg_match('/^hw\.sensors\.[^\.]+\.(.*)=([0-9\.]+)\s+degC\s+\((.*)\)$/', $line, $ar_buf)) { $dev = new SensorDevice(); $dev->setName($ar_buf[3]); $dev->setValue($ar_buf[2]); $this->mbinfo->setMbTemp($dev); } elseif (preg_match('/^hw\.sensors\.[^\.]+\.(.*)=([0-9\.]+)\s+degC$/', $line, $ar_buf)) { $dev = new SensorDevice(); $dev->setName($ar_buf[1]); $dev->setValue($ar_buf[2]); $this->mbinfo->setMbTemp($dev); } } } /** * get fan information * * @return void */ private function _fans() { foreach ($this->_lines as $line) { if (preg_match('/^hw\.sensors\.[0-9]+=[^\s,]+,\s+([^,]+),\s+fanrpm,\s+([0-9\.]+)\s+RPM.*$/', $line, $ar_buf)) { $dev = new SensorDevice(); $dev->setName($ar_buf[1]); $dev->setValue($ar_buf[2]); $this->mbinfo->setMbFan($dev); } elseif (preg_match('/^hw\.sensors\.[0-9]+=[^\s,]+,\s+([^,]+),\s+([0-9\.]+)\s+RPM$/', $line, $ar_buf)) { $dev = new SensorDevice(); $dev->setName($ar_buf[1]); $dev->setValue($ar_buf[2]); $this->mbinfo->setMbFan($dev); } elseif (preg_match('/^hw\.sensors\.[^\.]+\.(.*)=([0-9\.]+)\s+RPM\s+\((.*)\)$/', $line, $ar_buf)) { $dev = new SensorDevice(); $dev->setName($ar_buf[3]); $dev->setValue($ar_buf[2]); $this->mbinfo->setMbFan($dev); } elseif (preg_match('/^hw\.sensors\.[^\.]+\.(.*)=([0-9\.]+)\s+RPM$/', $line, $ar_buf)) { $dev = new SensorDevice(); $dev->setName($ar_buf[1]); $dev->setValue($ar_buf[2]); $this->mbinfo->setMbFan($dev); } } } /** * get voltage information * * @return void */ private function _voltage() { foreach ($this->_lines as $line) { if (preg_match('/^hw\.sensors\.[0-9]+=[^\s,]+,\s+([^,]+),\s+volts_dc,\s+([0-9\.]+)\s+V.*$/', $line, $ar_buf)) { $dev = new SensorDevice(); $dev->setName($ar_buf[1]); $dev->setValue($ar_buf[2]); $this->mbinfo->setMbVolt($dev); } elseif (preg_match('/^hw\.sensors\.[0-9]+=[^\s,]+,\s+([^,]+),\s+([0-9\.]+)\s+V\sDC$/', $line, $ar_buf)) { $dev = new SensorDevice(); $dev->setName($ar_buf[1]); $dev->setValue($ar_buf[2]); $this->mbinfo->setMbVolt($dev); } elseif (preg_match('/^hw\.sensors\.[^\.]+\.(.*)=([0-9\.]+)\s+VDC\s+\((.*)\)$/', $line, $ar_buf)) { $dev = new SensorDevice(); $dev->setName($ar_buf[3]); $dev->setValue($ar_buf[2]); $this->mbinfo->setMbVolt($dev); } elseif (preg_match('/^hw\.sensors\.[^\.]+\.(.*)=([0-9\.]+)\s+VDC$/', $line, $ar_buf)) { $dev = new SensorDevice(); $dev->setName($ar_buf[1]); $dev->setValue($ar_buf[2]); $this->mbinfo->setMbVolt($dev); } } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $this->_temperature(); $this->_voltage(); $this->_fans(); } } phpsysinfo-3.4.4/includes/mb/class.ipmicfg.inc.php000066400000000000000000000325251467431054600221540ustar00rootroot00000000000000 * @copyright 2021 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class IPMIcfg extends Sensors { /** * content to parse * * @var array */ private $_lines = array(); /** * fill the private content var through command or data access */ public function __construct() { parent::__construct(); if (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT')) switch (defined('PSI_SENSOR_IPMICFG_ACCESS')?strtolower(PSI_SENSOR_IPMICFG_ACCESS):'command') { case 'command': if ((!defined('PSI_SENSOR_IPMICFG_SDR') || (PSI_SENSOR_IPMICFG_SDR!==false)) || (!defined('PSI_SENSOR_IPMICFG_PSFRUINFO') || (PSI_SENSOR_IPMICFG_PSFRUINFO!==false)) || (!defined('PSI_SENSOR_IPMICFG_PMINFO') || (PSI_SENSOR_IPMICFG_PMINFO!==false))) { $lines=''; $first=true; if (!defined('PSI_SENSOR_IPMICFG_SDR') || (PSI_SENSOR_IPMICFG_SDR!==false)) { $linestmp=''; if (CommonFunctions::executeProgram('ipmicfg', '-sdr', $linestmp)) { $lines=$linestmp; } $first=false; } if (!defined('PSI_SENSOR_IPMICFG_PSFRUINFO') || (PSI_SENSOR_IPMICFG_PSFRUINFO!==false)) { $linestmp=''; if (CommonFunctions::executeProgram('ipmicfg', '-psfruinfo', $linestmp, $first || PSI_DEBUG)) { $lines.=$linestmp; } $first=false; } if (!defined('PSI_SENSOR_IPMICFG_PMINFO') || (PSI_SENSOR_IPMICFG_PMINFO!==false)) { $linestmp=''; if (CommonFunctions::executeProgram('ipmicfg', '-pminfo', $linestmp, $first || PSI_DEBUG)) { $lines.=$linestmp; } } $this->_lines = preg_split("/\r?\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); } else { $this->error->addConfigError('__construct()', '[sensor_ipmicfg] Not defined: SDR or PSFRUINFO or PMINFO'); } break; case 'data': if (!defined('PSI_EMU_PORT') && CommonFunctions::rftsdata('ipmicfg.tmp', $lines)) { $this->_lines = preg_split("/\r?\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); } break; default: $this->error->addConfigError('__construct()', '[sensor_ipmicfg] ACCESS'); } if ($this->_lines===false) { $this->_lines = array(); } else { $pmbus=false; for ($licz=count($this->_lines); $licz--; $licz>0) { $line=$this->_lines[$licz]; if (preg_match("/^\s*PMBus Revision\s*\|/", $line)) { $pmbus=true; } else if (preg_match("/^(\s*\[SlaveAddress = [\da..fA..F]+h\] \[)(Module )(\d+\])/", $line, $tmpbuf)) { $this->_lines[$licz]=$tmpbuf[1].($pmbus?"PMBus ":"SMBus ").$tmpbuf[3]; $pmbus=false; } else { $this->_lines[$licz]=preg_replace("/\|\s*$/", "", $line); } } } } /** * get temperature information * * @return void */ private function _temperature() { $mdid=''; foreach ($this->_lines as $line) { if (preg_match("/^\s*\[SlaveAddress = [\da..fA..F]+h\] \[((PMBus \d+)|(SMBus \d+))\]/", $line, $mdidtmp)) { $mdid=$mdidtmp[1]; continue; } $buffer = preg_split("/\s*\|\s*/", $line); if (($mdid=='') && (count($buffer)==5) && preg_match("/^\s*\(\d+\)\s(.*)\s*$/", $buffer[1], $namebuff) && preg_match("/^\s*([-\d]+)C\/[-\d]+F\s*$/", $buffer[2], $valbuff)) { $dev = new SensorDevice(); $dev->setName($namebuff[1]); if ($valbuff[1]<-128) $valbuff[1]+=256; //+256 correction $dev->setValue($valbuff[1]); if (preg_match("/^\s*([-\d]+)C\/[-\d]+F\s*$/", $buffer[3], $valbuffmin)) { if ($valbuffmin[1]<-128) $valbuffmin[1]+=256; //+256 correction } if (preg_match("/^\s*([-\d]+)C\/[-\d]+F\s*$/", $buffer[4], $valbuffmax)) { if ($valbuffmax[1]<-128) $valbuffmax[1]+=256; //+256 correction $dev->setMax($valbuffmax[1]); } if ((isset($valbuffmin[1]) && ($valbuff[1]<=$valbuffmin[1])) || (isset($valbuffmax[1]) && ($valbuff[1]>=$valbuffmax[1]))) { //own range test due to errors with +256 correction $dev->setEvent("Alarm"); } $this->mbinfo->setMbTemp($dev); } elseif (($mdid!='') && (count($buffer)==2) && preg_match("/^\s*([-\d]+)C\/[-\d]+F\s*$/", $buffer[1], $valbuff)) { $dev = new SensorDevice(); $dev->setName(trim($buffer[0])." (".$mdid.")"); $dev->setValue($valbuff[1]); $this->mbinfo->setMBTemp($dev); } } } /** * get voltage information * * @return void */ private function _voltage() { $mdid=''; foreach ($this->_lines as $line) { if (preg_match("/^\s*\[SlaveAddress = [\da..fA..F]+h\] \[((PMBus \d+)|(SMBus \d+))\]/", $line, $mdidtmp)) { $mdid=$mdidtmp[1]; continue; } $buffer = preg_split("/\s*\|\s*/", $line); if (($mdid=='') && (count($buffer)==5) && preg_match("/^\s*\(\d+\)\s(.*)\s*$/", $buffer[1], $namebuff) && preg_match("/^\s*([\d\.]+)\sV\s*$/", $buffer[2], $valbuff)) { $dev = new SensorDevice(); $dev->setName($namebuff[1]); $dev->setValue($valbuff[1]); if (preg_match("/^\s*([\d\.].+)\sV\s*$/", $buffer[3], $valbuffmin)) { $dev->setMin($valbuffmin[1]); } if (preg_match("/^\s*([\d\.].+)\sV\s*$/", $buffer[4], $valbuffmax)) { $dev->setMax($valbuffmax[1]); } if (trim($buffer[0]) != "OK") $dev->setEvent(trim($buffer[0])); $this->mbinfo->setMbVolt($dev); } elseif (($mdid!='') && (count($buffer)==2) && preg_match("/^\s*([\d\.]+)\sV\s*$/", $buffer[1], $valbuff)) { $dev = new SensorDevice(); $dev->setName(trim($buffer[0])." (".$mdid.")"); $dev->setValue($valbuff[1]); $this->mbinfo->setMBVolt($dev); } } } /** * get fan information * * @return void */ private function _fans() { $mdid=''; foreach ($this->_lines as $line) { if (preg_match("/^\s*\[SlaveAddress = [\da..fA..F]+h\] \[((PMBus \d+)|(SMBus \d+))\]/", $line, $mdidtmp)) { $mdid=$mdidtmp[1]; continue; } $buffer = preg_split("/\s*\|\s*/", $line); if (($mdid=='') && (count($buffer)==5) && preg_match("/^\s*\(\d+\)\s(.*)\s*$/", $buffer[1], $namebuff) && preg_match("/^\s*(\d+)\sRPM\s*$/", $buffer[2], $valbuff)) { $dev = new SensorDevice(); $dev->setName($namebuff[1]); $dev->setValue($valbuff[1]); if (preg_match("/^\s*(\d+)\sRPM\s*$/", $buffer[3], $valbuffmin)) { $dev->setMin($valbuffmin[1]); } if ((trim($buffer[0]) != "OK") && isset($valbuffmin[1])) { $dev->setEvent(trim($buffer[0])); } $this->mbinfo->setMbFan($dev); } elseif (($mdid!='') && (count($buffer)==2) && preg_match("/^\s*(\d+)\sRPM\s*$/", $buffer[1], $valbuff)) { $dev = new SensorDevice(); $dev->setName(trim($buffer[0])." (".$mdid.")"); $dev->setValue($valbuff[1]); $this->mbinfo->setMBFan($dev); } } } /** * get power information * * @return void */ private function _power() { $mdid=''; foreach ($this->_lines as $line) { if (preg_match("/^\s*\[SlaveAddress = [\da..fA..F]+h\] \[((PMBus \d+)|(SMBus \d+))\]/", $line, $mdidtmp)) { $mdid=$mdidtmp[1]; continue; } $buffer = preg_split("/\s*\|\s*/", $line); if (($mdid=='') && (count($buffer)==5) && preg_match("/^\s*\(\d+\)\s(.*)\s*$/", $buffer[1], $namebuff) && preg_match("/^\s*(\d+)\sWatts\s*$/", $buffer[2], $valbuff)) { $dev = new SensorDevice(); $dev->setName($namebuff[1]); $dev->setValue($valbuff[1]); if (preg_match("/^\s*(\d+)\sWatts\s*$/", $buffer[4], $valbuffmax)) { $dev->setMax($valbuffmax[1]); } if (trim($buffer[0]) != "OK") $dev->setEvent(trim($buffer[0])); $this->mbinfo->setMbPower($dev); } elseif (($mdid!='') && (count($buffer)==2) && preg_match("/^\s*(\d+)\sW\s*$/", $buffer[1], $valbuff)) { $dev = new SensorDevice(); $dev->setName(trim($buffer[0])." (".$mdid.")"); $dev->setValue($valbuff[1]); $this->mbinfo->setMBPower($dev); } } } /** * get current information * * @return void */ private function _current() { $mdid=''; foreach ($this->_lines as $line) { if (preg_match("/^\s*\[SlaveAddress = [\da..fA..F]+h\] \[((PMBus \d+)|(SMBus \d+))\]/", $line, $mdidtmp)) { $mdid=$mdidtmp[1]; continue; } $buffer = preg_split("/\s*\|\s*/", $line); if (($mdid=='') && (count($buffer)==5) && preg_match("/^\s*\(\d+\)\s(.*)\s*$/", $buffer[1], $namebuff) && preg_match("/^\s*([\d\.]+)\sAmps\s*$/", $buffer[2], $valbuff)) { $dev = new SensorDevice(); $dev->setName($namebuff[1]); $dev->setValue($valbuff[1]); if (preg_match("/^\s*([\d\.].+)\sAmps\s*$/", $buffer[3], $valbuffmin)) { $dev->setMin($valbuffmin[1]); } if (preg_match("/^\s*([\d\.].+)\sAmps\s*$/", $buffer[4], $valbuffmax)) { $dev->setMax($valbuffmax[1]); } if (trim($buffer[0]) != "OK") $dev->setEvent(trim($buffer[0])); $this->mbinfo->setMbCurrent($dev); } elseif (($mdid!='') && (count($buffer)==2) && preg_match("/^\s*([\d\.]+)\sA\s*$/", $buffer[1], $valbuff)) { $dev = new SensorDevice(); $dev->setName(trim($buffer[0])." (".$mdid.")"); $dev->setValue($valbuff[1]); $this->mbinfo->setMBCurrent($dev); } } } /** * get other information * * @return void */ private function _other() { $mdid=''; foreach ($this->_lines as $line) { if (preg_match("/^\s*\[SlaveAddress = [\da..fA..F]+h\] \[((PMBus \d+)|(SMBus \d+))\]/", $line, $mdidtmp)) { $mdid=$mdidtmp[1]; continue; } $buffer = preg_split("/\s*\|\s*/", $line); if (($mdid=='') && (count($buffer)>=3) && preg_match("/^\s*\(\d+\)\s(.*)\s*$/", $buffer[1], $namebuff)) { $buffer[2]=trim($buffer[2]); if ((count($buffer)==3) && ($buffer[2]!=="Correctable ECC / other correctable memory error") && ($buffer[2]!=="Not Present") && ($buffer[2]!=="N/A") && (trim($buffer[0]) != "")) { $dev = new SensorDevice(); $dev->setName($namebuff[1]); $dev->setValue($buffer[2]); if (trim($buffer[0]) != "OK") $dev->setEvent(trim($buffer[0])); $this->mbinfo->setMbOther($dev); } elseif ((count($buffer)==5)&& preg_match("/(^\s*[\d\.]+\s*$)|(^\s*[\da-fA-F]{2}\s+[\da-fA-F]{2}\s+[\da-fA-F]{2}\s+[\da-fA-F]{2}\s*$)/", $buffer[2], $valbuff)) { $dev = new SensorDevice(); $dev->setName($namebuff[1]); $dev->setValue($buffer[0]); $this->mbinfo->setMbOther($dev); } } elseif (($mdid!='') && (count($buffer)==2) && ((trim($buffer[0])=="Status") || (trim($buffer[0])=="Current Sharing Control"))) { $dev = new SensorDevice(); $dev->setName(trim($buffer[0])." (".$mdid.")"); $dev->setValue($buffer[1]); $this->mbinfo->setMbOther($dev); } } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $this->_temperature(); $this->_voltage(); $this->_fans(); $this->_power(); $this->_current(); $this->_other(); } } phpsysinfo-3.4.4/includes/mb/class.ipmitool.inc.php000066400000000000000000000327561467431054600224000ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class IPMItool extends Sensors { /** * content to parse * * @var array */ private $_buf = array(); /** * fill the private content var through command or data access */ public function __construct() { parent::__construct(); $lines = ""; if (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT')) switch (defined('PSI_SENSOR_IPMITOOL_ACCESS')?strtolower(PSI_SENSOR_IPMITOOL_ACCESS):'command') { case 'command': CommonFunctions::executeProgram('ipmitool', 'sensor -v', $lines); break; case 'data': if (!defined('PSI_EMU_PORT')) { CommonFunctions::rftsdata('ipmitool.tmp', $lines); } break; default: $this->error->addConfigError('__construct()', '[sensor_ipmitool] ACCESS'); } if (trim($lines) !== "") { if (preg_match("/^Sensor ID\s+/", $lines)) { //new data format ('ipmitool sensor -v') $lines = preg_replace("/\n?Unable to read sensor/", "\nUnable to read sensor", $lines); $sensors = preg_split("/Sensor ID\s+/", $lines, -1, PREG_SPLIT_NO_EMPTY); foreach ($sensors as $sensor) { if (preg_match("/^:\s*(.+)\s\((0x[a-f\d]+)\)\r?\n/", $sensor, $name) && (($name1 = trim($name[1])) !== "")) { $sensorvalues = preg_split("/\r?\n/", $sensor, -1, PREG_SPLIT_NO_EMPTY); unset($sensorvalues[0]); //skip first $sens = array(); $was = false; foreach ($sensorvalues as $sensorvalue) { if (preg_match("/^\s+\[(.+)\]$/", $sensorvalue, $buffer) && (($buffer1 = trim($buffer[1])) !== "")) { if (isset($sens['State'])) { $sens['State'] .= ', '.$buffer1; } else { $sens['State'] = $buffer1; } $was = true; } elseif (preg_match("/^([^:]+):(.+)$/", $sensorvalue, $buffer) && (($buffer1 = trim($buffer[1])) !== "") && (($buffer2 = trim($buffer[2])) !== "")) { $sens[$buffer1] = $buffer2; $was = true; } } if ($was && !isset($sens['Unable to read sensor'])) { $sens['Sensor'] = $name1; if (isset($sens['Sensor Reading']) && preg_match("/^([\d\.]+)\s+\([^\)]*\)\s+(.+)$/", $sens['Sensor Reading'], $buffer) && (($buffer2 = trim($buffer[2])) !== "")) { $sens['Value'] = $buffer[1]; $sens['Unit'] = $buffer2; } $this->_buf[intval($name[2], 0)] = $sens; } } } } else { $lines = preg_split("/\r?\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); if (count($lines)>0) { $buffer = preg_split("/\s*\|\s*/", $lines[0]); if (count($buffer)>8) { //old data format ('ipmitool sensor') foreach ($lines as $line) { $buffer = preg_split("/\s*\|\s*/", $line); if (count($buffer)>8) { $sens = array(); $sens['Sensor'] = $buffer[0]; switch ($buffer[2]) { case 'degrees C': $sens['Value'] = $buffer[1]; $sens['Unit'] = $buffer[2]; $sens['Upper Critical'] = $buffer[8]; $sens['Sensor Type (Threshold)'] = 'Temperature'; break; case 'Volts': $sens['Value'] = $buffer[1]; $sens['Unit'] = $buffer[2]; $sens['Lower Critical'] = $buffer[5]; $sens['Upper Critical'] = $buffer[8]; $sens['Sensor Type (Threshold)'] = 'Voltage'; break; case 'RPM': $sens['Value'] = $buffer[1]; $sens['Unit'] = $buffer[2]; $sens['Lower Critical'] = $buffer[5]; $sens['Upper Critical'] = $buffer[8]; $sens['Sensor Type (Threshold)'] = 'Fan'; break; case 'Watts': $sens['Value'] = $buffer[1]; $sens['Unit'] = $buffer[2]; $sens['Upper Critical'] = $buffer[8]; $sens['Sensor Type (Threshold)'] = 'Current'; break; case 'Amps': $sens['Value'] = $buffer[1]; $sens['Unit'] = $buffer[2]; $sens['Lower Critical'] = $buffer[5]; $sens['Upper Critical'] = $buffer[8]; $sens['Sensor Type (Threshold)'] = 'Current'; break; case 'discrete': if (($buffer[1]==='0x0') || ($buffer[1]==='0x1')) { $sens['State'] = $buffer[1]; $sens['Sensor Type (Discrete)'] = ''; $sens['State'] = $buffer[1]; } } $this->_buf[] = $sens; } } } } } } } /** * get temperature information * * @return void */ private function _temperature() { foreach ($this->_buf as $sensor) { if (((isset($sensor['Sensor Type (Threshold)']) && ($sensor['Sensor Type (Threshold)'] == 'Temperature')) ||(isset($sensor['Sensor Type (Analog)']) && ($sensor['Sensor Type (Analog)'] == 'Temperature'))) && isset($sensor['Unit']) && ($sensor['Unit'] == 'degrees C') && isset($sensor['Value'])) { $dev = new SensorDevice(); $dev->setName($sensor['Sensor']); $dev->setValue($sensor['Value']); if (isset($sensor['Upper Critical']) && (($max = $sensor['Upper Critical']) != "na")) { $dev->setMax($max); } if (isset($sensor['Status']) && (($status = $sensor['Status']) != "ok")) { $dev->setEvent($status); } $this->mbinfo->setMbTemp($dev); } } } /** * get voltage information * * @return void */ private function _voltage() { foreach ($this->_buf as $sensor) { if (((isset($sensor['Sensor Type (Threshold)']) && ($sensor['Sensor Type (Threshold)'] == 'Voltage')) ||(isset($sensor['Sensor Type (Analog)']) && ($sensor['Sensor Type (Analog)'] == 'Voltage'))) && isset($sensor['Unit']) && ($sensor['Unit'] == 'Volts') && isset($sensor['Value'])) { $dev = new SensorDevice(); $dev->setName($sensor['Sensor']); $dev->setValue($sensor['Value']); if (isset($sensor['Upper Critical']) && (($max = $sensor['Upper Critical']) != "na")) { $dev->setMax($max); } if (isset($sensor['Lower Critical']) && (($min = $sensor['Lower Critical']) != "na")) { $dev->setMin($min); } if (isset($sensor['Status']) && (($status = $sensor['Status']) != "ok")) { $dev->setEvent($status); } $this->mbinfo->setMbVolt($dev); } } } /** * get fan information * * @return void */ private function _fans() { foreach ($this->_buf as $sensor) { if (((isset($sensor['Sensor Type (Threshold)']) && ($sensor['Sensor Type (Threshold)'] == 'Fan')) ||(isset($sensor['Sensor Type (Analog)']) && ($sensor['Sensor Type (Analog)'] == 'Fan'))) && isset($sensor['Unit']) && ($sensor['Unit'] == 'RPM') && isset($sensor['Value'])) { $dev = new SensorDevice(); $dev->setName($sensor['Sensor']); $dev->setValue($value = $sensor['Value']); if (isset($sensor['Lower Critical']) && (($min = $sensor['Lower Critical']) != "na")) { $dev->setMin($min); } elseif (isset($sensor['Upper Critical']) && (($max = $sensor['Upper Critical']) != "na") && ($max < $value)) { // max instead min issue $dev->setMin($max); } if (isset($sensor['Status']) && (($status = $sensor['Status']) != "ok")) { $dev->setEvent($status); } $this->mbinfo->setMbFan($dev); } } } /** * get power information * * @return void */ private function _power() { foreach ($this->_buf as $sensor) { if (((isset($sensor['Sensor Type (Threshold)']) && ($sensor['Sensor Type (Threshold)'] == 'Current')) ||(isset($sensor['Sensor Type (Analog)']) && ($sensor['Sensor Type (Analog)'] == 'Current'))) && isset($sensor['Unit']) && ($sensor['Unit'] == 'Watts') && isset($sensor['Value'])) { $dev = new SensorDevice(); $dev->setName($sensor['Sensor']); $dev->setValue($sensor['Value']); if (isset($sensor['Upper Critical']) && (($max = $sensor['Upper Critical']) != "na")) { $dev->setMax($max); } if (isset($sensor['Status']) && (($status = $sensor['Status']) != "ok")) { $dev->setEvent($status); } $this->mbinfo->setMbPower($dev); } } } /** * get current information * * @return void */ private function _current() { foreach ($this->_buf as $sensor) { if (((isset($sensor['Sensor Type (Threshold)']) && ($sensor['Sensor Type (Threshold)'] == 'Current')) ||(isset($sensor['Sensor Type (Analog)']) && ($sensor['Sensor Type (Analog)'] == 'Current'))) && isset($sensor['Unit']) && ($sensor['Unit'] == 'Amps') && isset($sensor['Value'])) { $dev = new SensorDevice(); $dev->setName($sensor['Sensor']); $dev->setValue($sensor['Value']); if (isset($sensor['Upper Critical']) && (($max = $sensor['Upper Critical']) != "na")) { $dev->setMax($max); } if (isset($sensor['Lower Critical']) && (($min = $sensor['Lower Critical']) != "na")) { $dev->setMin($min); } if (isset($sensor['Status']) && (($status = $sensor['Status']) != "ok")) { $dev->setEvent($status); } $this->mbinfo->setMbCurrent($dev); } } } /** * get other information * * @return void */ private function _other() { foreach ($this->_buf as $sensor) { if (isset($sensor['Sensor Type (Discrete)'])) { $dev = new SensorDevice(); if ($sensor['Sensor Type (Discrete)']!=='') { $dev->setName($sensor['Sensor'].' ('.$sensor['Sensor Type (Discrete)'].')'); } else { $dev->setName($sensor['Sensor']); } if (isset($sensor['State'])) { $dev->setValue($sensor['State']); } else { $dev->setValue('0x0'); } $this->mbinfo->setMbOther($dev); } } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $this->_temperature(); $this->_voltage(); $this->_fans(); $this->_power(); $this->_current(); $this->_other(); } } phpsysinfo-3.4.4/includes/mb/class.ipmiutil.inc.php000066400000000000000000000260771467431054600223770ustar00rootroot00000000000000 * @copyright 2014 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class IPMIutil extends Sensors { /** * content to parse * * @var array */ private $_lines = array(); /** * fill the private content var through command or data access */ public function __construct() { parent::__construct(); if (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT')) switch (defined('PSI_SENSOR_IPMIUTIL_ACCESS')?strtolower(PSI_SENSOR_IPMIUTIL_ACCESS):'command') { case 'command': CommonFunctions::executeProgram('ipmiutil', 'sensor -stw', $lines); $this->_lines = preg_split("/\r?\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); break; case 'data': if (!defined('PSI_EMU_PORT') && CommonFunctions::rftsdata('ipmiutil.tmp', $lines)) { $this->_lines = preg_split("/\r?\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); } break; default: $this->error->addConfigError('__construct()', '[sensor_ipmiutil] ACCESS'); } } /** * get temperature information * * @return void */ private function _temperature() { foreach ($this->_lines as $line) { $buffer = preg_split("/\s*\|\s*/", $line); if (isset($buffer[2]) && $buffer[2] == "Temperature" && $buffer[1] == "Full" && isset($buffer[6]) && preg_match("/^(\S+)\sC$/", $buffer[6], $value) && $buffer[5] !== "Init") { $dev = new SensorDevice(); $dev->setName($buffer[4]); $dev->setValue($value[1]); if (isset($buffer[7]) && $buffer[7] == "Thresholds") { if ((isset($buffer[8]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[8], $limits)) ||(isset($buffer[9]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[9], $limits)) ||(isset($buffer[10]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[10], $limits)) ||(isset($buffer[11]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[11], $limits))) { $dev->setMax($limits[1]); } } if ($buffer[5] != "OK") $dev->setEvent($buffer[5]); $this->mbinfo->setMbTemp($dev); } } } /** * get voltage information * * @return void */ private function _voltage() { foreach ($this->_lines as $line) { $buffer = preg_split("/\s*\|\s*/", $line); if (isset($buffer[2]) && $buffer[2] == "Voltage" && $buffer[1] == "Full" && isset($buffer[6]) && preg_match("/^(\S+)\sV$/", $buffer[6], $value) && $buffer[5] !== "Init") { $dev = new SensorDevice(); $dev->setName($buffer[4]); $dev->setValue($value[1]); if (isset($buffer[7]) && $buffer[7] == "Thresholds") { if ((isset($buffer[8]) && preg_match("/^lo-crit\s(\S+)\s*$/", $buffer[8], $limits)) ||(isset($buffer[9]) && preg_match("/^lo-crit\s(\S+)\s*$/", $buffer[9], $limits)) ||(isset($buffer[10]) && preg_match("/^lo-crit\s(\S+)\s*$/", $buffer[10], $limits)) ||(isset($buffer[11]) && preg_match("/^lo-crit\s(\S+)\s*$/", $buffer[11], $limits))) { $dev->setMin($limits[1]); } if ((isset($buffer[8]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[8], $limits)) ||(isset($buffer[9]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[9], $limits)) ||(isset($buffer[10]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[10], $limits)) ||(isset($buffer[11]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[11], $limits))) { $dev->setMax($limits[1]); } } if ($buffer[5] != "OK") $dev->setEvent($buffer[5]); $this->mbinfo->setMbVolt($dev); } } } /** * get fan information * * @return void */ private function _fans() { foreach ($this->_lines as $line) { $buffer = preg_split("/\s*\|\s*/", $line); if (isset($buffer[2]) && $buffer[2] == "Fan" && $buffer[1] == "Full" && isset($buffer[6]) && preg_match("/^(\S+)\sRPM$/", $buffer[6], $value) && $buffer[5] !== "Init") { $dev = new SensorDevice(); $dev->setName($buffer[4]); $dev->setValue($value[1]); if (isset($buffer[7]) && $buffer[7] == "Thresholds") { if ((isset($buffer[8]) && preg_match("/^lo-crit\s(\S+)\s*$/", $buffer[8], $limits)) ||(isset($buffer[9]) && preg_match("/^lo-crit\s(\S+)\s*$/", $buffer[9], $limits)) ||(isset($buffer[10]) && preg_match("/^lo-crit\s(\S+)\s*$/", $buffer[10], $limits)) ||(isset($buffer[11]) && preg_match("/^lo-crit\s(\S+)\s*$/", $buffer[11], $limits))) { $dev->setMin($limits[1]); } elseif ((isset($buffer[8]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[8], $limits)) ||(isset($buffer[9]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[9], $limits)) ||(isset($buffer[10]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[10], $limits)) ||(isset($buffer[11]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[11], $limits))) { if ($limits[1]<$value[1]) {//max instead min issue $dev->setMin($limits[1]); } } } if ($buffer[5] != "OK") $dev->setEvent($buffer[5]); $this->mbinfo->setMbFan($dev); } } } /** * get power information * * @return void */ private function _power() { foreach ($this->_lines as $line) { $buffer = preg_split("/\s*\|\s*/", $line); if (isset($buffer[2]) && $buffer[2] == "Current" && $buffer[1] == "Full" && isset($buffer[6]) && preg_match("/^(\S+)\sW$/", $buffer[6], $value) && $buffer[5] !== "Init") { $dev = new SensorDevice(); $dev->setName($buffer[4]); $dev->setValue($value[1]); if (isset($buffer[7]) && $buffer[7] == "Thresholds") { if ((isset($buffer[8]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[8], $limits)) ||(isset($buffer[9]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[9], $limits)) ||(isset($buffer[10]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[10], $limits)) ||(isset($buffer[11]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[11], $limits))) { $dev->setMax($limits[1]); } } if ($buffer[5] != "OK") $dev->setEvent($buffer[5]); $this->mbinfo->setMbPower($dev); } } } /** * get current information * * @return void */ private function _current() { foreach ($this->_lines as $line) { $buffer = preg_split("/\s*\|\s*/", $line); if (isset($buffer[2]) && $buffer[2] == "Current" && $buffer[1] == "Full" && isset($buffer[6]) && preg_match("/^(\S+)\sA$/", $buffer[6], $value) && $buffer[5] !== "Init") { $dev = new SensorDevice(); $dev->setName($buffer[4]); $dev->setValue($value[1]); if (isset($buffer[7]) && $buffer[7] == "Thresholds") { if ((isset($buffer[8]) && preg_match("/^lo-crit\s(\S+)\s*$/", $buffer[8], $limits)) ||(isset($buffer[9]) && preg_match("/^lo-crit\s(\S+)\s*$/", $buffer[9], $limits)) ||(isset($buffer[10]) && preg_match("/^lo-crit\s(\S+)\s*$/", $buffer[10], $limits)) ||(isset($buffer[11]) && preg_match("/^lo-crit\s(\S+)\s*$/", $buffer[11], $limits))) { $dev->setMin($limits[1]); } if ((isset($buffer[8]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[8], $limits)) ||(isset($buffer[9]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[9], $limits)) ||(isset($buffer[10]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[10], $limits)) ||(isset($buffer[11]) && preg_match("/^hi-crit\s(\S+)\s*$/", $buffer[11], $limits))) { $dev->setMax($limits[1]); } } if ($buffer[5] != "OK") $dev->setEvent($buffer[5]); $this->mbinfo->setMbCurrent($dev); } } } /** * get other information * * @return void */ private function _other() { foreach ($this->_lines as $line) { $buffer = preg_split("/\s*\|\s*/", $line); if (isset($buffer[1]) && $buffer[1] == "Compact" && $buffer[5] !== "Init" && $buffer[5] !== "Unknown" && $buffer[5] !== "NotAvailable") { $dev = new SensorDevice(); $dev->setName($buffer[4].' ('.$buffer[2].')'); $buffer5s = preg_split("/\s+/", $buffer5 = $buffer[5]); if (isset($buffer5s[1])) { if (preg_match('/^[0-9A-Fa-f]+$/', $buffer5s[0])) { $value = hexdec($buffer5s[0]) & 0xff; if ($buffer5s[1] === 'DiscreteEvt') { $dev->setValue('0x'.dechex($value)); } elseif (($buffer5s[1] === 'DiscreteUnit') && ($value > 0)) { $dev->setValue('0x'.dechex($value - 1)); } else { $dev->setValue($buffer5); } } else { $dev->setValue($buffer5); } } else { $dev->setValue($buffer5); } $this->mbinfo->setMbOther($dev); } } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $this->_temperature(); $this->_voltage(); $this->_fans(); $this->_power(); $this->_current(); $this->_other(); } } phpsysinfo-3.4.4/includes/mb/class.k8temp.inc.php000066400000000000000000000043041467431054600217400ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class K8Temp extends Sensors { /** * content to parse * * @var array */ private $_lines = array(); /** * fill the private array */ public function __construct() { parent::__construct(); if ((PSI_OS != 'WINNT') && (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT'))) switch (defined('PSI_SENSOR_K8TEMP_ACCESS')?strtolower(PSI_SENSOR_K8TEMP_ACCESS):'command') { case 'command': $lines = ""; CommonFunctions::executeProgram('k8temp', '', $lines); $this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); break; case 'data': if (!defined('PSI_EMU_PORT') && CommonFunctions::rftsdata('k8temp.tmp', $lines)) { $this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); } break; default: $this->error->addConfigError('__construct()', '[sensor_k8temp] ACCESS'); } } /** * get temperature information * * @return void */ private function _temperature() { foreach ($this->_lines as $line) { if (preg_match('/(.*):\s*(\d*)/', $line, $data)) { if ($data[2] > 0) { $dev = new SensorDevice(); $dev->setName($data[1]); // $dev->setMax('70.0'); if ($data[2] < 250) { $dev->setValue($data[2]); } $this->mbinfo->setMbTemp($dev); } } } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $this->_temperature(); } } phpsysinfo-3.4.4/includes/mb/class.lmsensors.inc.php000066400000000000000000000332231467431054600225570ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class LMSensors extends Sensors { /** * array of values * * @var array */ private $_values = array(); /** * fill the private content var through command or data access */ public function __construct() { parent::__construct(); $lines = ""; if ((PSI_OS == 'Linux') && (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT'))) switch (defined('PSI_SENSOR_LMSENSORS_ACCESS')?strtolower(PSI_SENSOR_LMSENSORS_ACCESS):'command') { case 'command': CommonFunctions::executeProgram("sensors", "", $lines); break; case 'data': if (!defined('PSI_EMU_PORT')) { CommonFunctions::rftsdata('lmsensors.tmp', $lines); } break; default: $this->error->addConfigError('__construct()', '[sensor_lmsensors] ACCESS'); } if (trim($lines) !== "") { $lines = str_replace("\r\n", "\n", $lines); $lines = str_replace(":\n", ":", $lines); $lines = str_replace("\n\n", "\n", $lines); $lines = preg_replace("/\n\s+\(/m", " (", $lines); $_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); $applearray1 = array( "A" => "Ambient", "B" => "Battery", "C" => "CPU", "G" => "GPU", "H" => "Harddisk Bay", "h" => "Heatpipe", "L" => "LCD", "M" => "Memory", "m" => "Memory Contr.", "N" => "Northbridge", "O" => "Optical Drive", "p" => "Power supply", "S" => "Slot", "s" => "Slot", "W" => "Airport" ); $applearray3 = array( "H" => "Heatsink", "P" => "Proximity", "D" => "Die" ); $tmpvalue=array(); $applesmc = false; $sname = ''; foreach ($_lines as $line) { if ((trim($line) !== "") && (strpos($line, ':') === false)) { if (sizeof($tmpvalue)>0) { $this->_values[] = $tmpvalue; $tmpvalue = array(); } $sname = trim($line); $applesmc = ($sname === "applesmc-isa-0300"); if (preg_match('/^([^-]+)-/', $sname, $snamebuf)) { $sname = $snamebuf[1]; } else { $sname = ''; } } else { if (preg_match("/^(.+):(.+)$/", trim($line), $data) && ($data[1]!=="Adapter")) { if ($applesmc && (strlen($data[1]) == 4) && ($data[1][0] == "T")) { if (isset($applearray1[$data[1][1]])) $data[1] .= " ".$applearray1[$data[1][1]]; if (isset($applearray3[$data[1][3]])) $data[1] .= " ".$applearray3[$data[1][3]]; } $arrtemp=array(); if ($sname !== "" ) { $arrtemp["name"] = $data[1]." (".$sname.")"; } else { $arrtemp["name"] = $data[1]; } if (preg_match("/^([^\(]+)\s+\(/", $data[2], $tmp) || preg_match("/^(.+)\s+ALARM$/", $data[2], $tmp)) { if (($tmp[1] = trim($tmp[1])) == "") { $arrtemp["value"] = "ALARM"; } else { $arrtemp["value"] = $tmp[1]; } if (preg_match("/\s(ALARM)\s*$/", $data[2]) || preg_match("/\s(ALARM)\s+\(/", $data[2]) || preg_match("/\s(ALARM)\s+sensor\s+=/", $data[2])) { $arrtemp["alarm"]="ALARM"; } if (preg_match_all("/\(([^\)]+\s+=\s+[^\)]+)\)/", $data[2], $tmp2)) foreach ($tmp2[1] as $tmp3) { $arrtmp3 = preg_split('/,/', $tmp3); foreach ($arrtmp3 as $tmp4) if (preg_match("/^(\S+)\s+=\s+(.*)$/", trim($tmp4), $tmp5)) { $arrtemp[$tmp5[1]]=trim($tmp5[2]); } } } else { $arrtemp["value"] = trim($data[2]); } $tmpvalue[] = $arrtemp; } } } if (sizeof($tmpvalue)>0) $this->_values[] = $tmpvalue; } } /** * get temperature information * * @return void */ private function _temperature() { foreach ($this->_values as $sensors) foreach ($sensors as $sensor){ if (isset($sensor["value"])) { $limit = ""; if (preg_match("/^\+?(-?[\d\.]+)[^\w\r\n\t]+C$/", $sensor["value"], $tmpbuf) || ((isset($sensor[$limit="crit"]) || isset($sensor[$limit="high"]) || isset($sensor[$limit="hyst"])) && preg_match("/^\+?(-?[\d\.]+)[^\w\r\n\t]+C$/", $sensor[$limit]))) { $dev = new SensorDevice(); $dev->setName($sensor["name"]); if ($limit != "") { $dev->setValue($sensor["value"]); $dev->setEvent("FAULT"); } else { if ($tmpbuf[1] == -110.8) { $dev->setValue("FAULT"); $dev->setEvent("FAULT"); } else { $dev->setValue(floatval($tmpbuf[1])); if (isset($sensor["alarm"])) $dev->setEvent("ALARM"); } } if (isset($sensor[$limit="crit"]) && preg_match("/^\+?(-?[\d\.]+)[^\w\r\n\t]+C$/", $sensor[$limit], $tmpbuf) && (($tmpbuf[1]=floatval($tmpbuf[1])) > 0)) { $dev->setMax(floatval($tmpbuf[1])); } elseif (isset($sensor[$limit="high"]) && preg_match("/^\+?(-?[\d\.]+)[^\w\r\n\t]+C$/", $sensor[$limit], $tmpbuf) && (($tmpbuf[1]=floatval($tmpbuf[1])) > 0) && ($tmpbuf[1]<65261.8)) { $dev->setMax(floatval($tmpbuf[1])); } $this->mbinfo->setMbTemp($dev); } } } } /** * get fan information * * @return void */ private function _fans() { foreach ($this->_values as $sensors) foreach ($sensors as $sensor){ if (isset($sensor["value"])) { $limit = ""; if (preg_match("/^(\d+) RPM$/", $sensor["value"], $tmpbuf) || ((isset($sensor[$limit="min"]) || isset($sensor[$limit="max"])) && preg_match("/^(\d+) RPM$/", $sensor[$limit]))) { $dev = new SensorDevice(); $dev->setName($sensor["name"]); if ($limit != "") { $dev->setValue($sensor["value"]); $dev->setEvent("FAULT"); } else { $dev->setValue($tmpbuf[1]); } if (isset($sensor["alarm"])) $dev->setEvent("ALARM"); if (isset($sensor[$limit="min"]) && preg_match("/^(\d+) RPM$/", $sensor[$limit], $tmpbuf) && ($tmpbuf[1] > 0)) { $dev->setMin($tmpbuf[1]); } $this->mbinfo->setMbFan($dev); } } } } /** * get voltage information * * @return void */ private function _voltage() { foreach ($this->_values as $sensors) foreach ($sensors as $sensor){ if (isset($sensor["value"])) { $limit = ""; if (preg_match("/^\+?(-?[\d\.]+) (m?)V$/", $sensor["value"], $tmpbuf) || ((isset($sensor[$limit="min"]) || isset($sensor[$limit="max"])) && preg_match("/^\+?(-?[\d\.]+) (m?)V$/", $sensor[$limit]))) { $dev = new SensorDevice(); $dev->setName($sensor["name"]); if ($limit != "") { $dev->setValue($sensor["value"]); $dev->setEvent("FAULT"); } else { if ($tmpbuf[2] == "m") { $dev->setValue(floatval($tmpbuf[1])/1000); } else { $dev->setValue(floatval($tmpbuf[1])); } } if (isset($sensor["alarm"])) $dev->setEvent("ALARM"); if (isset($sensor[$limit="min"]) && preg_match("/^\+?(-?[\d\.]+) (m?)V$/", $sensor[$limit], $tmpbuf)) { $dev->setMin(floatval($tmpbuf[1])); } if (isset($sensor[$limit="max"]) && preg_match("/^\+?(-?[\d\.]+) (m?)V$/", $sensor[$limit], $tmpbuf)) { $dev->setMax(floatval($tmpbuf[1])); } $this->mbinfo->setMbVolt($dev); } } } } /** * get power information * * @return void */ private function _power() { foreach ($this->_values as $sensors) foreach ($sensors as $sensor){ if (isset($sensor["value"])) { $limit = ""; if (preg_match("/^\+?(-?[\d\.]+) W$/", $sensor["value"], $tmpbuf) || (isset($sensor[$limit="crit"]) && preg_match("/^\+?(-?[\d\.]+) W$/", $sensor[$limit]))) { $dev = new SensorDevice(); $dev->setName($sensor["name"]); if ($limit != "") { $dev->setValue($sensor["value"]); $dev->setEvent("FAULT"); } else { $dev->setValue(floatval($tmpbuf[1])); } if (isset($sensor["alarm"])) $dev->setEvent("ALARM"); if (isset($sensor[$limit="crit"]) && preg_match("/^\+?(-?[\d\.]+) W$/", $sensor[$limit], $tmpbuf)) { $dev->setMax(floatval($tmpbuf[1])); } $this->mbinfo->setMbPower($dev); } } } } /** * get current information * * @return void */ private function _current() { foreach ($this->_values as $sensors) foreach ($sensors as $sensor){ if (isset($sensor["value"])) { $limit = ""; if (preg_match("/^\+?(-?[\d\.]+) A$/", $sensor["value"], $tmpbuf) || (isset($sensor[$limit="crit"]) && preg_match("/^\+?(-?[\d\.]+) A$/", $sensor[$limit]))) { $dev = new SensorDevice(); $dev->setName($sensor["name"]); if ($limit != "") { $dev->setValue($sensor["value"]); $dev->setEvent("FAULT"); } else { $dev->setValue(floatval($tmpbuf[1])); } if (isset($sensor["alarm"])) $dev->setEvent("ALARM"); if (isset($sensor[$limit="min"]) && preg_match("/^\+?(-?[\d\.]+) A$/", $sensor[$limit], $tmpbuf)) { $dev->setMin(floatval($tmpbuf[1])); } if (isset($sensor[$limit="max"]) && preg_match("/^\+?(-?[\d\.]+) A$/", $sensor[$limit], $tmpbuf)) { $dev->setMax(floatval($tmpbuf[1])); } $this->mbinfo->setMbCurrent($dev); } } } } /** * get other information * * @return void */ private function _other() { foreach ($this->_values as $sensors) foreach ($sensors as $sensor){ if (isset($sensor["value"])) { if ((preg_match("/^[^\-\+\d]/", $sensor["value"]) || preg_match("/^\d+$/", $sensor["value"])) && ($sensor["value"] !== 'failed') && !isset($sensor[$limit="min"]) && !isset($sensor[$limit="max"]) && !isset($sensor[$limit="crit"]) && !isset($sensor[$limit="high"]) && !isset($sensor[$limit="hyst"])) { $dev = new SensorDevice(); $dev->setName($sensor["name"]); $dev->setValue($sensor["value"]); if (isset($sensor["alarm"])) $dev->setEvent("ALARM"); $this->mbinfo->setMbOther($dev); } } } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $this->_temperature(); $this->_fans(); $this->_voltage(); $this->_power(); $this->_current(); $this->_other(); } } phpsysinfo-3.4.4/includes/mb/class.mbm5.inc.php000066400000000000000000000065231467431054600213750ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class MBM5 extends Sensors { /** * array with the names of the labels * * @var array */ private $_buf_label = array(); /** * array withe the values * * @var array */ private $_buf_value = array(); /** * read the MBM5.csv file and fill the private arrays */ public function __construct() { parent::__construct(); if ((PSI_OS == 'WINNT') && !defined('PSI_EMU_HOSTNAME')) { $delim = "/;/"; CommonFunctions::rftsdata("MBM5.csv", $buffer); if (strpos($buffer, ";") === false) { $delim = "/,/"; } $buffer = preg_split("/\n/", $buffer, -1, PREG_SPLIT_NO_EMPTY); $this->_buf_label = preg_split($delim, substr($buffer[0], 0, -2), -1, PREG_SPLIT_NO_EMPTY); $this->_buf_value = preg_split($delim, substr($buffer[1], 0, -2), -1, PREG_SPLIT_NO_EMPTY); } } /** * get temperature information * * @return void */ private function _temperature() { for ($intPosi = 3; $intPosi < 6; $intPosi++) { if ($this->_buf_value[$intPosi] == 0) { continue; } preg_match("/([0-9\.])*/", str_replace(",", ".", $this->_buf_value[$intPosi]), $hits); $dev = new SensorDevice(); $dev->setName($this->_buf_label[$intPosi]); $dev->setValue($hits[0]); // $dev->setMax(70); $this->mbinfo->setMbTemp($dev); } } /** * get fan information * * @return void */ private function _fans() { for ($intPosi = 13; $intPosi < 16; $intPosi++) { if (!isset($this->_buf_value[$intPosi])) { continue; } preg_match("/([0-9\.])*/", str_replace(",", ".", $this->_buf_value[$intPosi]), $hits); $dev = new SensorDevice(); $dev->setName($this->_buf_label[$intPosi]); $dev->setValue($hits[0]); // $dev->setMin(3000); $this->mbinfo->setMbFan($dev); } } /** * get voltage information * * @return void */ private function _voltage() { for ($intPosi = 6; $intPosi < 13; $intPosi++) { if ($this->_buf_value[$intPosi] == 0) { continue; } preg_match("/([0-9\.])*/", str_replace(",", ".", $this->_buf_value[$intPosi]), $hits); $dev = new SensorDevice(); $dev->setName($this->_buf_label[$intPosi]); $dev->setValue($hits[0]); $this->mbinfo->setMbVolt($dev); } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $this->_fans(); $this->_temperature(); $this->_voltage(); } } phpsysinfo-3.4.4/includes/mb/class.mbmon.inc.php000066400000000000000000000074451467431054600216510ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class MBMon extends Sensors { /** * content to parse * * @var array */ private $_lines = array(); /** * fill the private content var through tcp, command or data access */ public function __construct() { parent::__construct(); if ((PSI_OS != 'WINNT') && (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT'))) switch (defined('PSI_SENSOR_MBMON_ACCESS')?strtolower(PSI_SENSOR_MBMON_ACCESS):'command') { case 'tcp': $fp = fsockopen(defined('PSI_EMU_HOSTNAME')?PSI_EMU_HOSTNAME:'localhost', 411, $errno, $errstr, 5); if ($fp) { $lines = ""; while (!feof($fp)) { $lines .= fread($fp, 1024); } $this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); } else { $this->error->addError("fsockopen()", $errno." ".$errstr); } break; case 'command': CommonFunctions::executeProgram('mbmon', '-c 1 -r', $lines, PSI_DEBUG); $this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); break; case 'data': if (!defined('PSI_EMU_PORT') && CommonFunctions::rftsdata('mbmon.tmp', $lines)) { $this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); } break; default: $this->error->addConfigError('__construct()', '[sensor_mbmon] ACCESS'); } } /** * get temperature information * * @return void */ private function _temperature() { foreach ($this->_lines as $line) { if (preg_match('/^(TEMP\d*)\s*:\s*(.*)$/D', $line, $data)) { if ($data[2] <> '0') { $dev = new SensorDevice(); $dev->setName($data[1]); // $dev->setMax(70); if ($data[2] < 250) { $dev->setValue($data[2]); } $this->mbinfo->setMbTemp($dev); } } } } /** * get fan information * * @return void */ private function _fans() { foreach ($this->_lines as $line) { if (preg_match('/^(FAN\d*)\s*:\s*(.*)$/D', $line, $data)) { if ($data[2] <> '0') { $dev = new SensorDevice(); $dev->setName($data[1]); $dev->setValue($data[2]); // $dev->setMax(3000); $this->mbinfo->setMbFan($dev); } } } } /** * get voltage information * * @return void */ private function _voltage() { foreach ($this->_lines as $line) { if (preg_match('/^(V.*)\s*:\s*(.*)$/D', $line, $data)) { if ($data[2] <> '+0.00') { $dev = new SensorDevice(); $dev->setName($data[1]); $dev->setValue($data[2]); $this->mbinfo->setMbVolt($dev); } } } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $this->_temperature(); $this->_voltage(); $this->_fans(); } } phpsysinfo-3.4.4/includes/mb/class.nvidiasmi.inc.php000066400000000000000000000134421467431054600225160ustar00rootroot00000000000000 * @copyright 2020 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class NvidiaSMI extends Sensors { /** * content to parse * * @var array */ private $_gpus = array(); /** * fill the private array */ public function __construct() { parent::__construct(); if (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT')) switch (defined('PSI_SENSOR_NVIDIASMI_ACCESS')?strtolower(PSI_SENSOR_NVIDIASMI_ACCESS):'command') { case 'command': if (PSI_OS == 'WINNT') { $winnt_exe = (defined('PSI_SENSOR_NVIDIASMI_EXE_PATH') && is_string(PSI_SENSOR_NVIDIASMI_EXE_PATH))?strtolower(PSI_SENSOR_NVIDIASMI_EXE_PATH):"c:\\Program Files\\NVIDIA Corporation\\NVSMI\\nvidia-smi.exe"; if (($_exe=realpath(trim($winnt_exe))) && preg_match("/^([a-zA-Z]:\\\\[^\\\\]+)/", $_exe, $out)) { CommonFunctions::executeProgram('cmd', "/c set ProgramFiles=".$out[1]."^&\"".$_exe."\" -q", $lines); } else { $this->error->addConfigError('__construct()', '[sensor_nvidiasmi] EXE_PATH="'.$winnt_exe.'"'); } } else { CommonFunctions::executeProgram('nvidia-smi', '-q', $lines); } $this->_gpus = preg_split("/^(?=GPU )/m", $lines, -1, PREG_SPLIT_NO_EMPTY); break; case 'data': if (!defined('PSI_EMU_PORT') && CommonFunctions::rftsdata('nvidiasmi.tmp', $lines)) { $this->_gpus = preg_split("/^(?=GPU )/m", $lines, -1, PREG_SPLIT_NO_EMPTY); } break; default: $this->error->addConfigError('__construct()', '[sensor_nvidiasmi] ACCESS'); } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $gpuc=count($this->_gpus); switch ($gpuc) { case 0: $this->error->addError("nvidia-smi", "No values"); break; case 1: $this->error->addError("nvidia-smi", "Error: ".$this->_gpus[0]); break; default: for ($c = 0; $c < $gpuc; $c++) { if (preg_match("/^\s+GPU Current Temp\s+:\s*(\d+)\s*C\s*$/m", $this->_gpus[$c], $out)) { $dev = new SensorDevice(); $dev->setName("GPU ".($c)." (nvidiasmi)"); $dev->setValue($out[1]); if (preg_match("/^\s+GPU Shutdown Temp\s+:\s*(\d+)\s*C\s*$/m", $this->_gpus[$c], $out)) { $dev->setMax($out[1]); } $this->mbinfo->setMbTemp($dev); } if (preg_match("/^\s+Power Draw\s+:\s*([\d\.]+)\s*W\s*$/m", $this->_gpus[$c], $out)) { $dev = new SensorDevice(); $dev->setName("GPU ".($c)." (nvidiasmi)"); $dev->setValue($out[1]); if (preg_match("/^\s+Power Limit\s+:\s*([\d\.]+)\s*W\s*$/m", $this->_gpus[$c], $out)) { $dev->setMax($out[1]); } $this->mbinfo->setMbPower($dev); } if (preg_match("/^\s+Fan Speed\s+:\s*(\d+)\s*%\s*$/m", $this->_gpus[$c], $out)) { $dev = new SensorDevice(); $dev->setName("GPU ".($c)." (nvidiasmi)"); $dev->setValue($out[1]); $dev->setUnit("%"); $this->mbinfo->setMbFan($dev); } if (preg_match("/^\s+Performance State\s+:\s*(\S+)\s*$/m", $this->_gpus[$c], $out)) { $dev = new SensorDevice(); $dev->setName("GPU ".($c)." Performance State (nvidiasmi)"); $dev->setValue($out[1]); $this->mbinfo->setMbOther($dev); } if (preg_match("/^\s+Gpu\s+:\s*(\d+)\s*%\s*$/m", $this->_gpus[$c], $out)) { $dev = new SensorDevice(); $dev->setName("GPU ".($c)." Utilization (nvidiasmi)"); $dev->setValue($out[1]); $dev->setUnit("%"); $this->mbinfo->setMbOther($dev); } if (preg_match("/^\s+Memory\s+:\s*(\d+)\s*%\s*$/m", $this->_gpus[$c], $out)) { $dev = new SensorDevice(); $dev->setName("GPU ".($c)." Memory Utilization (nvidiasmi)"); $dev->setValue($out[1]); $dev->setUnit("%"); $this->mbinfo->setMbOther($dev); } if (preg_match("/^\s+Encoder\s+:\s*(\d+)\s*%\s*$/m", $this->_gpus[$c], $out)) { $dev = new SensorDevice(); $dev->setName("GPU ".($c)." Encoder Utilization (nvidiasmi)"); $dev->setValue($out[1]); $dev->setUnit("%"); $this->mbinfo->setMbOther($dev); } if (preg_match("/^\s+Decoder\s+:\s*(\d+)\s*%\s*$/m", $this->_gpus[$c], $out)) { $dev = new SensorDevice(); $dev->setName("GPU ".($c)." Decoder Utilization (nvidiasmi)"); $dev->setValue($out[1]); $dev->setUnit("%"); $this->mbinfo->setMbOther($dev); } } } } } phpsysinfo-3.4.4/includes/mb/class.ohm.inc.php000066400000000000000000000062421467431054600213160ustar00rootroot00000000000000 * @copyright 2014 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class OHM extends Sensors { /** * holds the COM object that we pull all the WMI data from * * @var Object */ private $_buf = array(); /** * fill the private content var */ public function __construct() { parent::__construct(); if ((PSI_OS == 'WINNT') || (defined('PSI_EMU_HOSTNAME') && !defined('PSI_EMU_PORT'))) { $_wmi = WINNT::initWMI('root\OpenHardwareMonitor', true); if ($_wmi) { $tmpbuf = WINNT::getWMI($_wmi, 'Sensor', array('Parent', 'Name', 'SensorType', 'Value')); if ($tmpbuf) foreach ($tmpbuf as $buffer) { if (!isset($this->_buf[$buffer['SensorType']]) || !isset($this->_buf[$buffer['SensorType']][$buffer['Parent'].' '.$buffer['Name']])) { // avoid duplicates $this->_buf[$buffer['SensorType']][$buffer['Parent'].' '.$buffer['Name']] = $buffer['Value']; } } } } } /** * get temperature information * * @return void */ private function _temperature() { if (isset($this->_buf['Temperature'])) foreach ($this->_buf['Temperature'] as $name=>$value) { $dev = new SensorDevice(); $dev->setName($name); $dev->setValue($value); $this->mbinfo->setMbTemp($dev); } } /** * get voltage information * * @return void */ private function _voltage() { if (isset($this->_buf['Voltage'])) foreach ($this->_buf['Voltage'] as $name=>$value) { $dev = new SensorDevice(); $dev->setName($name); $dev->setValue($value); $this->mbinfo->setMbVolt($dev); } } /** * get fan information * * @return void */ private function _fans() { if (isset($this->_buf['Fan'])) foreach ($this->_buf['Fan'] as $name=>$value) { $dev = new SensorDevice(); $dev->setName($name); $dev->setValue($value); $this->mbinfo->setMbFan($dev); } } /** * get power information * * @return void */ private function _power() { if (isset($this->_buf['Power'])) foreach ($this->_buf['Power'] as $name=>$value) { $dev = new SensorDevice(); $dev->setName($name); $dev->setValue($value); $this->mbinfo->setMbPower($dev); } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $this->_temperature(); $this->_voltage(); $this->_fans(); $this->_power(); } } phpsysinfo-3.4.4/includes/mb/class.pitemp.inc.php000066400000000000000000000046161467431054600220340ustar00rootroot00000000000000 * @copyright 2012 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class PiTemp extends Sensors { private function _temperature() { $temp = null; $temp_max = null; if (!CommonFunctions::rfts('/sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034/temp1_input', $temp, 1, 4096, false)) { // Not Banana Pi CommonFunctions::rfts('/sys/class/thermal/thermal_zone0/temp', $temp, 1); CommonFunctions::rfts('/sys/class/thermal/thermal_zone0/trip_point_0_temp', $temp_max, 1, 4096, PSI_DEBUG); } if (($temp !== null) && (($temp = trim($temp)) != "")) { $dev = new SensorDevice(); $dev->setName("CPU 1"); $dev->setValue($temp / 1000); if (($temp_max !== null) && (($temp_max = trim($temp_max)) != "") && ($temp_max > 0)) { $dev->setMax($temp_max / 1000); } $this->mbinfo->setMbTemp($dev); } } private function _voltage() { $volt = null; if (CommonFunctions::rfts('/sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034/axp20-supplyer.28/power_supply/ac/voltage_now', $volt, 1, 4096, false) && ($volt !== null) && (($volt = trim($volt)) != "")) { // Banana Pi $dev = new SensorDevice(); $dev->setName("Voltage 1"); $dev->setValue($volt / 1000000); $this->mbinfo->setMbVolt($dev); } } private function _current() { $current = null; if (CommonFunctions::rfts('/sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034/axp20-supplyer.28/power_supply/ac/current_now', $current, 1, 4096, false) && ($current !== null) && (($current = trim($current)) != "")) { // Banana Pi $dev = new SensorDevice(); $dev->setName("Current 1"); $dev->setValue($current / 1000000); $this->mbinfo->setMbCurrent($dev); } } public function build() { if ((PSI_OS == 'Linux') && !defined('PSI_EMU_HOSTNAME')) { $this->_temperature(); $this->_voltage(); $this->_current(); } } } phpsysinfo-3.4.4/includes/mb/class.qtssnmp.inc.php000066400000000000000000000064651467431054600222470ustar00rootroot00000000000000 * @copyright 2016 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class QTSsnmp extends Sensors { /** * get temperature information * * @return void */ private function _temperature() { if (!defined('PSI_EMU_PORT')) { $address = '127.0.0.1'; } else { $address = PSI_EMU_HOSTNAME; } if (CommonFunctions::executeProgram("snmpwalk", "-Ona -c public -v 1 -t ".PSI_SNMP_TIMEOUT_INT." -r ".PSI_SNMP_RETRY_INT." ".$address." .1.3.6.1.4.1.24681.1.2.5.0", $buffer, PSI_DEBUG) && preg_match('/^[\.\d]+ = STRING:\s\"?(\d+)\sC/', $buffer, $data)) { $dev = new SensorDevice(); $dev->setName("CPU"); $dev->setValue($data[1]); $this->mbinfo->setMbTemp($dev); } if (CommonFunctions::executeProgram("snmpwalk", "-Ona -c public -v 1 -t ".PSI_SNMP_TIMEOUT_INT." -r ".PSI_SNMP_RETRY_INT." ".$address." .1.3.6.1.4.1.24681.1.2.6.0", $buffer, PSI_DEBUG) && preg_match('/^[\.\d]+ = STRING:\s\"?(\d+)\sC/', $buffer, $data)) { $dev = new SensorDevice(); $dev->setName("System"); $dev->setValue($data[1]); $this->mbinfo->setMbTemp($dev); } if (CommonFunctions::executeProgram("snmpwalk", "-Ona -c public -v 1 -t ".PSI_SNMP_TIMEOUT_INT." -r ".PSI_SNMP_RETRY_INT." ".$address." .1.3.6.1.4.1.24681.1.2.11.1.3", $buffer, PSI_DEBUG)) { $lines = preg_split('/\r?\n/', $buffer); foreach ($lines as $line) if (preg_match('/^[\.\d]+\.(\d+) = STRING:\s\"?(\d+)\sC/', $line, $data)) { $dev = new SensorDevice(); $dev->setName("HDD ".$data[1]); $dev->setValue($data[2]); $this->mbinfo->setMbTemp($dev); } } } /** * get fan information * * @return void */ private function _fans() { if (!defined('PSI_EMU_PORT')) { $address = '127.0.0.1'; } else { $address = PSI_EMU_HOSTNAME; } if (CommonFunctions::executeProgram("snmpwalk", "-Ona -c public -v 1 -t ".PSI_SNMP_TIMEOUT_INT." -r ".PSI_SNMP_RETRY_INT." ".$address." .1.3.6.1.4.1.24681.1.2.15.1.3", $buffer, PSI_DEBUG)) { $lines = preg_split('/\r?\n/', $buffer); foreach ($lines as $line) if (preg_match('/^[\.\d]+\.(\d+) = STRING:\s\"?(\d+)\sRPM/', $line, $data)) { $dev = new SensorDevice(); $dev->setName("Fan ".$data[1]); $dev->setValue($data[2]); $this->mbinfo->setMbFan($dev); } } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { if ((PSI_OS == 'Linux') && (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT'))) { $this->_temperature(); $this->_fans(); } } } phpsysinfo-3.4.4/includes/mb/class.sensors.inc.php000066400000000000000000000030561467431054600222270ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.sensors.inc.php 661 2012-08-27 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * Basic OS functions for all OS classes * * @category PHP * @package PSI sensors class * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ abstract class Sensors implements PSI_Interface_Sensor { /** * object for error handling * * @var PSI_Error */ protected $error; /** * object for the information * * @var MBInfo */ protected $mbinfo; /** * build the global Error object */ public function __construct() { $this->error = PSI_Error::singleton(); $this->mbinfo = new MBInfo(); } /** * get the filled or unfilled (with default values) MBInfo object * * @see PSI_Interface_Sensor::getMBInfo() * * @return MBInfo */ final public function getMBInfo() { $this->build(); return $this->mbinfo; } } phpsysinfo-3.4.4/includes/mb/class.speedfan.inc.php000066400000000000000000000077241467431054600223260ustar00rootroot00000000000000 * @copyright 2016 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class SpeedFan extends Sensors { /* * variable, which holds the content of the command * @var array */ private $_filecontent = array(); public function __construct() { parent::__construct(); if ((PSI_OS == 'WINNT') && !defined('PSI_EMU_HOSTNAME')) switch (defined('PSI_SENSOR_SPEEDFAN_ACCESS')?strtolower(PSI_SENSOR_SPEEDFAN_ACCESS):'command') { case 'command': if (CommonFunctions::executeProgram("SpeedFanGet.exe", "", $buffer, PSI_DEBUG) && (strlen($buffer) > 0)) { if (preg_match("/^Temperatures:\s+(.+)$/m", $buffer, $out)) { $this->_filecontent["temp"] = $out[1]; } if (preg_match("/^Fans:\s+(.+)$/m", $buffer, $out)) { $this->_filecontent["fans"] = $out[1]; } if (preg_match("/^Voltages:\s+(.+)$/m", $buffer, $out)) { $this->_filecontent["volt"] = $out[1]; } } break; case 'data': if (CommonFunctions::rftsdata('speedfan.tmp', $buffer) && (strlen($buffer) > 0)) { if (preg_match("/^Temperatures:\s+(.+)$/m", $buffer, $out)) { $this->_filecontent["temp"] = $out[1]; } if (preg_match("/^Fans:\s+(.+)$/m", $buffer, $out)) { $this->_filecontent["fans"] = $out[1]; } if (preg_match("/^Voltages:\s+(.+)$/m", $buffer, $out)) { $this->_filecontent["volt"] = $out[1]; } } break; default: $this->error->addConfigError('__construct()', '[sensor_speedfan] ACCESS'); } } /** * get temperature information * * @return void */ private function _temperature() { if (isset($this->_filecontent["temp"]) && (trim($this->_filecontent["temp"]) !== "")) { $values = preg_split("/ /", trim($this->_filecontent["temp"])); foreach ($values as $id=>$value) { $dev = new SensorDevice(); $dev->setName("temp".$id); $dev->setValue($value); $this->mbinfo->setMbTemp($dev); } } } /** * get fan information * * @return void */ private function _fans() { if (isset($this->_filecontent["fans"]) && (trim($this->_filecontent["fans"]) !== "")) { $values = preg_split("/ /", trim($this->_filecontent["fans"])); foreach ($values as $id=>$value) { $dev = new SensorDevice(); $dev->setName("fan".$id); $dev->setValue($value); $this->mbinfo->setMbFan($dev); } } } /** * get voltage information * * @return void */ private function _voltage() { if (isset($this->_filecontent["volt"]) && (trim($this->_filecontent["volt"]) !== "")) { $values = preg_split("/ /", trim($this->_filecontent["volt"])); foreach ($values as $id=>$value) { $dev = new SensorDevice(); $dev->setName("in".$id); $dev->setValue($value); $this->mbinfo->setMbVolt($dev); } } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $this->_temperature(); $this->_fans(); $this->_voltage(); } } phpsysinfo-3.4.4/includes/mb/class.thermalzone.inc.php000066400000000000000000000201741467431054600230630ustar00rootroot00000000000000 * @copyright 2014 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class ThermalZone extends Sensors { /** * holds the COM object that we pull all the WMI data from * * @var Object */ private $_buf = array(); /** * fill the private content var */ public function __construct() { parent::__construct(); switch (defined('PSI_SENSOR_THERMALZONE_ACCESS')?strtolower(PSI_SENSOR_THERMALZONE_ACCESS):'command') { case 'command': if ((PSI_OS == 'WINNT') || (defined('PSI_EMU_HOSTNAME') && !defined('PSI_EMU_PORT'))) { if (defined('PSI_EMU_HOSTNAME') || WINNT::isAdmin()) { $_wmi = WINNT::initWMI('root\WMI', true); if ($_wmi) { $this->_buf = WINNT::getWMI($_wmi, 'MSAcpi_ThermalZoneTemperature', array('InstanceName', 'CriticalTripPoint', 'CurrentTemperature')); } } else { $_wmi = WINNT::getcimv2wmi(); if ($_wmi) { $this->_buf = WINNT::getWMI($_wmi, 'Win32_PerfFormattedData_Counters_ThermalZoneInformation', array('Name', 'HighPrecisionTemperature', 'Temperature')); } if (!$this->_buf || PSI_DEBUG) { $this->error->addError("Error reading data from thermalzone sensor", "Allowed only for systems with administrator privileges (run as administrator)"); } } } break; case 'data': if (!defined('PSI_EMU_HOSTNAME') && CommonFunctions::rftsdata('thermalzone.tmp', $lines)) { //output of "wmic /namespace:\\root\wmi PATH MSAcpi_ThermalZoneTemperature get CriticalTripPoint,CurrentTemperature,InstanceName" $lines = trim(preg_replace('/[\x00-\x09\x0b-\x1F]/', '', $lines)); $lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); if ((($clines=count($lines)) > 1) && preg_match("/CriticalTripPoint\s+CurrentTemperature\s+InstanceName/i", $lines[0])) for ($i = 1; $i < $clines; $i++) { $values = preg_split("/\s+/", trim($lines[$i]), -1, PREG_SPLIT_NO_EMPTY); if (count($values)==3) { $this->_buf[] = array('CriticalTripPoint'=>trim($values[0]), 'CurrentTemperature'=>trim($values[1]), 'InstanceName'=>trim($values[2])); } } } break; default: $this->error->addConfigError('__construct()', '[sensor_thermalzone] ACCESS'); } } /** * get temperature information * * @return void */ private function _temperature() { $mode = defined('PSI_SENSOR_THERMALZONE_ACCESS')?strtolower(PSI_SENSOR_THERMALZONE_ACCESS):'command'; if ((($mode == 'command') && ((PSI_OS == 'WINNT') || defined('PSI_EMU_HOSTNAME'))) || (($mode == 'data') && !defined('PSI_EMU_HOSTNAME'))) { if ($this->_buf) foreach ($this->_buf as $buffer) { if (isset($buffer['CurrentTemperature']) && (($value = ($buffer['CurrentTemperature'] - 2732)/10) > -100)) { $dev = new SensorDevice(); if (isset($buffer['InstanceName']) && preg_match("/([^\\\\ ]+)$/", $buffer['InstanceName'], $outbuf)) { $dev->setName('ThermalZone '.$outbuf[1]); } else { $dev->setName('ThermalZone THM0_0'); } $dev->setValue($value); if (isset($buffer['CriticalTripPoint']) && (($maxvalue = ($buffer['CriticalTripPoint'] - 2732)/10) > 0)) { $dev->setMax($maxvalue); } $this->mbinfo->setMbTemp($dev); } else { if ((isset($buffer['HighPrecisionTemperature']) && (($value = ($buffer['HighPrecisionTemperature'] - 2732)/10) > -100)) || (isset($buffer['Temperature']) && (($value = ($buffer['Temperature'] - 273)) > -100))) { $dev = new SensorDevice(); if (isset($buffer['Name']) && preg_match("/([^\\\\\. ]+)$/", $buffer['Name'], $outbuf)) { $dev->setName('ThermalZone '.$outbuf[1]); } else { $dev->setName('ThermalZone THM0'); } $dev->setValue($value); $this->mbinfo->setMbTemp($dev); } } } } elseif (($mode == 'command') && (PSI_OS != 'WINNT') && !defined('PSI_EMU_HOSTNAME')) { $notwas = true; $thermalzones = CommonFunctions::findglob('/sys/class/thermal/thermal_zone*/'); if (is_array($thermalzones) && (count($thermalzones) > 0)) foreach ($thermalzones as $thermalzone) { $thermalzonetemp = $thermalzone.'temp'; $temp = null; if (CommonFunctions::rfts($thermalzonetemp, $temp, 1, 4096, false) && ($temp !== null) && (($temp = trim($temp)) != "")) { if ($temp >= 1000) { $div = 1000; } elseif ($temp >= 200) { $div = 10; } else { $div = 1; } $temp = $temp / $div; if ($temp > -40) { $dev = new SensorDevice(); $dev->setValue($temp); $temp_type = null; if (CommonFunctions::rfts($thermalzone.'type', $temp_type, 1, 4096, false) && ($temp_type !== null) && (($temp_type = trim($temp_type)) != "")) { $dev->setName($temp_type); } else { $dev->setName("ThermalZone"); } $temp_max = null; if (CommonFunctions::rfts($thermalzone.'trip_point_0_temp', $temp_max, 1, 4096, false) && ($temp_max !== null) && (($temp_max = trim($temp_max)) != "") && ($temp_max > -40)) { $temp_max = $temp_max / $div; if (($temp_max != 0) || ($temp != 0)) { // if non-zero values $dev->setMax($temp_max); $this->mbinfo->setMbTemp($dev); } } else { $this->mbinfo->setMbTemp($dev); } $notwas = false; } } } if ($notwas) { $thermalzones = (PSI_ROOT_FILESYSTEM.'/proc/acpi/thermal_zone/TH*/temperature'); if (is_array($thermalzones) && (count($thermalzones) > 0)) foreach ($thermalzones as $thermalzone) { $temp = null; if (CommonFunctions::rfts($thermalzone, $temp, 1, 4096, false) && ($temp !== null) && (($temp = trim($temp)) != "")) { $dev = new SensorDevice(); if (preg_match("/^\/proc\/acpi\/thermal_zone\/(.+)\/temperature$/", $thermalzone, $name)) { $dev->setName("ThermalZone ".$name[1]); } else { $dev->setName("ThermalZone"); } $dev->setValue(trim(substr($temp, 23, 4))); $this->mbinfo->setMbTemp($dev); } } } } } /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { $this->_temperature(); } } phpsysinfo-3.4.4/includes/mb/class.thinkpad.inc.php000066400000000000000000000026471467431054600223420ustar00rootroot00000000000000 * @copyright 2017 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Thinkpad extends Hwmon { /** * get the information * * @see PSI_Interface_Sensor::build() * * @return void */ public function build() { if ((PSI_OS == 'Linux') && !defined('PSI_EMU_HOSTNAME')) { $hwpaths = CommonFunctions::findglob("/sys/devices/platform/thinkpad_hwmon/", GLOB_NOSORT); if (is_array($hwpaths) && (count($hwpaths) == 1)) { $hwpaths2 = CommonFunctions::findglob("/sys/devices/platform/thinkpad_hwmon/hwmon/hwmon*/", GLOB_NOSORT); if (is_array($hwpaths2) && (count($hwpaths2) > 0)) { $hwpaths = array_merge($hwpaths, $hwpaths2); } $totalh = count($hwpaths); for ($h = 0; $h < $totalh; $h++) { $this->_temperature($hwpaths[$h]); $this->_fans($hwpaths[$h]); } } } } } phpsysinfo-3.4.4/includes/os/000077500000000000000000000000001467431054600161655ustar00rootroot00000000000000phpsysinfo-3.4.4/includes/os/class.AIX.inc.php000066400000000000000000000263061467431054600212020ustar00rootroot00000000000000 * @copyright 2011 Krzysztof Paz * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.AIX.inc.php 287 2009-06-26 12:11:59Z Krzysztof Paz, IBM POLSKA * @link http://phpsysinfo.sourceforge.net */ /** * IBM AIX sysinfo class * get all the required information from IBM AIX system * * @category PHP * @package PSI AIX OS class * @author Krzysztof Paz (kpaz@gazeta.pl) based on Michael Cramer * @copyright 2011 Krzysztof Paz * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class AIX extends OS { /** * uptime command result. */ private $_uptime = null; /** * prtconf command result. */ private $_aixdata = array(); /** * Virtual Host Name * @return void */ private function _hostname() { /* if (PSI_USE_VHOST) { if (CommonFunctions::readenv('SERVER_NAME', $hnm)) $this->sys->setHostname($hnm); } else { if (CommonFunctions::executeProgram('hostname', '', $ret)) { $this->sys->setHostname($ret); } } */ if (CommonFunctions::readenv('SERVER_NAME', $hnm)) $this->sys->setHostname($hnm); } /** * IBM AIX Version * @return void */ private function _kernel() { if (CommonFunctions::executeProgram('oslevel', '', $ret1) && CommonFunctions::executeProgram('oslevel', '-s', $ret2)) { $this->sys->setKernel($ret1 . ' (' . $ret2 . ')'); } } /** * UpTime * time the system is running * @return void */ private function _uptime() { if (($this->_uptime !== null) || CommonFunctions::executeProgram('uptime', '', $this->_uptime)) { if (preg_match("/up (\d+) day[s]?,\s*(\d+):(\d+),/", $this->_uptime, $ar_buf)) { $min = $ar_buf[3]; $hours = $ar_buf[2]; $days = $ar_buf[1]; $this->sys->setUptime($days * 86400 + $hours * 3600 + $min * 60); } } } /** * Processor Load * optionally create a loadbar * @return void */ private function _loadavg() { if (($this->_uptime !== null) || CommonFunctions::executeProgram('uptime', '', $this->_uptime)) { if (preg_match("/average: (.*), (.*), (.*)$/", $this->_uptime, $ar_buf)) { $this->sys->setLoad($ar_buf[1].' '.$ar_buf[2].' '.$ar_buf[3]); } } } /** * CPU information * All of the tags here are highly architecture dependant * @return void */ private function _cpuinfo() { $ncpu = 0; $tcpu = ""; $vcpu = ""; $ccpu = ""; $scpu = ""; foreach ($this->readaixdata() as $line) { if (preg_match("/^Number Of Processors:\s+(\d+)/", $line, $ar_buf)) { $ncpu = $ar_buf[1]; } if (preg_match("/^Processor Type:\s+(.+)/", $line, $ar_buf)) { $tcpu = $ar_buf[1]; } if (preg_match("/^Processor Version:\s+(.+)/", $line, $ar_buf)) { $vcpu = $ar_buf[1]; } if (preg_match("/^CPU Type:\s+(.+)/", $line, $ar_buf)) { $ccpu = $ar_buf[1]; } if (preg_match("/^Processor Clock Speed:\s+(\d+)\s/", $line, $ar_buf)) { $scpu = $ar_buf[1]; } } for ($i = 0; $i < $ncpu; $i++) { $dev = new CpuDevice(); if (trim($tcpu) != "") { $cpu = trim($tcpu); if (trim($vcpu) != "") $cpu .= " ".trim($vcpu); if (trim($ccpu) != "") $cpu .= " ".trim($ccpu); $dev->setModel($cpu); } if (trim($scpu) != "") { $dev->setCpuSpeed(trim($scpu)); } $this->sys->setCpus($dev); } } /** * PCI devices * @return void */ private function _pci() { foreach ($this->readaixdata() as $line) { if (preg_match("/^[\*\+]\s\S+\s+\S+\s+(.*PCI.*)/", $line, $ar_buf)) { $dev = new HWDevice(); $dev->setName(trim($ar_buf[1])); $this->sys->setPciDevices($dev); } } } /** * IDE devices * @return void */ private function _ide() { foreach ($this->readaixdata() as $line) { if (preg_match("/^[\*\+]\s\S+\s+\S+\s+(.*IDE.*)/", $line, $ar_buf)) { $dev = new HWDevice(); $dev->setName(trim($ar_buf[1])); $this->sys->setIdeDevices($dev); } } } /** * SCSI devices * @return void */ private function _scsi() { foreach ($this->readaixdata() as $line) { if (preg_match("/^[\*\+]\s\S+\s+\S+\s+(.*SCSI.*)/", $line, $ar_buf)) { $dev = new HWDevice(); $dev->setName(trim($ar_buf[1])); $this->sys->setScsiDevices($dev); } } } /** * USB devices * @return void */ private function _usb() { foreach ($this->readaixdata() as $line) { if (preg_match("/^[\*\+]\s\S+\s+\S+\s+(.*USB.*)/", $line, $ar_buf)) { $dev = new HWDevice(); $dev->setName(trim($ar_buf[1])); $this->sys->setUsbDevices($dev); } } } /** * Network devices * includes also rx/tx bytes * @return void */ private function _network() { if (CommonFunctions::executeProgram('netstat', '-ni | tail -n +2', $netstat)) { $lines = preg_split("/\n/", $netstat, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { $ar_buf = preg_split("/\s+/", $line); if (! empty($ar_buf[0]) && ! empty($ar_buf[3])) { $dev = new NetDevice(); $dev->setName($ar_buf[0]); $dev->setRxBytes($ar_buf[4]); $dev->setTxBytes($ar_buf[6]); $dev->setErrors($ar_buf[5] + $ar_buf[7]); //$dev->setDrops($ar_buf[8]); $this->sys->setNetDevices($dev); } } } } /** * Physical memory information and Swap Space information * @return void */ private function _memory() { $mems = ""; $tswap = ""; $pswap = ""; foreach ($this->readaixdata() as $line) { if (preg_match("/^Good Memory Size:\s+(\d+)\s+MB/", $line, $ar_buf)) { $mems = $ar_buf[1]; } if (preg_match("/^\s*Total Paging Space:\s+(\d+)MB/", $line, $ar_buf)) { $tswap = $ar_buf[1]; } if (preg_match("/^\s*Percent Used:\s+(\d+)%/", $line, $ar_buf)) { $pswap = $ar_buf[1]; } } if (trim($mems) != "") { $mems = $mems*1024*1024; $this->sys->setMemTotal($mems); $memu = 0; $memf = 0; if (CommonFunctions::executeProgram('svmon', '-G', $buf)) { if (preg_match("/^memory\s+\d+\s+(\d+)\s+/", $buf, $ar_buf)) { $memu = $ar_buf[1]*1024*4; $memf = $mems - $memu; } } $this->sys->setMemUsed($memu); $this->sys->setMemFree($memf); // $this->sys->setMemApplication($mems); // $this->sys->setMemBuffer($mems); // $this->sys->setMemCache($mems); } if (trim($tswap) != "") { $dev = new DiskDevice(); $dev->setName("SWAP"); $dev->setFsType('swap'); $dev->setTotal($tswap * 1024 * 1024); if (trim($pswap) != "") { $dev->setUsed($dev->getTotal() * $pswap / 100); } $dev->setFree($dev->getTotal() - $dev->getUsed()); $this->sys->setSwapDevices($dev); } } /** * filesystem information * * @return void */ private function _filesystems() { if (CommonFunctions::executeProgram('df', '-kP', $df, PSI_DEBUG)) { $mounts = preg_split("/\n/", $df, -1, PREG_SPLIT_NO_EMPTY); if (CommonFunctions::executeProgram('mount', '-v', $s, PSI_DEBUG)) { $lines = preg_split("/\n/", $s, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { $a = preg_split('/ /', $line, -1, PREG_SPLIT_NO_EMPTY); $fsdev[$a[0]] = $a[4]; } } foreach ($mounts as $mount) { $ar_buf = preg_split("/\s+/", $mount, 6); $dev = new DiskDevice(); $dev->setName($ar_buf[0]); $dev->setTotal($ar_buf[1] * 1024); $dev->setUsed($ar_buf[2] * 1024); $dev->setFree($ar_buf[3] * 1024); $dev->setMountPoint($ar_buf[5]); if (isset($fsdev[$ar_buf[0]])) { $dev->setFsType($fsdev[$ar_buf[0]]); } $this->sys->setDiskDevices($dev); } } } /** * Distribution * * @return void */ private function _distro() { $this->sys->setDistribution('IBM AIX'); $this->sys->setDistributionIcon('AIX.png'); } /** * IBM AIX informations by K.PAZ * @return array */ private function readaixdata() { if (count($this->_aixdata) === 0) { if (CommonFunctions::executeProgram('prtconf', '', $bufr)) { $this->_aixdata = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); } } return $this->_aixdata; } /** * get the information * * @see PSI_Interface_OS::build() * * @return void */ public function build() { $this->error->addWarning("The AIX version of phpSysInfo is a work in progress, some things currently don't work"); if (!$this->blockname || $this->blockname==='vitals') { $this->_distro(); $this->_hostname(); $this->_kernel(); $this->_uptime(); $this->_users(); $this->_loadavg(); } if (!$this->blockname || $this->blockname==='hardware') { $this->_cpuinfo(); $this->_pci(); $this->_ide(); $this->_scsi(); $this->_usb(); } if (!$this->blockname || $this->blockname==='memory') { $this->_memory(); } if (!$this->blockname || $this->blockname==='filesystem') { $this->_filesystems(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } } } phpsysinfo-3.4.4/includes/os/class.Android.inc.php000066400000000000000000000243411467431054600221360ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.Linux.inc.php 712 2012-12-05 14:09:18Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * Android sysinfo class * get all the required information from Android system * * @category PHP * @package PSI Android OS class * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Android extends Linux { /** * holds the data from /system/build.prop file * * @var string */ private $_buildprop = null; /** * reads the data from /system/build.prop file * * @return string */ private function _get_buildprop() { if ($this->_buildprop === null) { if (!CommonFunctions::rfts('/system/build.prop', $this->_buildprop, 0, 4096, false)) { CommonFunctions::rfts('/system//build.prop', $this->_buildprop, 0, 4096, false); //fix some access issues } } return $this->_buildprop; } /** * Kernel Version * * @return void */ protected function _kernel() { if (CommonFunctions::executeProgram('uname', '-r', $strBuf, false)) { $result = $strBuf; if (CommonFunctions::executeProgram('uname', '-v', $strBuf, PSI_DEBUG)) { if (preg_match('/SMP/', $strBuf)) { $result .= ' (SMP)'; } } if (CommonFunctions::executeProgram('uname', '-m', $strBuf, PSI_DEBUG)) { $result .= ' '.$strBuf; } $this->sys->setKernel($result); } elseif (CommonFunctions::rfts('/proc/version', $strBuf, 1) && preg_match('/version\s+(\S+)/', $strBuf, $ar_buf)) { $result = $ar_buf[1]; if (preg_match('/SMP/', $strBuf)) { $result .= ' (SMP)'; } $this->sys->setKernel($result); } } /** * Number of Users * * @return void */ protected function _users() { $this->sys->setUsers(1); } /** * filesystem information * * @return void */ protected function _filesystems() { $notwas = true; if (CommonFunctions::executeProgram('df', '2>/dev/null ', $df, PSI_DEBUG) && preg_match("/\s+[0-9\.]+[KMGT]\s+/", $df)) { $df = preg_split("/\n/", $df, -1, PREG_SPLIT_NO_EMPTY); if (CommonFunctions::executeProgram('mount', '', $mount, PSI_DEBUG)) { $mount = preg_split("/\n/", $mount, -1, PREG_SPLIT_NO_EMPTY); foreach ($mount as $mount_line) { $mount_buf = preg_split('/\s+/', $mount_line); if (count($mount_buf) == 6) { $mount_parm[$mount_buf[1]]['fstype'] = $mount_buf[2]; if (PSI_SHOW_MOUNT_OPTION) $mount_parm[$mount_buf[1]]['options'] = $mount_buf[3]; $mount_parm[$mount_buf[1]]['mountdev'] = $mount_buf[0]; } } foreach ($df as $df_line) { if ((preg_match("/^(\/\S+)(\s+)(([0-9\.]+)([KMGT])(\s+)([0-9\.]+)([KMGT])(\s+)([0-9\.]+)([KMGT])(\s+))/", $df_line, $df_buf) || preg_match("/^(\/[^\s\:]+)\:(\s+)(([0-9\.]+)([KMGT])(\s+total\,\s+)([0-9\.]+)([KMGT])(\s+used\,\s+)([0-9\.]+)([KMGT])(\s+available))/", $df_line, $df_buf)) && !preg_match('/^\/mnt\/asec\/com\./', $df_buf[1])) { $dev = new DiskDevice(); if (PSI_SHOW_MOUNT_POINT) $dev->setMountPoint($df_buf[1]); if ($df_buf[5] == 'K') $dev->setTotal($df_buf[4] * 1024); elseif ($df_buf[5] == 'M') $dev->setTotal($df_buf[4] * 1024*1024); elseif ($df_buf[5] == 'G') $dev->setTotal($df_buf[4] * 1024*1024*1024); elseif ($df_buf[5] == 'T') $dev->setTotal($df_buf[4] * 1024*1024*1024*1024); if ($df_buf[8] == 'K') $dev->setUsed($df_buf[7] * 1024); elseif ($df_buf[8] == 'M') $dev->setUsed($df_buf[7] * 1024*1024); elseif ($df_buf[8] == 'G') $dev->setUsed($df_buf[7] * 1024*1024*1024); elseif ($df_buf[8] == 'T') $dev->setUsed($df_buf[7] * 1024*1024*1024*1024); if ($df_buf[11] == 'K') $dev->setFree($df_buf[10] * 1024); elseif ($df_buf[11] == 'M') $dev->setFree($df_buf[10] * 1024*1024); elseif ($df_buf[11] == 'G') $dev->setFree($df_buf[10] * 1024*1024*1024); elseif ($df_buf[11] == 'T') $dev->setFree($df_buf[10] * 1024*1024*1024*1024); if (isset($mount_parm[$df_buf[1]])) { $dev->setFsType($mount_parm[$df_buf[1]]['fstype']); $dev->setName($mount_parm[$df_buf[1]]['mountdev']); if (PSI_SHOW_MOUNT_OPTION) { if (PSI_SHOW_MOUNT_CREDENTIALS) { $dev->setOptions($mount_parm[$df_buf[1]]['options']); } else { $mpo=$mount_parm[$df_buf[1]]['options']; $mpo=preg_replace('/(^guest,)|(^guest$)|(,guest$)/i', '', $mpo); $mpo=preg_replace('/,guest,/i', ',', $mpo); $mpo=preg_replace('/(^user=[^,]*,)|(^user=[^,]*$)|(,user=[^,]*$)/i', '', $mpo); $mpo=preg_replace('/,user=[^,]*,/i', ',', $mpo); $mpo=preg_replace('/(^username=[^,]*,)|(^username=[^,]*$)|(,username=[^,]*$)/i', '', $mpo); $mpo=preg_replace('/,username=[^,]*,/i', ',', $mpo); $mpo=preg_replace('/(^password=[^,]*,)|(^password=[^,]*$)|(,password=[^,]*$)/i', '', $mpo); $mpo=preg_replace('/,password=[^,]*,/i', ',', $mpo); $dev->setOptions($mpo); } } } $this->sys->setDiskDevices($dev); $notwas = false; } } } } if ($notwas) { // try Linux df style $arrResult = Parser::df("-P 2>/dev/null", false); foreach ($arrResult as $dev) { $this->sys->setDiskDevices($dev); } } } /** * Distribution * * @return void */ protected function _distro() { $buf = ""; if (($lines = $this->_get_buildprop()) && preg_match('/^ro\.build\.version\.release=([^\n]+)/m', $lines, $ar_buf)) { $buf = trim($ar_buf[1]); } if (($buf === null) || ($buf == "")) { $this->sys->setDistribution('Android'); } else { if (preg_match('/^(\d+\.\d+)/', $buf, $ver) && ($list = @parse_ini_file(PSI_APP_ROOT."/data/osnames.ini", true)) && isset($list['Android'][$ver[1]])) { $buf.=' '.$list['Android'][$ver[1]]; } $this->sys->setDistribution('Android '.$buf); } $this->sys->setDistributionIcon('Android.png'); } /** * Machine * * @return void */ protected function _machine() { if ($lines = $this->_get_buildprop()) { $buf = ""; if (preg_match('/^ro\.product\.manufacturer=([^\n]+)/m', $lines, $ar_buf) && (trim($ar_buf[1]) !== "unknown")) { $buf .= ' '.trim($ar_buf[1]); } if (preg_match('/^ro\.product\.model=([^\n]+)/m', $lines, $ar_buf) && (trim($ar_buf[1]) !== trim($buf))) { $buf .= ' '.trim($ar_buf[1]); } if (preg_match('/^ro\.semc\.product\.name=([^\n]+)/m', $lines, $ar_buf)) { $buf .= ' '.trim($ar_buf[1]); } if (trim($buf) != "") { $this->sys->setMachine(trim($buf)); } } } /** * PCI devices * * @return void */ private function _pci() { if (CommonFunctions::executeProgram('lspci', '', $bufr, false)) { $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe as $buf) { $device = preg_split("/ /", $buf, 4); if (isset($device[3]) && trim($device[3]) != "") { $dev = new HWDevice(); $dev->setName('Class '.trim($device[2]).' Device '.trim($device[3])); $this->sys->setPciDevices($dev); } } } } /** * get the information * * @see PSI_Interface_OS::build() * * @return void */ public function build() { if (!$this->blockname || $this->blockname==='vitals') { $this->_distro(); $this->_hostname(); $this->_kernel(); $this->_uptime(); $this->_users(); $this->_loadavg(); $this->_processes(); } if (!$this->blockname || $this->blockname==='hardware') { $this->_machine(); $this->_cpuinfo(); $this->_virtualizer(); $this->_pci(); $this->_usb(); $this->_i2c(); } if (!$this->blockname || $this->blockname==='memory') { $this->_memory(); } if (!$this->blockname || $this->blockname==='filesystem') { $this->_filesystems(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } } } phpsysinfo-3.4.4/includes/os/class.BSDCommon.inc.php000066400000000000000000000761521467431054600223460ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.BSDCommon.inc.php 621 2012-07-29 18:49:04Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * BSDCommon class * get all the required information for BSD Like systems * no need to implement in every class the same methods * * @category PHP * @package PSI BSDCommon OS class * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ abstract class BSDCommon extends OS { /** * Assoc array of all CPUs loads. */ private $_cpu_loads = null; /** * content of the syslog * * @var array */ private $_dmesg = null; /** * regexp1 for cpu information out of the syslog * * @var string */ private $_CPURegExp1 = "//"; /** * regexp2 for cpu information out of the syslog * * @var string */ private $_CPURegExp2 = "//"; /** * regexp1 for scsi information out of the syslog * * @var string */ private $_SCSIRegExp1 = "//"; /** * regexp2 for scsi information out of the syslog * * @var string */ private $_SCSIRegExp2 = "//"; /** * regexp3 for scsi information out of the syslog * * @var string */ private $_SCSIRegExp3 = "//"; /** * regexp1 for pci information out of the syslog * * @var string */ private $_PCIRegExp1 = "//"; /** * regexp1 for pci information out of the syslog * * @var string */ private $_PCIRegExp2 = "//"; /** * setter for cpuregexp1 * * @param string $value value to set * * @return void */ protected function setCPURegExp1($value) { $this->_CPURegExp1 = $value; } /** * setter for cpuregexp2 * * @param string $value value to set * * @return void */ protected function setCPURegExp2($value) { $this->_CPURegExp2 = $value; } /** * setter for scsiregexp1 * * @param string $value value to set * * @return void */ protected function setSCSIRegExp1($value) { $this->_SCSIRegExp1 = $value; } /** * setter for scsiregexp2 * * @param string $value value to set * * @return void */ protected function setSCSIRegExp2($value) { $this->_SCSIRegExp2 = $value; } /** * setter for scsiregexp3 * * @param string $value value to set * * @return void */ protected function setSCSIRegExp3($value) { $this->_SCSIRegExp3 = $value; } /** * setter for pciregexp1 * * @param string $value value to set * * @return void */ protected function setPCIRegExp1($value) { $this->_PCIRegExp1 = $value; } /** * setter for pciregexp2 * * @param string $value value to set * * @return void */ protected function setPCIRegExp2($value) { $this->_PCIRegExp2 = $value; } /** * read /var/run/dmesg.boot, but only if we haven't already * * @return array */ protected function readdmesg() { if ($this->_dmesg === null) { if ((PSI_OS != 'Darwin') && (CommonFunctions::rfts('/var/run/dmesg.boot', $buf, 0, 4096, false) || CommonFunctions::rfts('/var/log/dmesg.boot', $buf, 0, 4096, false) || CommonFunctions::rfts('/var/run/dmesg.boot', $buf))) { // Once again but with debug $parts = preg_split("/rebooting|Uptime/", $buf, -1, PREG_SPLIT_NO_EMPTY); $this->_dmesg = preg_split("/\n/", $parts[count($parts) - 1], -1, PREG_SPLIT_NO_EMPTY); } else { $this->_dmesg = array(); } } return $this->_dmesg; } /** * get a value from sysctl command * * @param string $key key for the value to get * * @return string */ protected function grabkey($key) { $buf = ""; if (CommonFunctions::executeProgram('sysctl', "-n $key", $buf, PSI_DEBUG)) { return $buf; } else { return ''; } } /** * Virtual Host Name * * @return void */ protected function hostname() { if (PSI_USE_VHOST) { if (CommonFunctions::readenv('SERVER_NAME', $hnm)) $this->sys->setHostname($hnm); } else { if (CommonFunctions::executeProgram('hostname', '', $buf, PSI_DEBUG)) { $this->sys->setHostname($buf); } } } /** * Kernel Version * * @return void */ protected function kernel() { $s = $this->grabkey('kern.version'); $a = preg_split('/:/', $s, 4); if (isset($a[3])) { if (preg_match('/^(\d{2} [A-Z]{3});/', $a[3], $abuf) // eg. 19:58 GMT;... || preg_match('/^(\d{2} [A-Z]{3} \d{4})/', $a[3], $abuf)) { // eg. 26:31 PDT 2019... $this->sys->setKernel($a[0].$a[1].':'.$a[2].':'.$abuf[1]); } else { $this->sys->setKernel($a[0].$a[1].':'.$a[2]); } } elseif (isset($a[2])) { $this->sys->setKernel($a[0].$a[1].':'.$a[2]); } else { $this->sys->setKernel($s); } } /** * Virtualizer info * * @return void */ private function virtualizer() { if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO) { $testvirt = $this->sys->getVirtualizer(); $novm = true; foreach ($testvirt as $virtkey=>$virtvalue) if ($virtvalue) { $novm = false; break; } // Detect QEMU cpu if ($novm && isset($testvirt["cpuid:QEMU"])) { $this->sys->setVirtualizer('qemu'); // QEMU $novm = false; } if ($novm && isset($testvirt["hypervisor"])) { $this->sys->setVirtualizer('unknown'); } } } /** * CPU usage * * @return void */ protected function cpuusage() { if (($this->_cpu_loads === null)) { $this->_cpu_loads = array(); if (PSI_OS != 'Darwin') { if ($fd = $this->grabkey('kern.cp_time')) { // Find out the CPU load // user + sys = load // total = total if (preg_match($this->_CPURegExp2, $fd, $res) && (sizeof($res) > 4)) { $load = $res[2] + $res[3] + $res[4]; // cpu.user + cpu.sys $total = $res[2] + $res[3] + $res[4] + $res[5]; // cpu.total // we need a second value, wait 1 second befor getting (< 1 second no good value will occour) sleep(1); $fd = $this->grabkey('kern.cp_time'); if (preg_match($this->_CPURegExp2, $fd, $res) && (sizeof($res) > 4)) { $load2 = $res[2] + $res[3] + $res[4]; $total2 = $res[2] + $res[3] + $res[4] + $res[5]; if ($total2 != $total) { $this->_cpu_loads['cpu'] = (100 * ($load2 - $load)) / ($total2 - $total); } else { $this->_cpu_loads['cpu'] = 0; } } } } } else { $ncpu = $this->grabkey('hw.ncpu'); if (($ncpu !== "") && ($ncpu >= 1) && CommonFunctions::executeProgram('ps', "-A -o %cpu", $pstable, false) && !empty($pstable)) { $pslines = preg_split("/\n/", $pstable, -1, PREG_SPLIT_NO_EMPTY); if (!empty($pslines) && (count($pslines)>1) && (trim($pslines[0])==="%CPU")) { array_shift($pslines); $sum = 0; foreach ($pslines as $psline) { $sum+=str_replace(',', '.', trim($psline)); } $this->_cpu_loads['cpu'] = min($sum/$ncpu, 100); } } } } if (isset($this->_cpu_loads['cpu'])) { return $this->_cpu_loads['cpu']; } else { return null; } } /** * Processor Load * optionally create a loadbar * * @return void */ protected function loadavg() { $s = $this->grabkey('vm.loadavg'); $s = preg_replace('/{ /', '', $s); $s = preg_replace('/ }/', '', $s); $s = str_replace(',', '.', $s); $this->sys->setLoad($s); if (PSI_LOAD_BAR) { $this->sys->setLoadPercent($this->cpuusage()); } } /** * CPU information * * @return void */ protected function cpuinfo() { $dev = new CpuDevice(); $cpumodel = $this->grabkey('hw.model'); $dev->setModel($cpumodel); if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO && preg_match('/^QEMU Virtual CPU version /', $cpumodel)) { $this->sys->setVirtualizer("cpuid:QEMU", false); } $notwas = true; foreach ($this->readdmesg() as $line) { if ($notwas) { $regexps = preg_split("/\n/", $this->_CPURegExp1, -1, PREG_SPLIT_NO_EMPTY); // multiple regexp separated by \n foreach ($regexps as $regexp) { if (preg_match($regexp, $line, $ar_buf) && (sizeof($ar_buf) > 2)) { if ($dev->getCpuSpeed() == 0) { $dev->setCpuSpeed(round($ar_buf[2])); } $notwas = false; break; } } } else { if (preg_match("/^\s+Origin| Features/", $line, $ar_buf)) { if (preg_match("/^\s+Origin[ ]*=[ ]*\"(.+)\"/", $line, $ar_buf)) { $dev->setVendorId($ar_buf[1]); } elseif (preg_match("/ Features2[ ]*=.*<(.+)>/", $line, $ar_buf)) { $feats = preg_split("/,/", strtolower(trim($ar_buf[1])), -1, PREG_SPLIT_NO_EMPTY); foreach ($feats as $feat) { if (($feat=="vmx") || ($feat=="svm")) { $dev->setVirt($feat); } elseif ($feat=="hv") { if ($dev->getVirt() === null) { $dev->setVirt('hypervisor'); } if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO) { $this->sys->setVirtualizer("hypervisor", false); } } } } } else break; } } $ncpu = $this->grabkey('hw.ncpu'); if (($ncpu === "") || !($ncpu >= 1)) { $ncpu = 1; } if (($ncpu == 1) && PSI_LOAD_BAR) { $dev->setLoad($this->cpuusage()); } for ($ncpu ; $ncpu > 0 ; $ncpu--) { $this->sys->setCpus($dev); } } /** * Machine information * * @return void */ private function machine() { if ((PSI_OS == 'NetBSD') || (PSI_OS == 'OpenBSD')) { $buffer = array(); if (PSI_OS == 'NetBSD') { // NetBSD $buffer['Manufacturer'] = $this->grabkey('machdep.dmi.system-vendor'); $buffer['Model'] = $this->grabkey('machdep.dmi.system-product'); $buffer['Product'] = $this->grabkey('machdep.dmi.board-product'); $buffer['SMBIOSBIOSVersion'] = $this->grabkey('machdep.dmi.bios-version'); $buffer['ReleaseDate'] = $this->grabkey('machdep.dmi.bios-date'); } else { // OpenBSD $buffer['Manufacturer'] = $this->grabkey('hw.vendor'); $buffer['Model'] = $this->grabkey('hw.product'); $buffer['Product'] = ""; $buffer['SMBIOSBIOSVersion'] = ""; $buffer['ReleaseDate'] = ""; } if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO) { $vendor_array = array(); $vendor_array[] = $buffer['Model']; $vendor_array[] = trim($buffer['Manufacturer']." ".$buffer['Model']); if (PSI_OS == 'NetBSD') { // NetBSD $vendor_array[] = $this->grabkey('machdep.dmi.board-vendor'); $vendor_array[] = $this->grabkey('machdep.dmi.bios-vendor'); } $virt = CommonFunctions::decodevirtualizer($vendor_array); if ($virt !== null) { $this->sys->setVirtualizer($virt); } } $buf = ""; if (($buffer['Manufacturer'] !== "") && !preg_match("/^To be filled by O\.E\.M\.$|^System manufacturer$|^Not Specified$/i", $buf2=trim($buffer['Manufacturer'])) && ($buf2 !== "")) { $buf .= ' '.$buf2; } if (($buffer['Model'] !== "") && !preg_match("/^To be filled by O\.E\.M\.$|^System Product Name$|^Not Specified$/i", $buf2=trim($buffer['Model'])) && ($buf2 !== "")) { $model = $buf2; $buf .= ' '.$buf2; } if (($buffer['Product'] !== "") && !preg_match("/^To be filled by O\.E\.M\.$|^BaseBoard Product Name$|^Not Specified$|^Default string$/i", $buf2=trim($buffer['Product'])) && ($buf2 !== "")) { if ($buf2 !== $model) { $buf .= '/'.$buf2; } elseif (isset($buffer['SystemFamily']) && !preg_match("/^To be filled by O\.E\.M\.$|^System Family$|^Not Specified$/i", $buf2=trim($buffer['SystemFamily'])) && ($buf2 !== "")) { $buf .= '/'.$buf2; } } $bver = ""; $brel = ""; if (($buf2=trim($buffer['SMBIOSBIOSVersion'])) !== "") { $bver .= ' '.$buf2; } if ($buffer['ReleaseDate'] !== "") { if (preg_match("/^(\d{4})(\d{2})(\d{2})$/", $buffer['ReleaseDate'], $dateout)) { $brel .= ' '.$dateout[2].'/'.$dateout[3].'/'.$dateout[1]; } elseif (preg_match("/^\d{2}\/\d{2}\/\d{4}$/", $buffer['ReleaseDate'])) { $brel .= ' '.$buffer['ReleaseDate']; } } if ((trim($bver) !== "") || (trim($brel) !== "")) { $buf .= ', BIOS'.$bver.$brel; } if (trim($buf) !== "") { $this->sys->setMachine(trim($buf)); } } elseif ((PSI_OS == 'FreeBSD') && defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO) { $vendorid = $this->grabkey('hw.hv_vendor'); if (trim($vendorid) === "") { foreach ($this->readdmesg() as $line) if (preg_match("/^Hypervisor: Origin = \"(.+)\"/", $line, $ar_buf)) { if (trim($ar_buf[1]) !== "") { $vendorid = $ar_buf[1]; } break; } } if (trim($vendorid) !== "") { $virt = CommonFunctions::decodevirtualizer($vendorid); if ($virt !== null) { $this->sys->setVirtualizer($virt); } else { $this->sys->setVirtualizer('unknown'); } } } } /** * SCSI devices * get the scsi device information out of dmesg * * @return void */ protected function scsi() { foreach ($this->readdmesg() as $line) { if (preg_match($this->_SCSIRegExp1, $line, $ar_buf) && (sizeof($ar_buf) > 2)) { $dev = new HWDevice(); $dev->setName($ar_buf[1].": ".trim($ar_buf[2])); $this->sys->setScsiDevices($dev); } elseif (preg_match($this->_SCSIRegExp2, $line, $ar_buf) && (sizeof($ar_buf) > 1)) { /* duplication security */ $notwas = true; foreach ($this->sys->getScsiDevices() as $finddev) { if ($notwas && (substr($finddev->getName(), 0, strpos($finddev->getName(), ': ')) == $ar_buf[1])) { if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if (isset($ar_buf[3]) && ($ar_buf[3]==="G")) { $finddev->setCapacity($ar_buf[2] * 1024 * 1024 * 1024); } elseif (isset($ar_buf[2])) { $finddev->setCapacity($ar_buf[2] * 1024 * 1024); } } $notwas = false; break; } } if ($notwas) { $dev = new HWDevice(); $dev->setName($ar_buf[1]); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if (isset($ar_buf[3]) && ($ar_buf[3]==="G")) { $dev->setCapacity($ar_buf[2] * 1024 * 1024 * 1024); } elseif (isset($ar_buf[2])) { $dev->setCapacity($ar_buf[2] * 1024 * 1024); } } $this->sys->setScsiDevices($dev); } } elseif (preg_match($this->_SCSIRegExp3, $line, $ar_buf) && (sizeof($ar_buf) > 1)) { /* duplication security */ $notwas = true; foreach ($this->sys->getScsiDevices() as $finddev) { if ($notwas && (substr($finddev->getName(), 0, strpos($finddev->getName(), ': ')) == $ar_buf[1])) { if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { if (isset($ar_buf[2])) $finddev->setSerial(trim($ar_buf[2])); } $notwas = false; break; } } if ($notwas) { $dev = new HWDevice(); $dev->setName($ar_buf[1]); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { if (isset($ar_buf[2])) $dev->setSerial(trim($ar_buf[2])); } $this->sys->setScsiDevices($dev); } } } /* cleaning */ foreach ($this->sys->getScsiDevices() as $finddev) { if (strpos($finddev->getName(), ': ') !== false) $finddev->setName(substr(strstr($finddev->getName(), ': '), 2)); } } /** * parsing the output of pciconf command * * @return Array */ protected function pciconf() { $arrResults = array(); $intS = 0; if (CommonFunctions::executeProgram("pciconf", "-lv", $strBuf, PSI_DEBUG)) { $arrTemp = array(); $arrBlocks = preg_split("/\n\S/", $strBuf, -1, PREG_SPLIT_NO_EMPTY); foreach ($arrBlocks as $strBlock) { $arrLines = preg_split("/\n/", $strBlock, -1, PREG_SPLIT_NO_EMPTY); $vend = null; foreach ($arrLines as $strLine) { if (preg_match("/\sclass=0x([a-fA-F0-9]{4})[a-fA-F0-9]{2}\s.*\schip=0x([a-fA-F0-9]{4})([a-fA-F0-9]{4})\s/", $strLine, $arrParts)) { $arrTemp[$intS] = 'Class '.$arrParts[1].': Device '.$arrParts[3].':'.$arrParts[2]; $vend = ''; } elseif (preg_match("/(.*) = '(.*)'/", $strLine, $arrParts)) { if (trim($arrParts[1]) == "vendor") { $vend = trim($arrParts[2]); } elseif (trim($arrParts[1]) == "device") { if (($vend !== null) && ($vend !== '')) { $arrTemp[$intS] = $vend." - ".trim($arrParts[2]); } else { $arrTemp[$intS] = trim($arrParts[2]); $vend = ''; } } } } if ($vend !== null) { $intS++; } } foreach ($arrTemp as $name) { $dev = new HWDevice(); $dev->setName($name); $arrResults[] = $dev; } } return $arrResults; } /** * PCI devices * get the pci device information out of dmesg * * @return void */ protected function pci() { if ((!$results = Parser::lspci(false)) && (!$results = $this->pciconf())) { foreach ($this->readdmesg() as $line) { if (preg_match($this->_PCIRegExp1, $line, $ar_buf) && (sizeof($ar_buf) > 2)) { $dev = new HWDevice(); $dev->setName($ar_buf[1].": ".$ar_buf[2]); $results[] = $dev; } elseif (preg_match($this->_PCIRegExp2, $line, $ar_buf) && (sizeof($ar_buf) > 2)) { $dev = new HWDevice(); $dev->setName($ar_buf[1].": ".$ar_buf[2]); $results[] = $dev; } } } foreach ($results as $dev) { $this->sys->setPciDevices($dev); } } /** * IDE devices * get the ide device information out of dmesg * * @return void */ protected function ide() { foreach ($this->readdmesg() as $line) { if (preg_match('/^(ad[0-9]+): (.*)MB <(.*)> (.*) (.*)/', $line, $ar_buf)) { $dev = new HWDevice(); $dev->setName($ar_buf[1].": ".trim($ar_buf[3])); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { $dev->setCapacity($ar_buf[2] * 1024 * 1024); } $this->sys->setIdeDevices($dev); } elseif (preg_match('/^(acd[0-9]+): (.*) <(.*)> (.*)/', $line, $ar_buf)) { $dev = new HWDevice(); $dev->setName($ar_buf[1].": ".trim($ar_buf[3])); $this->sys->setIdeDevices($dev); } elseif (preg_match('/^(ada[0-9]+): <(.*)> (.*)/', $line, $ar_buf)) { $dev = new HWDevice(); $dev->setName($ar_buf[1].": ".trim($ar_buf[2])); $this->sys->setIdeDevices($dev); } elseif (preg_match('/^(ada[0-9]+): (.*)MB \((.*)\)/', $line, $ar_buf)) { /* duplication security */ $notwas = true; foreach ($this->sys->getIdeDevices() as $finddev) { if ($notwas && (substr($finddev->getName(), 0, strpos($finddev->getName(), ': ')) == $ar_buf[1])) { if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { $finddev->setCapacity($ar_buf[2] * 1024 * 1024); } $notwas = false; break; } } if ($notwas) { $dev = new HWDevice(); $dev->setName($ar_buf[1]); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { $dev->setCapacity($ar_buf[2] * 1024 * 1024); } $this->sys->setIdeDevices($dev); } } elseif (preg_match('/^(ada[0-9]+): Serial Number (.*)/', $line, $ar_buf)) { /* duplication security */ $notwas = true; foreach ($this->sys->getIdeDevices() as $finddev) { if ($notwas && (substr($finddev->getName(), 0, strpos($finddev->getName(), ': ')) == $ar_buf[1])) { if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { $finddev->setSerial(trim($ar_buf[2])); } $notwas = false; break; } } if ($notwas) { $dev = new HWDevice(); $dev->setName($ar_buf[1]); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { $finddev->setSerial(trim($ar_buf[2])); } $this->sys->setIdeDevices($dev); } } } /* cleaning */ foreach ($this->sys->getIdeDevices() as $finddev) { if (strpos($finddev->getName(), ': ') !== false) $finddev->setName(substr(strstr($finddev->getName(), ': '), 2)); } } /** * Physical memory information and Swap Space information * * @return void */ protected function memory() { if (PSI_OS == 'FreeBSD' || PSI_OS == 'OpenBSD') { // vmstat on fbsd 4.4 or greater outputs kbytes not hw.pagesize // I should probably add some version checking here, but for now // we only support fbsd 4.4 $pagesize = 1024; } else { $pagesize = $this->grabkey('hw.pagesize'); } if (CommonFunctions::executeProgram('vmstat', '', $vmstat, PSI_DEBUG)) { $lines = preg_split("/\n/", $vmstat, -1, PREG_SPLIT_NO_EMPTY); $ar_buf = preg_split("/\s+/", trim($lines[2]), 19); if (PSI_OS == 'NetBSD' || PSI_OS == 'DragonFly') { $this->sys->setMemFree($ar_buf[4] * 1024); } else { $this->sys->setMemFree($ar_buf[4] * $pagesize); } $this->sys->setMemTotal($this->grabkey('hw.physmem')); $this->sys->setMemUsed($this->sys->getMemTotal() - $this->sys->getMemFree()); if (((PSI_OS == 'OpenBSD' || PSI_OS == 'NetBSD') && CommonFunctions::executeProgram('swapctl', '-l -k', $swapstat, PSI_DEBUG)) || CommonFunctions::executeProgram('swapinfo', '-k', $swapstat, PSI_DEBUG)) { $lines = preg_split("/\n/", $swapstat, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { $ar_buf = preg_split("/\s+/", $line, 6); if (($ar_buf[0] != 'Total') && ($ar_buf[0] != 'Device')) { $dev = new DiskDevice(); $dev->setMountPoint($ar_buf[0]); $dev->setName("SWAP"); $dev->setFsType('swap'); $dev->setTotal($ar_buf[1] * 1024); $dev->setUsed($ar_buf[2] * 1024); $dev->setFree($dev->getTotal() - $dev->getUsed()); $this->sys->setSwapDevices($dev); } } } } } /** * USB devices * get the ide device information out of dmesg * * @return void */ protected function usb() { $notwas = true; if ((PSI_OS == 'FreeBSD') && CommonFunctions::executeProgram('usbconfig', '', $bufr, false)) { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { if (preg_match('/^(ugen[0-9]+\.[0-9]+): <([^,]*)(.*)> at (usbus[0-9]+)/', $line, $ar_buf)) { $notwas = false; $dev = new HWDevice(); $dev->setName($ar_buf[2]); $this->sys->setUSBDevices($dev); } } } if ($notwas) foreach ($this->readdmesg() as $line) { // if (preg_match('/^(ugen[0-9\.]+): <(.*)> (.*) (.*)/', $line, $ar_buf)) { // $dev->setName($ar_buf[1].": ".$ar_buf[2]); if (preg_match('/^(u[a-z]+[0-9]+): <([^,]*)(.*)> on (usbus[0-9]+)/', $line, $ar_buf)) { $dev = new HWDevice(); $dev->setName($ar_buf[2]); $this->sys->setUSBDevices($dev); } } } /** * filesystem information * * @return void */ protected function filesystems() { $arrResult = Parser::df(); foreach ($arrResult as $dev) { $this->sys->setDiskDevices($dev); } } /** * Distribution * * @return void */ protected function distro() { if (CommonFunctions::executeProgram('uname', '-s', $result, PSI_DEBUG)) { $this->sys->setDistribution($result); } } /** * UpTime * time the system is running * * @return void */ private function uptime() { if ($kb = $this->grabkey('kern.boottime')) { if (preg_match("/sec = ([0-9]+)/", $kb, $buf)) { // format like: { sec = 1096732600, usec = 885425 } Sat Oct 2 10:56:40 2004 $this->sys->setUptime(time() - $buf[1]); } else { date_default_timezone_set('UTC'); $kbt = strtotime($kb); if (($kbt !== false) && ($kbt != -1)) { $this->sys->setUptime(time() - $kbt); // format like: Sat Oct 2 10:56:40 2004 } else { $this->sys->setUptime(time() - $kb); // format like: 1096732600 } } } } /** * get the information * * @see PSI_Interface_OS::build() * * @return void */ public function build() { if (!$this->blockname || $this->blockname==='vitals') { $this->distro(); $this->hostname(); $this->kernel(); $this->_users(); $this->loadavg(); $this->uptime(); } if (!$this->blockname || $this->blockname==='hardware') { $this->machine(); $this->cpuinfo(); $this->virtualizer(); $this->pci(); $this->ide(); $this->scsi(); $this->usb(); } if (!$this->blockname || $this->blockname==='memory') { $this->memory(); } if (!$this->blockname || $this->blockname==='filesystem') { $this->filesystems(); } } } phpsysinfo-3.4.4/includes/os/class.Darwin.inc.php000066400000000000000000000502741467431054600220060ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.Darwin.inc.php 638 2012-08-24 09:40:48Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * Darwin sysinfo class * get all the required information from Darwin system * information may be incomplete * * @category PHP * @package PSI Darwin OS class * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Darwin extends BSDCommon { /** * define the regexp for log parser */ /* public function __construct($blockname = false) { parent::__construct($blockname); $this->error->addWarning("The Darwin version of phpSysInfo is a work in progress, some things currently don't work!"); $this->setCPURegExp1("/CPU: (.*) \((.*)-MHz (.*)\)/"); $this->setCPURegExp2("/(.*) ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)/"); $this->setSCSIRegExp1("/^(.*): <(.*)> .*SCSI.*device/"); } */ /** * get a value from sysctl command * * @param string $key key of the value to get * * @return string */ protected function grabkey($key) { if (CommonFunctions::executeProgram('sysctl', $key, $s, PSI_DEBUG)) { $s = preg_replace('/'.$key.': /', '', $s); $s = preg_replace('/'.$key.' = /', '', $s); return $s; } else { return ''; } } /** * get a value from ioreg command * * @param string $key key of the value to get * * @return string */ private function _grabioreg($key) { if (CommonFunctions::executeProgram('ioreg', '-c "'.$key.'"', $s, PSI_DEBUG)) { /* delete newlines */ $s = preg_replace("/\s+/", " ", $s); /* new newlines */ $s = preg_replace("/[\|\t ]*\+\-o/", "\n", $s); /* combine duplicate whitespaces and some chars */ $s = preg_replace("/[\|\t ]+/", " ", $s); $lines = preg_split("/\n/", $s, -1, PREG_SPLIT_NO_EMPTY); $out = ""; foreach ($lines as $line) { if (preg_match('/^([^<]*) setModel($proc[1]); $buf=$this->grabkey('hw.model'); if (($buf !== null) && (trim($buf) != "")) { $this->sys->setMachine(trim($buf)); if (CommonFunctions::rftsdata('ModelTranslation.txt', $buffer)) { $buffer = preg_split("/\n/", $buffer, -1, PREG_SPLIT_NO_EMPTY); foreach ($buffer as $line) { $ar_buf = preg_split("/:/", $line, 3); if (trim($buf) === trim($ar_buf[0])) { $dev->setModel(trim($ar_buf[2])); $this->sys->setMachine($this->sys->getMachine().' - '.trim($ar_buf[1])); break; } } } } $buf=$this->grabkey('machdep.cpu.brand_string'); if (($buf !== null) && (trim($buf) != "") && ((trim($buf) != "i486 (Intel 80486)") || ($dev->getModel() == ""))) { $dev->setModel(trim($buf)); } $buf=$this->grabkey('machdep.cpu.features'); if (($buf !== null) && (trim($buf) != "")) { if (preg_match("/ VMX/", $buf)) { $dev->setVirt("vmx"); } elseif (preg_match("/ SVM/", $buf)) { $dev->setVirt("svm"); } } } $dev->setCpuSpeed(round($this->grabkey('hw.cpufrequency') / 1000000)); $dev->setBusSpeed(round($this->grabkey('hw.busfrequency') / 1000000)); $bufn=$this->grabkey('hw.cpufrequency_min'); $bufx=$this->grabkey('hw.cpufrequency_max'); if (($bufn !== null) && (trim($bufn) != "") && ($bufx !== null) && (trim($bufx) != "") && ($bufn != $bufx)) { $dev->setCpuSpeedMin(round($bufn / 1000000)); $dev->setCpuSpeedMax(round($bufx / 1000000)); } $buf=$this->grabkey('hw.l2cachesize'); if ($buf !== "") { $dev->setCache(round($buf)); } $ncpu = $this->grabkey('hw.ncpu'); if (($ncpu === "") || !($ncpu >= 1)) { $ncpu = 1; } if (($ncpu == 1) && PSI_LOAD_BAR) { $dev->setLoad($this->cpuusage()); } for ($ncpu ; $ncpu > 0 ; $ncpu--) { $this->sys->setCpus($dev); } } /** * get the pci device information out of ioreg * * @return void */ protected function pci() { if (!$arrResults = Parser::lspci(false)) { //no lspci port $s = $this->_grabioreg('IOPCIDevice'); $lines = preg_split("/\n/", $s, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { $dev = new HWDevice(); if (!preg_match('/"IOName" = "([^"]*)"/', $line, $ar_buf)) { $ar_buf = preg_split("/[\s@]+/", $line, 19); } if (preg_match('/"model" = setName(trim($ar_buf[1]). ": ".trim($ar_buf2[1])); } else { $dev->setName(trim($ar_buf[1])); } $this->sys->setPciDevices($dev); } } else { foreach ($arrResults as $dev) { $this->sys->setPciDevices($dev); } } } /** * get the ide device information out of ioreg * * @return void */ protected function ide() { $s = $this->_grabioreg('IOATABlockStorageDevice'); $lines = preg_split("/\n/", $s, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { $dev = new HWDevice(); if (!preg_match('/"Product Name"="([^"]*)"/', $line, $ar_buf)) $ar_buf = preg_split("/[\s@]+/", $line, 19); $dev->setName(trim($ar_buf[1])); $this->sys->setIdeDevices($dev); } $s = $this->_grabioreg('IOAHCIBlockStorageDevice'); $lines = preg_split("/\n/", $s, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { $dev = new HWDevice(); if (!preg_match('/"Product Name"="([^"]*)"/', $line, $ar_buf)) $ar_buf = preg_split("/[\s@]+/", $line, 19); $dev->setName(trim($ar_buf[1])); $this->sys->setIdeDevices($dev); } } /** * get the usb device information out of ioreg * * @return void */ protected function usb() { $s = $this->_grabioreg('IOUSBDevice'); $lines = preg_split("/\n/", $s, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { $dev = new HWDevice(); if (!preg_match('/"USB Product Name" = "([^"]*)"/', $line, $ar_buf)) $ar_buf = preg_split("/[\s@]+/", $line, 19); $dev->setName(trim($ar_buf[1])); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if (preg_match('/"USB Vendor Name" = "([^"]*)"/', $line, $ar_buf)) { $dev->setManufacturer(trim($ar_buf[1])); } if (preg_match('/"USB Product Name" = "([^"]*)"/', $line, $ar_buf)) { $dev->setProduct(trim($ar_buf[1])); } if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && preg_match('/"USB Serial Number" = "([^"]*)"/', $line, $ar_buf)) { $dev->setSerial(trim($ar_buf[1])); } } $this->sys->setUsbDevices($dev); } } /** * get the scsi device information out of ioreg * * @return void */ protected function scsi() { $s = $this->_grabioreg('IOBlockStorageServices'); $lines = preg_split("/\n/", $s, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { $dev = new HWDevice(); if (!preg_match('/"Product Name"="([^"]*)"/', $line, $ar_buf)) $ar_buf = preg_split("/[\s@]+/", $line, 19); $dev->setName(trim($ar_buf[1])); $this->sys->setScsiDevices($dev); } } /** * get memory and swap information * * @return void */ protected function memory() { if (($s = $this->grabkey('hw.memsize')) > 0) { $this->sys->setMemTotal($s); if (CommonFunctions::executeProgram('vm_stat', '', $pstat, PSI_DEBUG)) { // calculate free memory from page sizes (each page = 4096) if (preg_match('/^Pages free:\s+(\S+)/m', $pstat, $free_buf)) { if (preg_match('/^Anonymous pages:\s+(\S+)/m', $pstat, $anon_buf) && preg_match('/^Pages wired down:\s+(\S+)/m', $pstat, $wire_buf) && preg_match('/^File-backed pages:\s+(\S+)/m', $pstat, $fileb_buf)) { // OS X 10.9 or never $this->sys->setMemFree($free_buf[1] * 4 * 1024); $this->sys->setMemApplication(($anon_buf[1]+$wire_buf[1]) * 4 * 1024); $this->sys->setMemCache($fileb_buf[1] * 4 * 1024); if (preg_match('/^Pages occupied by compressor:\s+(\S+)/m', $pstat, $compr_buf)) { $this->sys->setMemBuffer($compr_buf[1] * 4 * 1024); } } else { if (preg_match('/^Pages speculative:\s+(\S+)/m', $pstat, $spec_buf)) { $this->sys->setMemFree(($free_buf[1]+$spec_buf[1]) * 4 * 1024); } else { $this->sys->setMemFree($free_buf[1] * 4 * 1024); } $appMemory = 0; if (preg_match('/^Pages wired down:\s+(\S+)/m', $pstat, $wire_buf)) { $appMemory += $wire_buf[1] * 4 * 1024; } if (preg_match('/^Pages active:\s+(\S+)/m', $pstat, $active_buf)) { $appMemory += $active_buf[1] * 4 * 1024; } $this->sys->setMemApplication($appMemory); if (preg_match('/^Pages inactive:\s+(\S+)/m', $pstat, $inactive_buf)) { $this->sys->setMemCache($inactive_buf[1] * 4 * 1024); } } } else { $lines = preg_split("/\n/", $pstat, -1, PREG_SPLIT_NO_EMPTY); $ar_buf = preg_split("/\s+/", $lines[1], 19); $this->sys->setMemFree($ar_buf[2] * 4 * 1024); } $this->sys->setMemUsed($this->sys->getMemTotal() - $this->sys->getMemFree()); } if (($swap = $this->grabkey("vm.swapusage")) > 0) { $swap0 = preg_split('/M/', $swap); $swap1 = preg_split('/=/', $swap0[0]); $swap2 = preg_split('/=/', $swap0[1]); $swap3 = preg_split('/=/', $swap0[2]); if (($swap=str_replace(',', '.', trim($swap1[1]))) > 0) { $dev = new DiskDevice(); $dev->setName('SWAP'); $dev->setMountPoint('SWAP'); $dev->setFsType('swap'); $dev->setTotal($swap * 1024 * 1024); $dev->setUsed(str_replace(',', '.', trim($swap2[1])) * 1024 * 1024); $dev->setFree(str_replace(',', '.', trim($swap3[1])) * 1024 * 1024); $this->sys->setSwapDevices($dev); } } } } /** * get the thunderbolt device information out of ioreg * * @return void */ protected function _tb() { $s = $this->_grabioreg('IOThunderboltPort'); $lines = preg_split("/\n/", $s, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { $dev = new HWDevice(); if (!preg_match('/"Description" = "([^"]*)"/', $line, $ar_buf)) $ar_buf = preg_split("/[\s@]+/", $line, 19); $dev->setName(trim($ar_buf[1])); $this->sys->setTbDevices($dev); } } /** * get network information * * @return void */ private function _network() { if (CommonFunctions::executeProgram('netstat', '-nbdi | cut -c1-24,42- | grep Link', $netstat, PSI_DEBUG)) { $lines = preg_split("/\n/", $netstat, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { $ar_buf = preg_split("/\s+/", $line, 10); if (!empty($ar_buf[0])) { $dev = new NetDevice(); $dev->setName($ar_buf[0]); $dev->setTxBytes($ar_buf[8]); $dev->setRxBytes($ar_buf[5]); $dev->setErrors($ar_buf[4] + $ar_buf[7]); if (isset($ar_buf[10])) { $dev->setDrops($ar_buf[10]); } if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS) && (CommonFunctions::executeProgram('ifconfig', $ar_buf[0].' 2>/dev/null', $bufr2, PSI_DEBUG))) { $bufe2 = preg_split("/\n/", $bufr2, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe2 as $buf2) { if (preg_match('/^\s+ether\s+(\S+)/i', $buf2, $ar_buf2)) { if (!defined('PSI_HIDE_NETWORK_MACADDR') || !PSI_HIDE_NETWORK_MACADDR) $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').preg_replace('/:/', '-', strtoupper($ar_buf2[1]))); } elseif (preg_match('/^\s+inet\s+(\S+)\s+netmask/i', $buf2, $ar_buf2)) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1]); } elseif ((preg_match('/^\s+inet6\s+([^\s%]+)\s+prefixlen/i', $buf2, $ar_buf2) || preg_match('/^\s+inet6\s+([^\s%]+)%\S+\s+prefixlen/i', $buf2, $ar_buf2)) && ($ar_buf2[1]!="::") && !preg_match('/^fe80::/i', $ar_buf2[1])) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').strtolower($ar_buf2[1])); } elseif (preg_match('/^\s+media:\s+/i', $buf2) && preg_match('/[\(\s](\d+)(G*)base/i', $buf2, $ar_buf2)) { if (isset($ar_buf2[2]) && strtoupper($ar_buf2[2])=="G") { $unit = "G"; } else { $unit = "M"; } if (preg_match('/[<\s]([^\s<]+)-duplex/i', $buf2, $ar_buf3)) $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1].$unit.'b/s '.strtolower($ar_buf3[1])); else $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1].$unit.'b/s'); } } } $this->sys->setNetDevices($dev); } } } } /** * get icon name * * @return void */ protected function distro() { $this->sys->setDistributionIcon('Darwin.png'); if ((!CommonFunctions::executeProgram('system_profiler', 'SPSoftwareDataType', $buffer, PSI_DEBUG) || !preg_match('/\n\s*System Version:/', $buffer)) && (!CommonFunctions::executeProgram('sw_vers', '', $buffer, PSI_DEBUG) || !preg_match('/^ProductName:/', $buffer))) { parent::distro(); } else { $distro_tmp = preg_split("/\n/", $buffer, -1, PREG_SPLIT_NO_EMPTY); foreach ($distro_tmp as $info) { $info_tmp = preg_split('/:/', $info, 2); if (isset($distro_tmp[0]) && ($distro_tmp[0] !== null) && (trim($distro_tmp[0]) != "") && isset($distro_tmp[1]) && ($distro_tmp[1] !== null) && (trim($distro_tmp[1]) != "")) { $distro_arr[trim($info_tmp[0])] = trim($info_tmp[1]); } } if (isset($distro_arr['ProductName']) && isset($distro_arr['ProductVersion']) && isset($distro_arr['BuildVersion'])) { $distro_arr['System Version'] = $distro_arr['ProductName'].' '.$distro_arr['ProductVersion'].' ('.$distro_arr['BuildVersion'].')'; } if (isset($distro_arr['System Version'])) { $distro = $distro_arr['System Version']; if (preg_match('/^Mac OS |^OS X |^macOS |^iPhone OS |^Mac OS$|^OS X$|^macOS$|^iPhone OS$/', $distro)) { $this->sys->setDistributionIcon('Apple.png'); if (preg_match('/(^Mac OS X Server|^Mac OS X|^OS X Server|^OS X|^macOS Server|^macOS) ((\d+)\.\d+)/', $distro, $ver) && ($list = @parse_ini_file(PSI_APP_ROOT."/data/osnames.ini", true))) { if (isset($list['macOS'][$ver[2]])) { $distro.=' '.$list['macOS'][$ver[2]]; } elseif (isset($list['macOS'][$ver[3]])) { $distro.=' '.$list['macOS'][$ver[3]]; } } } $this->sys->setDistribution($distro); } else { parent::distro(); } } } /** * Processes * * @return void */ protected function _processes() { if (CommonFunctions::executeProgram('ps', 'aux', $bufr, PSI_DEBUG)) { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $processes['*'] = 0; foreach ($lines as $line) { if (preg_match("/^\S+\s+\d+\s+\S+\s+\S+\s+\d+\s+\d+\s+\S+\s+(\w)/", $line, $ar_buf)) { $processes['*']++; $state = $ar_buf[1]; if ($state == 'U') $state = 'D'; //linux format elseif ($state == 'I') $state = 'S'; elseif ($state == 'D') $state = 'd'; //invalid if (isset($processes[$state])) { $processes[$state]++; } else { $processes[$state] = 1; } } } if ($processes['*'] > 0) { $this->sys->setProcesses($processes); } } } /** * get the information * * @see PSI_Interface_OS::build() * * @return void */ public function build() { parent::build(); if (!$this->blockname || $this->blockname==='vitals') { $this->_processes(); } if (!$this->blockname || $this->blockname==='hardware') { $this->_tb(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } } } phpsysinfo-3.4.4/includes/os/class.DragonFly.inc.php000066400000000000000000000113161467431054600224410ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.DragonFly.inc.php 287 2009-06-26 12:11:59Z bigmichi1 $ * @link http://phpsysinfo.sourceforge.net */ /** * DragonFly sysinfo class * get all the required information from DragonFly system * * @category PHP * @package PSI DragonFly OS class * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class DragonFly extends BSDCommon { /** * define the regexp for log parser */ public function __construct($blockname = false) { parent::__construct($blockname); $this->setCPURegExp1("/^cpu(.*)\, (.*) MHz/\n/^CPU: (.*) \((.*)-MHz (.*)\)/"); // multiple regexp separated by \n $this->setCPURegExp2("/^(.*) at scsibus.*: <(.*)> .*/"); $this->setSCSIRegExp2("/^(da[0-9]+): (.*)MB /"); $this->setPCIRegExp1("/(.*): <(.*)>(.*) (pci|legacypci)[0-9]+$/"); $this->setPCIRegExp2("/(.*): <(.*)>.* at [0-9\.]+$/"); } /** * get network information * * @return void */ private function _network() { CommonFunctions::executeProgram('netstat', '-nbdi | cut -c1-25,44- | grep "^[a-z]*[0-9][ \t].*Link"', $netstat_b); CommonFunctions::executeProgram('netstat', '-ndi | cut -c1-25,44- | grep "^[a-z]*[0-9][ \t].*Link"', $netstat_n); $lines_b = preg_split("/\n/", $netstat_b, -1, PREG_SPLIT_NO_EMPTY); $lines_n = preg_split("/\n/", $netstat_n, -1, PREG_SPLIT_NO_EMPTY); for ($i = 0, $max = sizeof($lines_b); $i < $max; $i++) { $ar_buf_b = preg_split("/\s+/", $lines_b[$i]); $ar_buf_n = preg_split("/\s+/", $lines_n[$i]); if (!empty($ar_buf_b[0]) && (!empty($ar_buf_n[5]) || ($ar_buf_n[5] === "0"))) { $dev = new NetDevice(); $dev->setName($ar_buf_b[0]); $dev->setTxBytes($ar_buf_b[8]); $dev->setRxBytes($ar_buf_b[5]); $dev->setErrors($ar_buf_n[4] + $ar_buf_n[6]); $dev->setDrops($ar_buf_n[8]); $this->sys->setNetDevices($dev); } } } /** * get the ide information * * @return void */ protected function ide() { foreach ($this->readdmesg() as $line) { if (preg_match('/^(.*): (.*) <(.*)> at (ata[0-9]+\-(.*)) (.*)/', $line, $ar_buf)) { $dev = new HWDevice(); $dev->setName($ar_buf[1]); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && !preg_match("/^acd[0-9]+(.*)/", $ar_buf[1])) { $dev->setCapacity($ar_buf[2] * 1024 * 1024); } $this->sys->setIdeDevices($dev); } } } /** * get icon name * * @return void */ private function _distroicon() { $this->sys->setDistributionIcon('DragonFly.png'); } /** * Processes * * @return void */ protected function _processes() { if (CommonFunctions::executeProgram('ps', 'aux', $bufr, PSI_DEBUG)) { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $processes['*'] = 0; foreach ($lines as $line) { if (preg_match("/^\S+\s+\d+\s+\S+\s+\S+\s+\d+\s+\d+\s+\S+\s+(\w)/", $line, $ar_buf)) { $processes['*']++; $state = $ar_buf[1]; if ($state == 'I') $state = 'S'; //linux format if (isset($processes[$state])) { $processes[$state]++; } else { $processes[$state] = 1; } } } if ($processes['*'] > 0) { $this->sys->setProcesses($processes); } } } /** * get the information * * @see BSDCommon::build() * * @return void */ public function build() { parent::build(); if (!$this->blockname || $this->blockname==='vitals') { $this->_distroicon(); $this->_processes(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } } } phpsysinfo-3.4.4/includes/os/class.FreeBSD.inc.php000066400000000000000000000217531467431054600217740ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.FreeBSD.inc.php 696 2012-09-09 11:24:04Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * FreeBSD sysinfo class * get all the required information from FreeBSD system * * @category PHP * @package PSI FreeBSD OS class * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class FreeBSD extends BSDCommon { /** * define the regexp for log parser */ public function __construct($blockname = false) { parent::__construct($blockname); $this->setCPURegExp1("/CPU: (.*) \((.*)-MHz (.*)\)/"); $this->setCPURegExp2("/(.*) ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)/"); $this->setSCSIRegExp1("/^(.*): <(.*)> .*SCSI.*device/"); $this->setSCSIRegExp2("/^(da[0-9]+): (.*)MB /"); $this->setSCSIRegExp3("/^(da[0-9]+|cd[0-9]+): Serial Number (.*)/"); $this->setPCIRegExp1("/(.*): <(.*)>(.*) pci[0-9]+$/"); $this->setPCIRegExp2("/(.*): <(.*)>.* at [.0-9]+ irq/"); } /** * get network information * * @return void */ private function _network() { $dev = null; if (CommonFunctions::executeProgram('netstat', '-nibd', $netstat, PSI_DEBUG)) { $lines = preg_split("/\n/", $netstat, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { $ar_buf = preg_split("/\s+/", $line); if (!empty($ar_buf[0])) { if (preg_match('/^setName($ar_buf[0]); if ((strlen($ar_buf[3]) < 17) && ($ar_buf[0] != $ar_buf[3])) { /* no MAC or dev name*/ if (isset($ar_buf[11]) && (trim($ar_buf[11]) != '')) { /* Idrop column exist*/ $dev->setTxBytes($ar_buf[9]); $dev->setRxBytes($ar_buf[6]); $dev->setErrors($ar_buf[4] + $ar_buf[8]); $dev->setDrops($ar_buf[11] + $ar_buf[5]); } else { $dev->setTxBytes($ar_buf[8]); $dev->setRxBytes($ar_buf[5]); $dev->setErrors($ar_buf[4] + $ar_buf[7]); $dev->setDrops($ar_buf[10]); } } else { if (isset($ar_buf[12]) && (trim($ar_buf[12]) != '')) { /* Idrop column exist*/ $dev->setTxBytes($ar_buf[10]); $dev->setRxBytes($ar_buf[7]); $dev->setErrors($ar_buf[5] + $ar_buf[9]); $dev->setDrops($ar_buf[12] + $ar_buf[6]); } else { $dev->setTxBytes($ar_buf[9]); $dev->setRxBytes($ar_buf[6]); $dev->setErrors($ar_buf[5] + $ar_buf[8]); $dev->setDrops($ar_buf[11]); } } if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS) && (CommonFunctions::executeProgram('ifconfig', $ar_buf[0].' 2>/dev/null', $bufr2, PSI_DEBUG))) { $bufe2 = preg_split("/\n/", $bufr2, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe2 as $buf2) { if (preg_match('/^\s+ether\s+(\S+)/i', $buf2, $ar_buf2)) { if (!defined('PSI_HIDE_NETWORK_MACADDR') || !PSI_HIDE_NETWORK_MACADDR) $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').preg_replace('/:/', '-', strtoupper($ar_buf2[1]))); } elseif (preg_match('/^\s+inet\s+(\S+)\s+netmask/i', $buf2, $ar_buf2)) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1]); } elseif ((preg_match('/^\s+inet6\s+([^\s%]+)\s+prefixlen/i', $buf2, $ar_buf2) || preg_match('/^\s+inet6\s+([^\s%]+)%\S+\s+prefixlen/i', $buf2, $ar_buf2)) && ($ar_buf2[1]!="::") && !preg_match('/^fe80::/i', $ar_buf2[1])) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').strtolower($ar_buf2[1])); } elseif (preg_match('/^\s+media:\s+/i', $buf2) && preg_match('/[\(\s](\d+)(G*)base/i', $buf2, $ar_buf2)) { if (isset($ar_buf2[2]) && strtoupper($ar_buf2[2])=="G") { $unit = "G"; } else { $unit = "M"; } if (preg_match('/[<\s]([^\s<]+)-duplex/i', $buf2, $ar_buf3)) $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1].$unit.'b/s '.strtolower($ar_buf3[1])); else $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1].$unit.'b/s'); } } } $this->sys->setNetDevices($dev); } } } } } /** * get icon name and distro extended check * * @return void */ private function _distroicon() { if (CommonFunctions::rfts('/etc/version', $version, 1, 4096, false) && (($version=trim($version)) != '')) { if (extension_loaded('pfSense')) { // pfSense detection $this->sys->setDistribution('pfSense '. $version); $this->sys->setDistributionIcon('pfSense.png'); } elseif (preg_match('/^FreeNAS/i', $version)) { // FreeNAS detection $this->sys->setDistribution($version); $this->sys->setDistributionIcon('FreeNAS.png'); } elseif (preg_match('/^TrueNAS/i', $version)) { // TrueNAS detection $this->sys->setDistribution($version); $this->sys->setDistributionIcon('TrueNAS.png'); } else { $this->sys->setDistributionIcon('FreeBSD.png'); } } else { $this->sys->setDistributionIcon('FreeBSD.png'); } } /** * extend the memory information with additional values * * @return void */ private function _memoryadditional() { $pagesize = $this->grabkey("hw.pagesize"); $this->sys->setMemCache($this->grabkey("vm.stats.vm.v_cache_count") * $pagesize); $this->sys->setMemApplication(($this->grabkey("vm.stats.vm.v_active_count") + $this->grabkey("vm.stats.vm.v_wire_count")) * $pagesize); $this->sys->setMemBuffer($this->sys->getMemUsed() - $this->sys->getMemApplication() - $this->sys->getMemCache()); } /** * Processes * * @return void */ protected function _processes() { if (CommonFunctions::executeProgram('ps', 'aux', $bufr, PSI_DEBUG)) { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $processes['*'] = 0; foreach ($lines as $line) { if (preg_match("/^\S+\s+\d+\s+\S+\s+\S+\s+\d+\s+\d+\s+\S+\s+(\w)/", $line, $ar_buf)) { $processes['*']++; $state = $ar_buf[1]; if ($state == 'L') $state = 'D'; //linux format elseif ($state == 'I') $state = 'S'; if (isset($processes[$state])) { $processes[$state]++; } else { $processes[$state] = 1; } } } if ($processes['*'] > 0) { $this->sys->setProcesses($processes); } } } /** * get the information * * @see BSDCommon::build() * * @return void */ public function build() { parent::build(); if (!$this->blockname || $this->blockname==='vitals') { $this->_distroicon(); $this->_processes(); } if (!$this->blockname || $this->blockname==='memory') { $this->_memoryadditional(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } } } phpsysinfo-3.4.4/includes/os/class.GNU.inc.php000066400000000000000000000103051467431054600212020ustar00rootroot00000000000000 * @copyright 2012 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.GNU.inc.php 687 2012-09-06 20:54:49Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * GNU sysinfo class * get all the required information from GNU * * @category PHP * @package PSI GNU class * @author Mieczyslaw Nalewaj * @copyright 2022 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class GNU extends Linux { /** * Network devices * includes also rx/tx bytes * * @return void */ protected function _network($bufr = null) { if ($this->sys->getOS() == 'GNU') { if (CommonFunctions::executeProgram('ifconfig', '-a', $bufr, PSI_DEBUG)) { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $was = false; $macaddr = ""; $dev = null; foreach ($lines as $line) { if (preg_match("/^\/dev\/([^\s:]+)/", $line, $ar_buf) || preg_match("/^([^\s:]+)/", $line, $ar_buf)) { if ($was) { if ($macaddr != "") { $dev->setInfo($macaddr.($dev->getInfo()?';'.$dev->getInfo():'')); } $this->sys->setNetDevices($dev); } $macaddr = ""; $dev = new NetDevice(); $dev->setName($ar_buf[1]); $was = true; } else { if ($was) { if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS)) { if (preg_match('/^\s+inet address\s+(\S+)$/', $line, $ar_buf)) { $dev->setInfo($ar_buf[1]); } elseif (preg_match('/^\s+hardware addr\s+(\S+)$/', $line, $ar_buf)) { if (!defined('PSI_HIDE_NETWORK_MACADDR') || !PSI_HIDE_NETWORK_MACADDR) { $macaddr = preg_replace('/:/', '-', strtoupper($ar_buf[1])); if ($macaddr === '00-00-00-00-00-00') { // empty $macaddr = ""; } } } } } } } if ($was) { if ($macaddr != "") { $dev->setInfo($macaddr.($dev->getInfo()?';'.$dev->getInfo():'')); } $this->sys->setNetDevices($dev); } } } else { parent::_network($bufr); } } /** * Number of Users * * @return void */ protected function _users() { if ($this->sys->getOS() == 'GNU') { if (CommonFunctions::executeProgram('who', '', $strBuf, PSI_DEBUG)) { if (strlen($strBuf) > 0) { $lines = preg_split('/\n/', $strBuf); preg_match_all('/^login\s+/m', $strBuf, $ttybuf); if (($who = count($lines)-count($ttybuf[0])) > 0) { $this->sys->setUsers($who); } } } } else { parent::_users(); } } /** * get the information * * @return void */ public function build() { if ($this->sys->getOS() == 'GNU') { $this->error->addWarning("The GNU Hurd version of phpSysInfo is a work in progress, some things currently don't work"); } parent::build(); } } phpsysinfo-3.4.4/includes/os/class.HPUX.inc.php000066400000000000000000000316151467431054600213440ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.HPUX.inc.php 596 2012-07-05 19:37:48Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * HP-UX sysinfo class * get all the required information from HP-UX system * * @category PHP * @package PSI HPUX OS class * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class HPUX extends OS { /** * uptime command result. */ private $_uptime = null; /** * Virtual Host Name * * @return void */ private function _hostname() { if (PSI_USE_VHOST) { if (CommonFunctions::readenv('SERVER_NAME', $hnm)) $this->sys->setHostname($hnm); } else { if (CommonFunctions::executeProgram('hostname', '', $ret)) { $this->sys->setHostname($ret); } } } /** * HP-UX Version * * @return void */ private function _kernel() { if (CommonFunctions::executeProgram('uname', '-srvm', $ret)) { $this->sys->setKernel($ret); } } /** * UpTime * time the system is running * * @return void */ private function _uptime() { if (($this->_uptime !== null) || CommonFunctions::executeProgram('uptime', '', $this->_uptime)) { if (preg_match("/up (\d+) days,\s*(\d+):(\d+),/", $this->_uptime, $ar_buf)) { $min = $ar_buf[3]; $hours = $ar_buf[2]; $days = $ar_buf[1]; $this->sys->setUptime($days * 86400 + $hours * 3600 + $min * 60); } } } /** * Processor Load * optionally create a loadbar * * @return void */ private function _loadavg() { if (($this->_uptime !== null) || CommonFunctions::executeProgram('uptime', '', $this->_uptime)) { if (preg_match("/average: (.*), (.*), (.*)$/", $this->_uptime, $ar_buf)) { $this->sys->setLoad($ar_buf[1].' '.$ar_buf[2].' '.$ar_buf[3]); } } } /** * CPU information * All of the tags here are highly architecture dependant * * @return void */ private function _cpuinfo() { if (CommonFunctions::rfts('/proc/cpuinfo', $bufr)) { $processors = preg_split('/\s?\n\s?\n/', trim($bufr)); foreach ($processors as $processor) { $dev = new CpuDevice(); $details = preg_split("/\n/", $processor, -1, PREG_SPLIT_NO_EMPTY); foreach ($details as $detail) { if (preg_match('/^([^:]+):(.+)$/', trim($detail) , $arrBuff) && (($arrBuff2 = trim($arrBuff[2])) !== '')) { switch (strtolower(trim($arrBuff[1]))) { case 'model name': case 'cpu': $dev->setModel($arrBuff2); break; case 'cpu mhz': case 'clock': $dev->setCpuSpeed($arrBuff2); break; case 'cycle frequency [hz]': $dev->setCpuSpeed($arrBuff2 / 1000000); break; case 'cpu0clktck': $dev->setCpuSpeed(hexdec($arrBuff2) / 1000000); // Linux sparc64 break; case 'l2 cache': case 'cache size': $dev->setCache(preg_replace("/[a-zA-Z]/", "", $arrBuff2) * 1024); break; case 'bogomips': case 'cpu0bogo': $dev->setBogomips($arrBuff2); } } } } } } /** * PCI devices * * @return void */ private function _pci() { if (CommonFunctions::rfts('/proc/pci', $bufr)) { $device = false; $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe as $buf) { if (preg_match('/^\s*Bus\s/', $buf)) { $device = true; continue; } if ($device) { $dev = new HWDevice(); $dev->setName(preg_replace('/\([^\)]+\)\.$/', '', trim($buf))); $this->sys->setPciDevices($dev); /* list($key, $value) = preg_split('/: /', $buf, 2); if (!preg_match('/bridge/i', $key) && !preg_match('/USB/i', $key)) { $dev = new HWDevice(); $dev->setName(preg_replace('/\([^\)]+\)\.$/', '', trim($value))); $this->sys->setPciDevices($dev); } */ $device = false; } } } } /** * IDE devices * * @return void */ private function _ide() { $bufd = CommonFunctions::gdc('/proc/ide', false); foreach ($bufd as $file) { if (preg_match('/^hd/', $file)) { $dev = new HWDevice(); $dev->setName(trim($file)); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && CommonFunctions::rfts("/proc/ide/".$file."/media", $buf, 1)) { if (trim($buf) == 'disk') { if (CommonFunctions::rfts("/proc/ide/".$file."/capacity", $buf, 1, 4096, false)) { $dev->setCapacity(trim($buf) * 512); } } } $this->sys->setIdeDevices($dev); } } } /** * SCSI devices * * @return void */ private function _scsi() { $get_type = false; if (CommonFunctions::rfts('/proc/scsi/scsi', $bufr, 0, 4096, PSI_DEBUG)) { $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe as $buf) { if (preg_match('/Vendor: (.*) Model: (.*) Rev: (.*)/i', $buf, $dev)) { $get_type = true; continue; } if ($get_type) { preg_match('/Type:\s+(\S+)/i', $buf, $dev_type); $dev = new HWDevice(); $dev->setName($dev[1].' '.$dev[2].' ('.$dev_type[1].')'); $this->sys->setScsiDevices($dev); $get_type = false; } } } } /** * USB devices * * @return void */ private function _usb() { if (CommonFunctions::rfts('/proc/bus/usb/devices', $bufr, 0, 4096, false)) { $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $devnum = -1; $results = array(); foreach ($bufe as $buf) { if (preg_match('/^T/', $buf)) { $devnum++; $results[$devnum] = ""; } elseif (preg_match('/^S:/', $buf)) { list($key, $value) = preg_split('/: /', $buf, 2); list($key, $value2) = preg_split('/=/', $value, 2); if (trim($key) != "SerialNumber") { $results[$devnum] .= " ".trim($value2); } } } foreach ($results as $var) { $dev = new HWDevice(); $dev->setName($var); $this->sys->setUsbDevices($dev); } } } /** * Network devices * includes also rx/tx bytes * * @return void */ private function _network() { if (CommonFunctions::executeProgram('netstat', '-ni | tail -n +2', $netstat)) { $lines = preg_split("/\n/", $netstat, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { $ar_buf = preg_split("/\s+/", $line); if (! empty($ar_buf[0]) && ! empty($ar_buf[3])) { $dev = new NetDevice(); $dev->setName($ar_buf[0]); $dev->setRxBytes($ar_buf[4]); $dev->setTxBytes($ar_buf[6]); $dev->setErrors($ar_buf[5] + $ar_buf[7]); $dev->setDrops($ar_buf[8]); $this->sys->setNetDevices($dev); } } } } /** * Physical memory information and Swap Space information * * @return void */ private function _memory() { if (CommonFunctions::rfts('/proc/meminfo', $bufr)) { $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe as $buf) { if (preg_match('/Mem:\s+(.*)$/', $buf, $ar_buf)) { $ar_buf = preg_split('/\s+/', $ar_buf[1], 6); $this->sys->setMemTotal($ar_buf[0]); $this->sys->setMemUsed($ar_buf[1]); $this->sys->setMemFree($ar_buf[2]); $this->sys->setMemApplication($ar_buf[3]); $this->sys->setMemBuffer($ar_buf[4]); $this->sys->setMemCache($ar_buf[5]); } // Get info on individual swap files if (CommonFunctions::rfts('/proc/swaps', $swaps)) { $swapdevs = preg_split("/\n/", $swaps, -1, PREG_SPLIT_NO_EMPTY); for ($i = 1, $max = (sizeof($swapdevs) - 1); $i < $max; $i++) { $ar_buf = preg_split('/\s+/', $swapdevs[$i], 6); $dev = new DiskDevice(); $dev->setMountPoint($ar_buf[0]); $dev->setName("SWAP"); $dev->setFsType('swap'); $dev->setTotal($ar_buf[2] * 1024); $dev->setUsed($ar_buf[3] * 1024); $dev->setFree($dev->getTotal() - $dev->getUsed()); $this->sys->setSwapDevices($dev); } } } } } /** * filesystem information * * @return void */ private function _filesystems() { if (CommonFunctions::executeProgram('df', '-kP', $df, PSI_DEBUG)) { $mounts = preg_split("/\n/", $df, -1, PREG_SPLIT_NO_EMPTY); if (CommonFunctions::executeProgram('mount', '-v', $s, PSI_DEBUG)) { $lines = preg_split("/\n/", $s, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { $a = preg_split('/ /', $line, -1, PREG_SPLIT_NO_EMPTY); $fsdev[$a[0]] = $a[4]; } } foreach ($mounts as $mount) { $ar_buf = preg_split("/\s+/", $mount, 6); $dev = new DiskDevice(); $dev->setName($ar_buf[0]); $dev->setTotal($ar_buf[1] * 1024); $dev->setUsed($ar_buf[2] * 1024); $dev->setFree($ar_buf[3] * 1024); $dev->setMountPoint($ar_buf[5]); if (isset($fsdev[$ar_buf[0]])) { $dev->setFsType($fsdev[$ar_buf[0]]); } $this->sys->setDiskDevices($dev); } } } /** * Distribution * * @return void */ private function _distro() { $this->sys->setDistribution('HP-UX'); $this->sys->setDistributionIcon('HPUX.png'); } /** * get the information * * @see PSI_Interface_OS::build() * * @return void */ public function build() { if (!$this->blockname || $this->blockname==='vitals') { $this->_distro(); $this->_hostname(); $this->_kernel(); $this->_uptime(); $this->_users(); $this->_loadavg(); } if (!$this->blockname || $this->blockname==='hardware') { $this->_cpuinfo(); $this->_pci(); $this->_ide(); $this->_scsi(); $this->_usb(); } if (!$this->blockname || $this->blockname==='memory') { $this->_memory(); } if (!$this->blockname || $this->blockname==='filesystem') { $this->_filesystems(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } } } phpsysinfo-3.4.4/includes/os/class.Haiku.inc.php000066400000000000000000000346701467431054600216250ustar00rootroot00000000000000 * @copyright 2012 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.Haiku.inc.php 687 2012-09-06 20:54:49Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * Haiku sysinfo class * get all the required information from Haiku system * * @category PHP * @package PSI Haiku OS class * @author Mieczyslaw Nalewaj * @copyright 2012 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Haiku extends OS { /** * get the cpu information * * @return void */ protected function _cpuinfo() { if (CommonFunctions::executeProgram('sysinfo', '-cpu', $bufr, PSI_DEBUG)) { $cpus = preg_split("/\nCPU #\d+/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $cpuspeed = ""; foreach ($cpus as $cpu) { if (preg_match("/^.*running at (\d+)MHz/", $cpu, $ar_buf)) { $cpuspeed = $ar_buf[1]; } elseif (preg_match("/^: \"(.*)\"/", $cpu, $ar_buf)) { $dev = new CpuDevice(); $dev->setModel($ar_buf[1]); $arrLines = preg_split("/\n/", $cpu, -1, PREG_SPLIT_NO_EMPTY); foreach ($arrLines as $Line) { if (preg_match("/^\s+Data TLB:\s+(.*)K-byte/", $Line, $Line_buf) || preg_match("/^\s+L0 Data TLB:\s+(.*)K-byte/", $Line, $Line_buf)) { $dev->setCache(max(intval($Line_buf[1])*1024, $dev->getCache())); } elseif (preg_match("/^\s+Data TLB:\s+(.*)M-byte/", $Line, $Line_buf) || preg_match("/^\s+L0 Data TLB:\s+(.*)M-byte/", $Line, $Line_buf)) { $dev->setCache(max(intval($Line_buf[1])*1024*1024, $dev->getCache())); } elseif (preg_match("/^\s+Data TLB:\s+(.*)G-byte/", $Line, $Line_buf) || preg_match("/^\s+L0 Data TLB:\s+(.*)G-byte/", $Line, $Line_buf)) { $dev->setCache(max(intval($Line_buf[1])*1024*1024*1024, $dev->getCache())); } elseif (preg_match("/\s+VMX/", $Line, $Line_buf)) { $dev->setVirt("vmx"); } elseif (preg_match("/\s+SVM/", $Line, $Line_buf)) { $dev->setVirt("svm"); } } if ($cpuspeed != "") { $dev->setCpuSpeed($cpuspeed); } $this->sys->setCpus($dev); } } } } /** * PCI devices * get the pci device information * * @return void */ protected function _pci() { if (CommonFunctions::executeProgram('listdev', '', $bufr, PSI_DEBUG)) { // $devices = preg_split("/^device |\ndevice /", $bufr, -1, PREG_SPLIT_NO_EMPTY); $devices = preg_split("/^device /m", $bufr, -1, PREG_SPLIT_NO_EMPTY); foreach ($devices as $device) { $ar_buf = preg_split("/\n/", $device); if (count($ar_buf) >= 3) { if (preg_match("/^([^\(\[\n]*)/", $device, $ar_buf2)) { if (preg_match("/^[^\(]*\((.*)\)/", $device, $ar_buf3)) { $ar_buf2[1] = $ar_buf3[1]; } $name = trim($ar_buf2[1]).": "; if (preg_match("/^\s+vendor\s+[0-9a-fA-F]{4}:\s+(.*)/", $ar_buf[1], $ar_buf3)) { $name .=$ar_buf3[1]." "; } if (preg_match("/^\s+device\s+[0-9a-fA-F]{4}:\s+(.*)/", $ar_buf[2], $ar_buf3)) { $name .=$ar_buf3[1]." "; } $dev = new HWDevice(); $dev->setName(trim($name)); $this->sys->setPciDevices($dev); } } } } } /** * USB devices * get the usb device information * * @return void */ protected function _usb() { if (CommonFunctions::executeProgram('listusb', '', $bufr, PSI_DEBUG)) { $devices = preg_split("/\n/", $bufr); foreach ($devices as $device) { if (preg_match("/^\S+\s+\S+\s+\"(.*)\"\s+\"(.*)\"/", $device, $ar_buf)) { $dev = new HWDevice(); $dev->setName(trim($ar_buf[1]." ".$ar_buf[2])); $this->sys->setUSBDevices($dev); } } } } /** * Haiku Version * * @return void */ private function _kernel() { if (CommonFunctions::executeProgram('uname', '-rvm', $ret)) { $this->sys->setKernel($ret); } } /** * Distribution * * @return void */ protected function _distro() { if (CommonFunctions::executeProgram('uname', '-sr', $ret)) $this->sys->setDistribution($ret); else $this->sys->setDistribution('Haiku'); $this->sys->setDistributionIcon('Haiku.png'); } /** * UpTime * time the system is running * * @return void */ private function _uptime() { if (CommonFunctions::executeProgram('uptime', '', $buf)) { if (preg_match("/up (\d+) day[s]?,[ ]+(\d+):(\d+),/", $buf, $ar_buf)) { $min = $ar_buf[3]; $hours = $ar_buf[2]; $days = $ar_buf[1]; $this->sys->setUptime($days * 86400 + $hours * 3600 + $min * 60); } elseif (preg_match("/up[ ]+(\d+):(\d+),/", $buf, $ar_buf)) { $min = $ar_buf[2]; $hours = $ar_buf[1]; $this->sys->setUptime($hours * 3600 + $min * 60); } elseif (preg_match("/up (\d+) day[s]?, (\d+) hour[s]?, (\d+) minute[s]?$/", $buf, $ar_buf)) { $min = $ar_buf[3]; $hours = $ar_buf[2]; $days = $ar_buf[1]; $this->sys->setUptime($days * 86400 + $hours * 3600 + $min * 60); } elseif (preg_match("/up (\d+) hour[s]?, (\d+) minute[s]?$/", $buf, $ar_buf)) { $min = $ar_buf[2]; $hours = $ar_buf[1]; $this->sys->setUptime($hours * 3600 + $min * 60); } elseif (preg_match("/up (\d+) minute[s]?$/", $buf, $ar_buf)) { $min = $ar_buf[1]; $this->sys->setUptime($min * 60); } } } /** * Processor Load * optionally create a loadbar * * @return void */ private function _loadavg() { if (CommonFunctions::executeProgram('top', '-n 1 -i 1', $buf)) { if (preg_match("/\s+(\S+)%\s+TOTAL\s+\(\S+%\s+idle time/", $buf, $ar_buf)) { $this->sys->setLoad($ar_buf[1]); if (PSI_LOAD_BAR) { $this->sys->setLoadPercent(round($ar_buf[1])); } } } } /** * Number of Users * * @return void */ protected function _users() { $this->sys->setUsers(1); } /** * Virtual Host Name * * @return void */ private function _hostname() { if (PSI_USE_VHOST) { if (CommonFunctions::readenv('SERVER_NAME', $hnm)) $this->sys->setHostname($hnm); } else { if (CommonFunctions::executeProgram('uname', '-n', $result, PSI_DEBUG)) { $ip = gethostbyname($result); if ($ip != $result) { $this->sys->setHostname(gethostbyaddr($ip)); } } } } /** * Physical memory information and Swap Space information * * @return void */ private function _memory() { if (CommonFunctions::executeProgram('sysinfo', '-mem', $bufr, PSI_DEBUG)) { if (preg_match("/(.*)bytes free\s+\(used\/max\s+(.*)\s+\/\s+(.*)\)\s*\n\s+\(cached\s+(.*)\)/", $bufr, $ar_buf)) { $this->sys->setMemTotal($ar_buf[3]); $this->sys->setMemFree($ar_buf[1]); $this->sys->setMemCache(min($ar_buf[4], $ar_buf[2])); $this->sys->setMemUsed($ar_buf[2]); } } if (CommonFunctions::executeProgram('vmstat', '', $bufr, PSI_DEBUG)) { if (preg_match("/max swap space:\s+(.*)\nfree swap space:\s+(.*)\n/", $bufr, $ar_buf)) { if ($ar_buf[1]>0) { $dev = new DiskDevice(); $dev->setMountPoint("/boot/common/var/swap"); $dev->setName("SWAP"); $dev->setTotal($ar_buf[1]); $dev->setFree($ar_buf[2]); $dev->setUSed($ar_buf[1]-$ar_buf[2]); $this->sys->setSwapDevices($dev); } } } } /** * filesystem information * * @return void */ private function _filesystems() { if (CommonFunctions::executeProgram('df', '-b', $df, PSI_DEBUG)) { $df = preg_split("/\n/", $df, -1, PREG_SPLIT_NO_EMPTY); foreach ($df as $df_line) { $ar_buf = preg_split("/\s+/", $df_line); if ((substr($df_line, 0, 1) == "/") && (count($ar_buf) == 6)) { $dev = new DiskDevice(); $dev->setMountPoint($ar_buf[0]); $dev->setName($ar_buf[5]); $dev->setFsType($ar_buf[1]); $dev->setOptions($ar_buf[4]); $dev->setTotal($ar_buf[2] * 1024); $dev->setFree($ar_buf[3] * 1024); $dev->setUsed($dev->getTotal() - $dev->getFree()); $this->sys->setDiskDevices($dev); } } } } /** * network information * * @return void */ private function _network() { if (CommonFunctions::executeProgram('ifconfig', '', $bufr, PSI_DEBUG)) { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $was = false; $errors = 0; $drops = 0; $dev = null; foreach ($lines as $line) { if (preg_match("/^(\S+)/", $line, $ar_buf)) { if ($was) { $dev->setErrors($errors); $dev->setDrops($drops); $this->sys->setNetDevices($dev); } $errors = 0; $drops = 0; $dev = new NetDevice(); $dev->setName($ar_buf[1]); $was = true; } else { if ($was) { if (preg_match('/\sReceive:\s\d+\spackets,\s(\d+)\serrors,\s(\d+)\sbytes,\s\d+\smcasts,\s(\d+)\sdropped/i', $line, $ar_buf2)) { $errors +=$ar_buf2[1]; $drops +=$ar_buf2[3]; $dev->setRxBytes($ar_buf2[2]); } elseif (preg_match('/\sTransmit:\s\d+\spackets,\s(\d+)\serrors,\s(\d+)\sbytes,\s\d+\smcasts,\s(\d+)\sdropped/i', $line, $ar_buf2)) { $errors +=$ar_buf2[1]; $drops +=$ar_buf2[3]; $dev->setTxBytes($ar_buf2[2]); } if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS)) { if (preg_match('/\sEthernet,\s+Address:\s(\S*)/i', $line, $ar_buf2)) { if (!defined('PSI_HIDE_NETWORK_MACADDR') || !PSI_HIDE_NETWORK_MACADDR) $dev->setInfo(preg_replace('/:/', '-', strtoupper($ar_buf2[1]))); } elseif (preg_match('/^\s+inet\saddr:\s(\S*),/i', $line, $ar_buf2)) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1]); } elseif (preg_match('/^\s+inet6\saddr:\s(\S*),/i', $line, $ar_buf2) && ($ar_buf2[1]!="::") && !preg_match('/^fe80::/i', $ar_buf2[1])) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').strtolower($ar_buf2[1])); } } } } } if ($was) { $dev->setErrors($errors); $dev->setDrops($drops); $this->sys->setNetDevices($dev); } } } /** * Processes * * @return void */ protected function _processes() { if (CommonFunctions::executeProgram('ps', '', $bufr, PSI_DEBUG)) { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $processes['*'] = 0; foreach ($lines as $line) { if (preg_match("/^(kernel_team|\/)/", $line, $ar_buf)) { $processes['*']++; } } if ($processes['*'] > 0) { $processes[' '] = $processes['*']; $this->sys->setProcesses($processes); } } } /** * get the information * * @return void */ public function build() { $this->error->addWarning("The Haiku version of phpSysInfo is a work in progress, some things currently don't work"); if (!$this->blockname || $this->blockname==='vitals') { $this->_distro(); $this->_hostname(); $this->_kernel(); $this->_uptime(); $this->_users(); $this->_loadavg(); $this->_processes(); } if (!$this->blockname || $this->blockname==='hardware') { $this->_cpuinfo(); $this->_pci(); $this->_usb(); } if (!$this->blockname || $this->blockname==='memory') { $this->_memory(); } if (!$this->blockname || $this->blockname==='filesystem') { $this->_filesystems(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } } } phpsysinfo-3.4.4/includes/os/class.Linux.inc.php000066400000000000000000003664041467431054600216660ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.Linux.inc.php 712 2012-12-05 14:09:18Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * Linux sysinfo class * get all the required information from Linux system * * @category PHP * @package PSI Linux OS class * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Linux extends OS { /** * Uptime command result. */ private $_uptime = null; /** * Assoc array of all CPUs loads. */ protected $_cpu_loads = null; /** * Version string. */ private $_kernel_string = null; /** * Array of info from Bios. */ private $_machine_info = null; /** * Content of dmesg file. */ private $_dmesg_f = null; /** * Result of executing dmesg command. */ private $_dmesg_c = null; /** * Result of systemd-detect-virt. */ private $system_detect_virt = null; /** * Read contents of the dmesg file. * * @return string */ private function _get_dmesg_f() { if ($this->_dmesg_f === null) { $this->_dmesg_f = ""; if (CommonFunctions::rfts('/var/log/dmesg', $result, 0, 4096, false)) { $this->_dmesg_f = trim($result); } } return $this->_dmesg_f; } /** * Save output of the dmesg command. * * @return string */ private function _get_dmesg_c() { if ($this->_dmesg_c === null) { $this->_dmesg_c = ""; if (CommonFunctions::executeProgram('dmesg', '', $result, false)) { $this->_dmesg_c = trim($result); } } return $this->_dmesg_c; } /** * Get machine info * * @return string */ private function _get_machine_info() { if ($this->_machine_info === null) { $this->_machine_info = array(); if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO) { if (CommonFunctions::executeProgram('systemd-detect-virt', '-v', $resultv, false)) { $this->system_detect_virt = $resultv; } } $vendor_array = array(); if (((($dmesg = $this->_get_dmesg_f()) !== null) && preg_match('/^[\s\[\]\.\d]*DMI:\s*(.+)/m', $dmesg, $ar_buf)) || ((($dmesg = $this->_get_dmesg_c()) !== null) && preg_match('/^[\s\[\]\.\d]*DMI:\s*(.+)/m', $dmesg, $ar_buf))) { $this->_machine_info['machine'] = trim($ar_buf[1]); if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO && ($this->system_detect_virt === null)) { /* Test this before sys_vendor to detect KVM over QEMU */ if (CommonFunctions::rfts('/sys/devices/virtual/dmi/id/product_name', $buf, 1, 4096, false) && (trim($buf)!="")) { $vendor_array[] = $product_name = trim($buf); } else { $product_name = ''; } if (CommonFunctions::rfts('/sys/devices/virtual/dmi/id/sys_vendor', $buf, 1, 4096, false) && (trim($buf)!="")) { $vendor_array[] = trim($buf); } if (CommonFunctions::rfts('/sys/devices/virtual/dmi/id/board_vendor', $buf, 1, 4096, false) && (trim($buf)!="")) { if ($product_name != "") { $vendor_array[] = trim($buf)." ".$product_name; } else { $vendor_array[] = trim($buf); } } else { $vendor_array[] = $this->_machine_info['machine']; } if (CommonFunctions::rfts('/sys/devices/virtual/dmi/id/bios_vendor', $buf, 1, 4096, false) && (trim($buf)!="")) { $vendor_array[] = trim($buf); } if (CommonFunctions::rfts('/sys/devices/virtual/dmi/id/product_version', $buf, 1, 4096, false) && (trim($buf)!="")) { $vendor_array[] = trim($buf); } } } else { // 'machine' data from /sys/devices/virtual/dmi/id/ $bios = ""; if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO && ($this->system_detect_virt === null)) { // Test this before sys_vendor to detect KVM over QEMU if (CommonFunctions::rfts('/sys/devices/virtual/dmi/id/product_name', $buf, 1, 4096, false) && (trim($buf)!="")) { $vendor_array[] = $product_name = trim($buf); } else { $product_name = ''; } if (CommonFunctions::rfts('/sys/devices/virtual/dmi/id/sys_vendor', $buf, 1, 4096, false) && (trim($buf)!="")) { $vendor_array[] = trim($buf); } if (CommonFunctions::rfts('/sys/devices/virtual/dmi/id/board_vendor', $buf, 1, 4096, false) && (trim($buf)!="")) { if ($product_name != "") { $this->_machine_info['machine'] = trim($buf)." ".$product_name; } else { $this->_machine_info['machine'] = trim($buf); } $vendor_array[] = $this->_machine_info["machine"]; } elseif ($product_name != "") { $this->_machine_info['machine'] = $product_name; } if (CommonFunctions::rfts('/sys/devices/virtual/dmi/id/bios_vendor', $buf, 1, 4096, false) && (trim($buf)!="")) { $vendor_array[] = trim($buf); } if (CommonFunctions::rfts('/sys/devices/virtual/dmi/id/product_version', $buf, 1, 4096, false) && (trim($buf)!="")) { $vendor_array[] = trim($buf); } } else { if (CommonFunctions::rfts('/sys/devices/virtual/dmi/id/board_vendor', $buf, 1, 4096, false) && (trim($buf)!="")) { $this->_machine_info['machine'] = trim($buf); } if (CommonFunctions::rfts('/sys/devices/virtual/dmi/id/product_name', $buf, 1, 4096, false) && (trim($buf)!="")) { if (isset($this->_machine_info['machine'])) { $this->_machine_info['machine'] .= " ".trim($buf); } else { $this->_machine_info['machine'] = trim($buf); } } } if (CommonFunctions::rfts('/sys/devices/virtual/dmi/id/board_name', $buf, 1, 4096, false) && (trim($buf)!="")) { if (isset($this->_machine_info['machine'])) { $this->_machine_info['machine'] .= "/".trim($buf); } else { $this->_machine_info['machine'] = trim($buf); } } if (CommonFunctions::rfts('/sys/devices/virtual/dmi/id/bios_version', $buf, 1, 4096, false) && (trim($buf)!="")) { $bios = trim($buf); } if (CommonFunctions::rfts('/sys/devices/virtual/dmi/id/bios_date', $buf, 1, 4096, false) && (trim($buf)!="")) { $bios = trim($bios." ".trim($buf)); } if ($bios != "") { if (isset($this->_machine_info['machine'])) { $this->_machine_info['machine'] .= ", BIOS ".$bios; } else { $this->_machine_info['machine'] = "BIOS ".$bios; } } } if (isset($this->_machine_info['machine'])) { $this->_machine_info['machine'] = trim(preg_replace("/^\/,?/", "", preg_replace("/ ?(To be filled by O\.E\.M\.|System manufacturer|System Product Name|Not Specified|Default string) ?/i", "", $this->_machine_info['machine']))); } if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO && ($this->system_detect_virt === null) && count($vendor_array) > 0) { $virt = CommonFunctions::decodevirtualizer($vendor_array); if ($virt !== null) { $this->_machine_info['hypervisor'] = $virt; } } } return $this->_machine_info; } /** * Get kernel string * * @return string */ private function _get_kernel_string() { if ($this->_kernel_string === null) { $this->_kernel_string = ""; if ($this->sys->getOS() !== 'SSH') { if ((CommonFunctions::executeProgram($uname="uptrack-uname", '-r', $strBuf, false) && ($strBuf !== '')) || // show effective kernel if ksplice uptrack is installed (CommonFunctions::executeProgram($uname="uname", '-r', $strBuf, PSI_DEBUG) && ($strBuf !== ''))) { $this->_kernel_string = $strBuf; if (CommonFunctions::executeProgram($uname, '-v', $strBuf, PSI_DEBUG) && ($strBuf !== '')) { if (preg_match('/ SMP /', $strBuf)) { $this->_kernel_string .= ' (SMP)'; } } if (CommonFunctions::executeProgram($uname, '-m', $strBuf, PSI_DEBUG) && ($strBuf !== '')) { $this->_kernel_string .= ' '.$strBuf; } } elseif (CommonFunctions::rfts('/proc/version', $strBuf, 1)) { if (preg_match('/\/Hurd-([^\)]+)/', $strBuf, $ar_buf)) { $this->_kernel_string = $ar_buf[1]; } elseif (preg_match('/version\s+(\S+)/', $strBuf, $ar_buf)) { $this->_kernel_string = $ar_buf[1]; if (preg_match('/ SMP /', $strBuf)) { $this->_kernel_string .= ' (SMP)'; } } } } } return $this->_kernel_string; } /** * check OS type */ public function __construct($blockname = false) { parent::__construct($blockname); if (($this->sys->getOS() == 'SSH') && CommonFunctions::executeProgram('uname', '-s', $strBuf, false) && ($strBuf !== '')) { $this->sys->setOS($strBuf); } } /** * Machine * * @return void */ protected function _machine() { $machine_info = $this->_get_machine_info(); if (isset($machine_info['machine'])) { $machine = $machine_info['machine']; } else { $machine = ""; } if (CommonFunctions::fileexists($filename="/etc/config/uLinux.conf") // QNAP detection && CommonFunctions::rfts($filename, $buf, 0, 4096, false) && preg_match("/^Rsync\sModel\s*=\s*QNAP/m", $buf) && CommonFunctions::fileexists($filename="/etc/platform.conf") // Platform detection && CommonFunctions::rfts($filename, $buf, 0, 4096, false) && preg_match("/^DISPLAY_NAME\s*=\s*(\S+)/m", $buf, $mach_buf) && ($mach_buf[1]!=="")) { if ($machine !== "") { $machine = "QNAP ".$mach_buf[1].' - '.$machine; } else { $machine = "QNAP ".$mach_buf[1]; } } if ($machine !== "") { $this->sys->setMachine($machine); } } /** * Hostname * * @return void */ protected function _hostname() { if (PSI_USE_VHOST && !defined('PSI_EMU_PORT')) { if (CommonFunctions::readenv('SERVER_NAME', $hnm)) $this->sys->setHostname($hnm); } else { if (CommonFunctions::rfts('/proc/sys/kernel/hostname', $result, 1, 4096, PSI_DEBUG && (PSI_OS != 'Android'))) { $result = trim($result); $ip = gethostbyname($result); if ($ip != $result) { $this->sys->setHostname(trim(gethostbyaddr($ip), ".")); } } elseif (CommonFunctions::executeProgram('hostname', '', $ret, false)) { $this->sys->setHostname($ret); } elseif (CommonFunctions::executeProgram('uname', '-n', $ret, false)) { $this->sys->setHostname($ret); } } } /** * Kernel Version * * @return void */ protected function _kernel() { if (($verBuf = $this->_get_kernel_string()) != "") { $this->sys->setKernel($verBuf); } } /** * Virtualizer info * * @return void */ protected function _virtualizer() { if (!defined('PSI_SHOW_VIRTUALIZER_INFO') || !PSI_SHOW_VIRTUALIZER_INFO) { return; } if ($this->system_detect_virt !== null) { if (($this->system_detect_virt !== "") && ($this->system_detect_virt !== "none")) { $this->sys->setVirtualizer($this->system_detect_virt); } if (($verBuf = $this->_get_kernel_string()) !== "") { if (preg_match('/^[\d\.-]+-microsoft-standard/', $verBuf)) { $this->sys->setVirtualizer('wsl2', 'wsl'); // Windows Subsystem for Linux 2 } } if (CommonFunctions::executeProgram('systemd-detect-virt', '-c', $resultc, false) && ($resultc !== "") && ($resultc !== "none")) { $this->sys->setVirtualizer($resultc); } } else { $cpuvirt = $this->sys->getVirtualizer(); // previous info from _cpuinfo() $novm = true; // code based on src/basic/virt.c from systemd-detect-virt source code (https://github.com/systemd/systemd) // First, try to detect Oracle Virtualbox, Amazon EC2 Nitro and Parallels, even if they use KVM, // as well as Xen even if it cloaks as Microsoft Hyper-V. Attempt to detect uml at this stage also // since it runs as a user-process nested inside other VMs. Also check for Xen now, because Xen PV // mode does not override CPUID when nested inside another hypervisor. $machine_info = $this->_get_machine_info(); if (isset($machine_info['hypervisor'])) { $hypervisor = $machine_info['hypervisor']; if (($hypervisor === 'oracle') || ($hypervisor === 'amazon') || ($hypervisor === 'xen') || ($hypervisor === 'parallels')) { $this->sys->setVirtualizer($hypervisor); $novm = false; } } // Detect UML if ($novm) { if (isset($cpuvirt["cpuid:UserModeLinux"])) { $this->sys->setVirtualizer('uml'); // User-mode Linux $novm = false; } } // Detect Xen if ($novm && is_dir('/proc/xen')) { // xen Dom0 is detected as XEN in hypervisor and maybe others. // In order to detect the Dom0 as not virtualization we need to // double-check it if (CommonFunctions::rfts('/sys/hypervisor/properties/features', $features, 1, 4096, false)) { if ((hexdec($features) & 2048) == 0) { // XENFEAT_dom0 is not set $this->sys->setVirtualizer('xen'); // Xen hypervisor (only domU, not dom0) $novm = false; } } elseif (CommonFunctions::rfts('/proc/xen/capabilities', $capabilities, 1, 4096, false) && !preg_match('/control_d/', $capabilities)) { // control_d not in capabilities $this->sys->setVirtualizer('xen'); // Xen hypervisor (only domU, not dom0) $novm = false; } } // Second, try to detect from CPUID, this will report KVM for whatever software is used even if info in DMI is overwritten. // Since the vendor_id in /proc/cpuinfo is overwritten on virtualization we use values from msr-cpuid. if ($novm && CommonFunctions::executeProgram('msr-cpuid', '', $bufr, false) && (preg_match('/^40000000 00000000: [0-9a-f]{8} \S{4} [0-9a-f]{8} ([A-Za-z0-9\.]{4}) [0-9a-f]{8} ([A-Za-z0-9\.]{4}) [0-9a-f]{8} ([A-Za-z0-9\.]{4})/m', $bufr, $cpuid))) { $virt = CommonFunctions::decodevirtualizer($cpuid[1].$cpuid[2].$cpuid[3]); if ($virt !== null) { $this->sys->setVirtualizer($virt); } } // Third, try to detect from DMI. if ($novm && isset($hypervisor)) { $this->sys->setVirtualizer($hypervisor); $novm = false; } // Check high-level hypervisor sysfs file if ($novm && CommonFunctions::rfts('/sys/hypervisor/type', $type, 1, 4096, false) && ($type === "xen")) { $this->sys->setVirtualizer('xen'); // Xen hypervisor $novm = false; } if ($novm) { if (CommonFunctions::rfts('/proc/device-tree/hypervisor/compatible', $compatible, 1, 4096, false)) { switch ($compatible) { case 'linux,kvm': $this->sys->setVirtualizer('kvm'); // KVM $novm = false; break; case 'vmware': $this->sys->setVirtualizer('vmware'); // VMware $novm = false; break; case 'xen': $this->sys->setVirtualizer('xen'); // Xen hypervisor $novm = false; } } else { if (CommonFunctions::fileexists('/proc/device-tree/ibm,partition-name') && CommonFunctions::fileexists('/proc/device-tree/hmc-managed?') && CommonFunctions::fileexists('/proc/device-tree/chosen/qemu,graphic-width')) { $this->sys->setVirtualizer('powervm'); // IBM PowerVM hypervisor $novm = false; } else { $names = CommonFunctions::findglob('/proc/device-tree', GLOB_NOSORT); if (is_array($names) && (($total = count($names)) > 0)) { for ($i = 0; $i < $total; $i++) { if (preg_match('/fw-cfg/', $names[$i])) { $this->sys->setVirtualizer('qemu'); // QEMU $novm = false; break; } } } if (CommonFunctions::rfts('/proc/device-tree/compatible', $compatible, 1, 4096, false) && ($compatible === "qemu,pseries")) { $this->sys->setVirtualizer('qemu'); // QEMU $novm = false; } } } } if ($novm && CommonFunctions::rfts('/proc/sysinfo', $sysinfo, 0, 4096, false) && preg_match('//VM00 Control Program:\s*(\S+)/m', $sysinfo, $vcp)) { if ($vcp[1] === 'z/VM') { $this->sys->setVirtualizer('zvm'); // s390 z/VM } else { $this->sys->setVirtualizer('kvm'); // KVM } $novm = false; } // Additional tests outside of the systemd-detect-virt source code if ($novm && ( ((($dmesg = $this->_get_dmesg_f()) !== null) && preg_match('/^[\s\[\]\.\d]*Hypervisor detected:\s*(.+)/m', $dmesg, $ar_buf)) || ((($dmesg = $this->_get_dmesg_c()) !== null) && preg_match('/^[\s\[\]\.\d]*Hypervisor detected:\s*(.+)/m', $dmesg, $ar_buf)))) { switch (trim($ar_buf[1])) { case 'VMware': $this->sys->setVirtualizer('vmware'); // VMware $novm = false; break; case 'KVM': $this->sys->setVirtualizer('kvm'); // KVM $novm = false; break; case 'Microsoft HyperV': case 'Microsoft Hyper-V': $this->sys->setVirtualizer('microsoft'); // Hyper-V $novm = false; break; case 'ACRN': $this->sys->setVirtualizer('acrn'); // ACRN hypervisor $novm = false; break; case 'Jailhouse': $this->sys->setVirtualizer('jailhouse'); // Jailhouse $novm = false; break; case 'Xen': case 'Xen PV': case 'Xen HVM': // xen Dom0 is detected as XEN in hypervisor and maybe others. // In order to detect the Dom0 as not virtualization we need to // double-check it if (CommonFunctions::rfts('/sys/hypervisor/properties/features', $features, 1, 4096, false)) { if ((hexdec($features) & 2048) == 0) { // XENFEAT_dom0 is not set $this->sys->setVirtualizer('xen'); // Xen hypervisor (only domU, not dom0) $novm = false; } } elseif (CommonFunctions::rfts('/proc/xen/capabilities', $capabilities, 1, 4096, false) && !preg_match('/control_d/', $capabilities)) { // control_d not in capabilities $this->sys->setVirtualizer('xen'); // Xen hypervisor (only domU, not dom0) $novm = false; } } } // Detect QEMU cpu if ($novm && isset($cpuvirt["cpuid:QEMU"])) { $this->sys->setVirtualizer('qemu'); // QEMU $novm = false; } if ($novm && isset($cpuvirt["hypervisor"])) { $this->sys->setVirtualizer('unknown'); } if ((count(CommonFunctions::gdc('/proc/vz', false)) == 0) && (count(CommonFunctions::gdc('/proc/bc', false)) > 0)) { $this->sys->setVirtualizer('openvz'); // OpenVZ/Virtuozzo } if (($verBuf = $this->_get_kernel_string()) !== "") { if (preg_match('/^[\d\.-]+-Microsoft/', $verBuf)) { $this->sys->setVirtualizer('wsl'); // Windows Subsystem for Linux } elseif (preg_match('/^[\d\.-]+-microsoft-standard/', $verBuf)) { $this->sys->setVirtualizer('wsl2'); // Windows Subsystem for Linux 2 } } if (CommonFunctions::rfts('/proc/self/cgroup', $strBuf2, 0, 4096, false)) { if (preg_match('/:\/lxc\//m', $strBuf2)) { $this->sys->setVirtualizer('lxc'); // Linux container } elseif (preg_match('/:\/docker\//m', $strBuf2)) { $this->sys->setVirtualizer('docker'); // Docker } elseif (preg_match('/:\/system\.slice\/docker\-/m', $strBuf2)) { $this->sys->setVirtualizer('docker'); // Docker } } } } /** * UpTime * time the system is running * * @return void */ protected function _uptime($bufu = null) { if (CommonFunctions::rfts('/proc/uptime', $buf, 1, 4096, PSI_OS != 'Android')) { $ar_buf = preg_split('/ /', $buf); $this->sys->setUptime(trim($ar_buf[0])); } elseif (($this->_uptime !== null) || ($bufu !== null) || CommonFunctions::executeProgram('uptime', '', $bufu)) { if (($this->_uptime === null) && ($bufu !== null)) { $this->_uptime = $bufu; } if (preg_match("/up (\d+) day[s]?,[ ]+(\d+):(\d+),/", $this->_uptime, $ar_buf)) { $min = $ar_buf[3]; $hours = $ar_buf[2]; $days = $ar_buf[1]; $this->sys->setUptime($days * 86400 + $hours * 3600 + $min * 60); } elseif (preg_match("/up (\d+) day[s]?,[ ]+(\d+) min,/", $this->_uptime, $ar_buf)) { $min = $ar_buf[2]; $days = $ar_buf[1]; $this->sys->setUptime($days * 86400 + $min * 60); } elseif (preg_match("/up[ ]+(\d+):(\d+),/", $this->_uptime, $ar_buf)) { $min = $ar_buf[2]; $hours = $ar_buf[1]; $this->sys->setUptime($hours * 3600 + $min * 60); } elseif (preg_match("/up[ ]+(\d+):(\d+):(\d+)/", $this->_uptime, $ar_buf)) { $sec = $ar_buf[3]; $min = $ar_buf[2]; $hours = $ar_buf[1]; $this->sys->setUptime($hours * 3600 + $min * 60 + $sec); } elseif (preg_match("/up[ ]+(\d+) min,/", $this->_uptime, $ar_buf)) { $min = $ar_buf[1]; $this->sys->setUptime($min * 60); } elseif (preg_match("/up[ ]+(\d+) day[s]?,[ ]+(\d+) hour[s]?,[ ]+(\d+) minute[s]?/", $this->_uptime, $ar_buf)) { $min = $ar_buf[3]; $hours = $ar_buf[2]; $days = $ar_buf[1]; $this->sys->setUptime($days * 86400 + $hours * 3600 + $min * 60); } } } /** * Processor Load * optionally create a loadbar * * @return void */ protected function _loadavg($buf = null) { if ((($buf !== null) || CommonFunctions::rfts('/proc/loadavg', $buf, 1, 4096, PSI_OS != 'Android')) && preg_match("/^\d/", trim($buf))) { $result = preg_split("/\s/", $buf, 4); // don't need the extra values, only first three unset($result[3]); $this->sys->setLoad(implode(' ', $result)); } elseif (($buf === null) && ((($this->_uptime !== null) || CommonFunctions::executeProgram('uptime', '', $this->_uptime)) && preg_match("/load average: (.*), (.*), (.*)$/", $this->_uptime, $ar_buf))) { $this->sys->setLoad($ar_buf[1].' '.$ar_buf[2].' '.$ar_buf[3]); } if (PSI_LOAD_BAR) { $this->sys->setLoadPercent($this->_parseProcStat('cpu')); } } /** * fill the load for a individual cpu, through parsing /proc/stat for the specified cpu * * @param String $cpuline cpu for which load should be meassured * * @return int */ protected function _parseProcStat($cpuline) { if ($this->_cpu_loads === null) { $this->_cpu_loads = array(); $cpu_tmp = array(); if (CommonFunctions::rfts('/proc/stat', $buf, 0, 4096, PSI_DEBUG && (PSI_OS != 'Android'))) { if (preg_match_all('/^(cpu[0-9]*) (.*)/m', $buf, $matches, PREG_SET_ORDER)) { foreach ($matches as $line) { $cpu = $line[1]; $buf2 = $line[2]; $cpu_tmp[$cpu] = array(); $ab = 0; $ac = 0; $ad = 0; $ae = 0; sscanf($buf2, "%Ld %Ld %Ld %Ld", $ab, $ac, $ad, $ae); $cpu_tmp[$cpu]['load'] = $ab + $ac + $ad; // cpu.user + cpu.sys $cpu_tmp[$cpu]['total'] = $ab + $ac + $ad + $ae; // cpu.total } } // we need a second value, wait 1 second befor getting (< 1 second no good value will occour) sleep(1); if (CommonFunctions::rfts('/proc/stat', $buf, 0, 4096, PSI_DEBUG)) { if (preg_match_all('/^(cpu[0-9]*) (.*)/m', $buf, $matches, PREG_SET_ORDER)) { foreach ($matches as $line) { $cpu = $line[1]; if (isset($cpu_tmp[$cpu])) { $buf2 = $line[2]; $ab = 0; $ac = 0; $ad = 0; $ae = 0; sscanf($buf2, "%Ld %Ld %Ld %Ld", $ab, $ac, $ad, $ae); $load2 = $ab + $ac + $ad; // cpu.user + cpu.sys $total2 = $ab + $ac + $ad + $ae; // cpu.total $total = $cpu_tmp[$cpu]['total']; $load = $cpu_tmp[$cpu]['load']; $this->_cpu_loads[$cpu] = 0; if ($total > 0 && $total2 > 0 && $load > 0 && $load2 > 0 && $total2 != $total && $load2 != $load) { $this->_cpu_loads[$cpu] = (100 * ($load2 - $load)) / ($total2 - $total); } } } } } } } if (isset($this->_cpu_loads[$cpuline])) { return $this->_cpu_loads[$cpuline]; } else { return null; } } /** * CPU information * All of the tags here are highly architecture dependant. * * @return void */ protected function _cpuinfo($bufr = null) { if (($bufr !== null) || CommonFunctions::rfts('/proc/cpuinfo', $bufr)) { $cpulist = null; $raslist = null; // sparc if (preg_match('/\nCpu(\d+)Bogo\s*:/i', $bufr)) { $bufr = preg_replace('/\nCpu(\d+)ClkTck\s*:/i', "\nCpu0ClkTck:", preg_replace('/\nCpu(\d+)Bogo\s*:/i', "\n\nprocessor: $1\nCpu0Bogo:", $bufr)); } else { $bufr = preg_replace('/\nCpu(\d+)ClkTck\s*:/i', "\n\nprocessor: $1\nCpu0ClkTck:", $bufr); } if (preg_match('/\nprocessor\s*:\s*\d+\r?\nprocessor\s*:\s*\d+/', $bufr)) { $bufr = preg_replace('/^(processor\s*:\s*\d+)\r?$/m', "$1\n", $bufr); } // IBM/S390 $bufr = preg_replace('/\ncpu number\s*:\s*(\d+)\r?\ncpu MHz dynamic\s*:\s*(\d+)/m', "\nprocessor:$1\nclock:$2", $bufr); // machine $bufr = preg_replace('/(\nmachine\s*:\s*[^\r\n]+)/m', "$1\n", $bufr); $processors = preg_split('/\s?\n\s?\n/', trim($bufr)); //first stage $_arch = null; $_impl = null; $_part = null; $_vari = null; $_hard = null; $_revi = null; $_cpus = null; $_buss = null; $_bogo = null; $_vend = null; $_system = null; $procname = null; foreach ($processors as $processor) if (!preg_match('/^\s*processor\s*:/mi', $processor)) { $details = preg_split("/\n/", $processor, -1, PREG_SPLIT_NO_EMPTY); foreach ($details as $detail) { if (preg_match('/^([^:]+):(.+)$/', trim($detail) , $arrBuff) && (($arrBuff2 = trim($arrBuff[2])) !== '')) { switch (strtolower(trim($arrBuff[1]))) { case 'cpu architecture': $_arch = $arrBuff2; break; case 'cpu implementer': $_impl = $arrBuff2; break; case 'cpu part': $_part = $arrBuff2; break; case 'cpu variant': $_vari = $arrBuff2; break; case 'system type': $_system = $arrBuff2; break; case 'machine': case 'hardware': $_hard = $arrBuff2; break; case 'revision': $_revi = $arrBuff2; break; case 'cpu frequency': if (preg_match('/^(\d+)\s+Hz/i', $arrBuff2, $bufr2)) { $_cpus = round($bufr2[1]/1000000); } elseif (preg_match('/^(\d+)\s+MHz/i', $arrBuff2, $bufr2)) { $_cpus = $bufr2[1]; } break; case 'system bus frequency': if (preg_match('/^(\d+)\s+Hz/i', $arrBuff2, $bufr2)) { $_buss = round($bufr2[1]/1000000); } elseif (preg_match('/^(\d+)\s+MHz/i', $arrBuff2, $bufr2)) { $_buss = $bufr2[1]; } break; case 'bogomips per cpu': $_bogo = round($arrBuff2); break; case 'vendor_id': $_vend = $arrBuff2; break; case 'cpu': $procname = $arrBuff2; } } } } //second stage $cpucount = 0; $speedset = false; foreach ($processors as $processor) if (preg_match('/^\s*processor\s*:/mi', $processor)) { $proc = null; $arch = null; $impl = null; $part = null; $vari = null; $dev = new CpuDevice(); $details = preg_split("/\n/", $processor, -1, PREG_SPLIT_NO_EMPTY); foreach ($details as $detail) { if (preg_match('/^([^:]+):(.+)$/', trim($detail) , $arrBuff) && (($arrBuff2 = trim($arrBuff[2])) !== '')) { switch (strtolower(trim($arrBuff[1]))) { case 'processor': $proc = $arrBuff2; if (is_numeric($proc)) { if (($procname !== null) && (strlen($procname) > 0)) { $dev->setModel($procname); } } else { $procname = $proc; $dev->setModel($procname); } break; case 'model name': case 'cpu model': case 'cpu type': case 'cpu': $dev->setModel($arrBuff2); break; case 'cpu frequency': if (preg_match('/^(\d+)\s+Hz/i', $arrBuff2, $bufr2)) { if (($tmpsp = round($bufr2[1]/1000000)) > 0) { $dev->setCpuSpeed($tmpsp); $speedset = true; } } elseif (preg_match('/^(\d+)\s+MHz/i', $arrBuff2, $bufr2)) { if ($bufr2[1] > 0) { $dev->setCpuSpeed($bufr2[1]); $speedset = true; } } break; case 'cpu mhz': case 'clock': if ($arrBuff2 > 0) { $dev->setCpuSpeed($arrBuff2); $speedset = true; } break; case 'cpu mhz static': $dev->setCpuSpeedMax($arrBuff2); break; case 'cycle frequency [hz]': if (($tmpsp = round($arrBuff2/1000000)) > 0) { $dev->setCpuSpeed($tmpsp); $speedset = true; } break; case 'cpu0clktck': // Linux sparc64 if (($tmpsp = round(hexdec($arrBuff2)/1000000)) > 0) { $dev->setCpuSpeed($tmpsp); $speedset = true; } break; case 'l3 cache': case 'cache size': $dev->setCache(trim(preg_replace("/[a-zA-Z]/", "", $arrBuff2)) * 1024); break; case 'initial bogomips': case 'bogomips': case 'cpu0bogo': $dev->setBogomips(round($arrBuff2)); break; case 'flags': if (preg_match("/ vmx/", $arrBuff2)) { $dev->setVirt("vmx"); } elseif (preg_match("/ svm/", $arrBuff2)) { $dev->setVirt("svm"); } if (preg_match("/ hypervisor/", $arrBuff2)) { if ($dev->getVirt() === null) { $dev->setVirt("hypervisor"); } if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO && ($this->system_detect_virt === null)) { $this->sys->setVirtualizer("hypervisor", false); } } break; case 'i size': case 'd size': if ($dev->getCache() === null) { $dev->setCache($arrBuff2 * 1024); } else { $dev->setCache($dev->getCache() + ($arrBuff2 * 1024)); } break; case 'cpu architecture': $arch = $arrBuff2; break; case 'cpu implementer': $impl = $arrBuff2; break; case 'cpu part': $part = $arrBuff2; break; case 'cpu variant': $vari = $arrBuff2; break; case 'vendor_id': $dev->setVendorId($arrBuff2); if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO && preg_match('/^User Mode Linux/', $arrBuff2)) { $this->sys->setVirtualizer("cpuid:UserModeLinux", false); } } } } if ($arch === null) $arch = $_arch; if ($impl === null) $impl = $_impl; if ($part === null) $part = $_part; if ($vari === null) $vari = $_vari; // sparc64 specific code follows // This adds the ability to display the cache that a CPU has // Originally made by Sven Blumenstein in 2004 // Modified by Tom Weustink in 2004 $sparclist = array('SUNW,UltraSPARC@0,0', 'SUNW,UltraSPARC-II@0,0', 'SUNW,UltraSPARC@1c,0', 'SUNW,UltraSPARC-IIi@1c,0', 'SUNW,UltraSPARC-II@1c,0', 'SUNW,UltraSPARC-IIe@0,0'); foreach ($sparclist as $name) { if (CommonFunctions::rfts('/proc/openprom/'.$name.'/ecache-size', $buf, 1, 32, false)) { $dev->setCache(base_convert(trim($buf), 16, 10)); } } // sparc64 specific code ends // XScale detection code if (($arch === "5TE") && (($bogo = $dev->getBogomips()) !== null) && ($bogo > 0)) { $dev->setCpuSpeed($bogo); // BogoMIPS are not BogoMIPS on this CPU, it's the speed $speedset = true; $dev->setBogomips(null); // no BogoMIPS available, unset previously set BogoMIPS } if (($dev->getBusSpeed() == 0) && ($_buss !== null)) { $dev->setBusSpeed($_buss); } if (($dev->getCpuSpeed() == 0) && ($_cpus !== null) && ($_cpus > 0)) { $dev->setCpuSpeed($_cpus); $speedset = true; } if (($dev->getBogomips() == 0) && ($_bogo !== null)) { $dev->setBogomips($_bogo); } if (($dev->getVendorId() === null) && ($_vend !== null)) { $dev->setVendorId($_vend); if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO && preg_match('/^User Mode Linux/', $_vend)) { $this->sys->setVirtualizer("cpuid:UserModeLinux", false); } } if ($proc !== null) { if (!is_numeric($proc)) { $proc = 0; } // variable speed processors specific code follows if (CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/cpuinfo_cur_freq', $buf, 1, 4096, false) || CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/scaling_cur_freq', $buf, 1, 4096, false)) { if (round(trim($buf)/1000) > 0) { $dev->setCpuSpeed(round(trim($buf)/1000)); $speedset = true; } } if (CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/cpuinfo_max_freq', $buf, 1, 4096, false) || CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/scaling_max_freq', $buf, 1, 4096, false)) { $dev->setCpuSpeedMax(round(trim($buf)/1000)); } if (CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/cpuinfo_min_freq', $buf, 1, 4096, false) || CommonFunctions::rfts('/sys/devices/system/cpu/cpu'.$proc.'/cpufreq/scaling_min_freq', $buf, 1, 4096, false)) { $dev->setCpuSpeedMin(round(trim($buf)/1000)); } // variable speed processors specific code ends if (PSI_LOAD_BAR) { $dev->setLoad($this->_parseProcStat('cpu'.$proc)); } /* if (CommonFunctions::rfts('/proc/acpi/thermal_zone/THRM/temperature', $buf, 1, 4096, false) && preg_match("/(\S+)\sC$/", $buf, $value)) { $dev->setTemp(value[1]); } */ if (($arch !== null) && ($impl !== null) && ($part !== null)) { if (($impl === '0x41') && (($_hard === 'BCM2708') || ($_hard === 'BCM2709') || ($_hard === 'BCM2710') || ($_hard === 'BCM2711') || ($_hard === 'BCM2712') || ($_hard === 'BCM2835') || ($_hard === 'BCM2836') || ($_hard === 'BCM2837') || ($_hard === 'BCM2838')) && ($_revi !== null)) { // Raspberry Pi detection (instead of 'cat /proc/device-tree/model') if ($raslist === null) $raslist = @parse_ini_file(PSI_APP_ROOT."/data/raspberry.ini", true); $oldmach = $this->sys->getMachine(); if (($oldmach !== '') && preg_match("/^raspberrypi rpi(,.+)/", $oldmach, $machbuf)) { $oldmachend = $machbuf[1]; } else { $oldmachend = ''; } if ($raslist && !preg_match('/[^0-9a-f]/', $_revi)) { if (($revidec = hexdec($_revi)) & 0x800000) { if (($oldmach === '') || ($oldmachend !== '')) { $manufacturer = ($revidec >> 16) & 15; if (isset($raslist['manufacturer'][$manufacturer])) { $manuf = ' '.$raslist['manufacturer'][$manufacturer]; } else { $manuf = ''; } $model = ($revidec >> 4) & 255; if (isset($raslist['model'][$model])) { $this->sys->setMachine('Raspberry Pi '.$raslist['model'][$model].' (PCB 1.'.($revidec & 15).$manuf.')'.$oldmachend); } else { $this->sys->setMachine('Raspberry Pi (PCB 1.'.($revidec & 15).$manuf.')'.$oldmachend); } } } else { if (($oldmach === '') || ($oldmachend !== '')) { if (isset($raslist['old'][$revidec & 0x7fffff])) { $this->sys->setMachine('Raspberry Pi '.$raslist['old'][$revidec & 0x7fffff].$oldmachend); } else { $this->sys->setMachine('Raspberry Pi'.$oldmachend); } } } } } elseif ($this->sys->getMachine() === '') { // other ARM hardware if ($_hard !== null) { if ($_system !== null) { $this->sys->setMachine($_hard." - ".$_system); } else { $this->sys->setMachine($_hard); } } elseif ($_system !== null) { $this->sys->setMachine($_system); } } if ($cpulist === null) $cpulist = @parse_ini_file(PSI_APP_ROOT."/data/cpus.ini", true); if ($cpulist && (((($vari !== null) && isset($cpulist['cpu'][$cpufromlist = strtolower($impl.','.$part.','.$vari)])) || isset($cpulist['cpu'][$cpufromlist = strtolower($impl.','.$part)])))) { if (($cpumodel = $dev->getModel()) !== '') { $dev->setModel($cpumodel.' - '.$cpulist['cpu'][$cpufromlist]); } else { $dev->setModel($cpulist['cpu'][$cpufromlist]); } } } elseif ($this->sys->getMachine() === '') { // other hardware if ($_hard !== null) { if ($_system !== null) { $this->sys->setMachine($_hard." - ".$_system); } else { $this->sys->setMachine($_hard); } } elseif ($_system !== null) { $this->sys->setMachine($_system); } } $cpumodel = $dev->getModel(); if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO && ($this->system_detect_virt === null) && preg_match('/^QEMU Virtual CPU version /', $cpumodel)) { $this->sys->setVirtualizer("cpuid:QEMU", false); } if ($cpumodel === "") { if (($vendid = $dev->getVendorId()) !== "") { $dev->setModel($vendid); } else { $dev->setModel("unknown"); } } $cpucount++; $this->sys->setCpus($dev); } } $cpudevices = CommonFunctions::findglob('/sys/devices/system/cpu/cpu[0-9]*/uevent', GLOB_NOSORT); if (is_array($cpudevices) && (($cpustopped = count($cpudevices)-$cpucount) > 0)) { for (; $cpustopped > 0; $cpustopped--) { $dev = new CpuDevice(); $dev->setModel("stopped"); if ($speedset) { $dev->setCpuSpeed(-1); } $this->sys->setCpus($dev); } } } } /** * PCI devices * * @return void */ private function _pci() { if ($arrResults = Parser::lspci()) { foreach ($arrResults as $dev) { $this->sys->setPciDevices($dev); } } elseif (CommonFunctions::rfts('/proc/pci', $strBuf, 0, 4096, false)) { $booDevice = false; $arrBuf = preg_split("/\n/", $strBuf, -1, PREG_SPLIT_NO_EMPTY); foreach ($arrBuf as $strLine) { if (preg_match('/^\s*Bus\s/', $strLine)) { $booDevice = true; continue; } if ($booDevice) { $dev = new HWDevice(); $dev->setName(preg_replace('/\(rev\s[^\)]+\)\.$/', '', trim($strLine))); $this->sys->setPciDevices($dev); /* list($strKey, $strValue) = preg_split('/: /', $strLine, 2); if (!preg_match('/bridge/i', $strKey) && !preg_match('/USB/i ', $strKey)) { $dev = new HWDevice(); $dev->setName(preg_replace('/\(rev\s[^\)]+\)\.$/', '', trim($strValue))); $this->sys->setPciDevices($dev); } */ $booDevice = false; } } } else { $pcidevices = CommonFunctions::findglob('/sys/bus/pci/devices/*/uevent', GLOB_NOSORT); if (is_array($pcidevices) && (($total = count($pcidevices)) > 0)) { $buf = ""; for ($i = 0; $i < $total; $i++) { if (CommonFunctions::rfts($pcidevices[$i], $buf, 0, 4096, false) && (trim($buf) != "")) { $pcibuf = ""; if (preg_match("/^PCI_CLASS=(\S+)/m", trim($buf), $subbuf)) { $pcibuf = "Class ".$subbuf[1].":"; } if (preg_match("/^PCI_ID=(\S+)/m", trim($buf), $subbuf)) { $pcibuf .= " Device ".$subbuf[1]; } if (preg_match("/^DRIVER=(\S+)/m", trim($buf), $subbuf)) { $pcibuf .= " Driver ".$subbuf[1]; } $dev = new HWDevice(); if (trim($pcibuf) != "") { $dev->setName(trim($pcibuf)); } else { $dev->setName("unknown"); } $this->sys->setPciDevices($dev); } } } elseif (($dmesg = $this->_get_dmesg_c()) !== null) { $arrBuf = preg_split("/\n/", $dmesg, -1, PREG_SPLIT_NO_EMPTY); foreach ($arrBuf as $strLine) { if (preg_match('/^[\s\[\]\.\d]*pci\s+\d\d\d\d:\d\d:\d\d.\d: (\[[^\]]+\].*)/', $strLine, $ar_buf)) { $dev = new HWDevice(); $dev->setName(trim($ar_buf[1])); $this->sys->setPciDevices($dev); } } } } } /** * IDE devices * * @return void */ private function _ide() { $bufd = CommonFunctions::gdc('/proc/ide', false); foreach ($bufd as $file) { if (preg_match('/^hd/', $file)) { $dev = new HWDevice(); $dev->setName(trim($file)); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && CommonFunctions::rfts("/proc/ide/".$file."/media", $buf, 1)) { if (trim($buf) == 'disk') { if (CommonFunctions::rfts("/proc/ide/".$file."/capacity", $buf, 1, 4096, false) || CommonFunctions::rfts("/sys/block/".$file."/size", $buf, 1, 4096, false)) { $dev->setCapacity(trim($buf) * 512); } } } if (CommonFunctions::rfts("/proc/ide/".$file."/model", $buf, 1)) { $dev->setName($dev->getName().": ".trim($buf)); } $this->sys->setIdeDevices($dev); } } } /** * SCSI devices * * @return void */ private function _scsi() { $getline = 0; $device = null; $scsiid = null; if (CommonFunctions::executeProgram('lsscsi', '-c', $bufr, PSI_DEBUG) || CommonFunctions::rfts('/proc/scsi/scsi', $bufr, 0, 4096, PSI_DEBUG)) { $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe as $buf) { if (preg_match('/Host: scsi(\d+) Channel: (\d+) Target: (\d+) Lun: (\d+)/i', $buf, $scsiids) || preg_match('/Host: scsi(\d+) Channel: (\d+) Id: (\d+) Lun: (\d+)/i', $buf, $scsiids)) { $scsiid = $scsiids; $getline = 1; continue; } if ($getline == 1) { preg_match('/Vendor: (.*) Model: (.*) Rev: (.*)/i', $buf, $devices); $getline = 2; $device = $devices; continue; } if ($getline == 2) { preg_match('/Type:\s+(\S+)/i', $buf, $dev_type); $dev = new HWDevice(); $dev->setName($device[1].' '.$device[2].' ('.$dev_type[1].')'); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && ($dev_type[1]==='Direct-Access')) { $sizelist = CommonFunctions::findglob('/sys/bus/scsi/devices/'.intval($scsiid[1]).':'.intval($scsiid[2]).':'.intval($scsiid[3]).':'.intval($scsiid[4]).'/*/*/size', GLOB_NOSORT); if (is_array($sizelist) && (($total = count($sizelist)) > 0)) { $buf = ""; for ($i = 0; $i < $total; $i++) { if (CommonFunctions::rfts($sizelist[$i], $buf, 1, 4096, false) && (($buf=trim($buf)) != "") && ($buf > 0)) { $dev->setCapacity($buf * 512); break; } } } } $this->sys->setScsiDevices($dev); $getline = 0; } } } } /** * USB devices * * @return void */ protected function _usb($bufu = null) { $usbarray = array(); if ($nobufu = ($bufu === null)) { if (CommonFunctions::executeProgram('lsusb', (PSI_OS != 'Android')?'':'2>/dev/null', $bufr, PSI_DEBUG && (PSI_OS != 'Android'), 5) && ($bufr !== "")) { $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe as $buf) { $device = preg_split("/ /", $buf, 7); if (((isset($device[6]) && trim($device[6]) != "")) || ((isset($device[5]) && trim($device[5]) != ""))) { $usbid = intval($device[1]).'-'.intval(trim($device[3], ':')).' '.$device[5]; if ((isset($device[6]) && trim($device[6]) != "")) { $usbarray[$usbid]['name'] = trim($device[6]); } else { $usbarray[$usbid]['name'] = 'unknown'; } } } } $usbdevices = CommonFunctions::findglob('/sys/bus/usb/devices/*/idProduct', GLOB_NOSORT); if (is_array($usbdevices) && (($total = count($usbdevices)) > 0)) { for ($i = 0; $i < $total; $i++) { if (CommonFunctions::rfts($usbdevices[$i], $idproduct, 1, 4096, false) && (($idproduct=trim($idproduct)) != "")) { // is readable $busnum = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/busnum'); $devnum = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/devnum'); $idvendor = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/idVendor'); if (($busnum!==null) && ($devnum!==null) && ($idvendor!==null)) { $usbid = intval($busnum).'-'.intval($devnum).' '.$idvendor.':'.$idproduct; $manufacturer = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/manufacturer'); if ($manufacturer!==null) { $usbarray[$usbid]['manufacturer'] = $manufacturer; } $product = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/product'); if ($product!==null) { $usbarray[$usbid]['product'] = $product; } $speed = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/speed'); if ($product!==null) { $usbarray[$usbid]['speed'] = $speed; } if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { $serial = CommonFunctions::rolv($usbdevices[$i], '/\/idProduct$/', '/serial'); if (($serial!==null) && !preg_match('/\W/', $serial)) { $usbarray[$usbid]['serial'] = $serial; } } } } } } } if (!$nobufu || ((count($usbarray) == 0) && CommonFunctions::rfts('/proc/bus/usb/devices', $bufu, 0, 4096, false))) { // usb-devices $devnum = -1; $bufe = preg_split("/\n/", $bufu, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe as $buf) { if (preg_match('/^T/', $buf)) { $devnum++; if (preg_match('/\sSpd=([\d\.]+)/', $buf, $bufr) && isset($bufr[1]) && ($bufr[1]!=="")) { $usbarray[$devnum]['speed'] = $bufr[1]; } } elseif (preg_match('/^S:/', $buf)) { list($key, $value) = preg_split('/: /', $buf, 2); list($key, $value2) = preg_split('/=/', $value, 2); switch (trim($key)) { case 'Manufacturer': $usbarray[$devnum]['manufacturer'] = trim($value2); break; case 'Product': $usbarray[$devnum]['product'] = trim($value2); break; case 'SerialNumber': if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && !preg_match('/\W/', trim($value2))) { $usbarray[$devnum]['serial'] = trim($value2); } } } } } if ($nobufu && (count($usbarray) == 0) && CommonFunctions::rfts('/proc/bus/input/devices', $bufr, 0, 4096, false)) { $devnam = "unknown"; $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe as $buf) { if (preg_match('/^I:\s+(.+)/', $buf, $bufr) && isset($bufr[1]) && (trim($bufr[1])!=="")) { $devnam = trim($bufr[1]); $usbarray[$devnam]['phys'] = 'unknown'; } elseif (preg_match('/^N:\s+Name="([^"]+)"/', $buf, $bufr2) && isset($bufr2[1]) && (trim($bufr2[1])!=="")) { $usbarray[$devnam]['name'] = trim($bufr2[1]); } elseif (preg_match('/^P:\s+Phys=(.*)/', $buf, $bufr2) && isset($bufr2[1]) && (trim($bufr2[1])!=="")) { $usbarray[$devnam]['phys'] = trim($bufr2[1]); } elseif (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && preg_match('/^U:\s+Uniq=(.+)/', $buf, $bufr2) && isset($bufr2[1]) && (trim($bufr2[1])!=="")) { $usbarray[$devnam]['serial'] = trim($bufr2[1]); } } } foreach ($usbarray as $usbdev) if (!isset($usbdev['phys']) || preg_match('/^usb-/', $usbdev['phys'])) { $dev = new HWDevice(); if (isset($usbdev['manufacturer']) && (($manufacturer=$usbdev['manufacturer']) !== 'no manufacturer')) { if (preg_match("/^linux\s/i", $manufacturer)) { $manufacturer = 'Linux Foundation'; } if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { $dev->setManufacturer($manufacturer); } } else { $manufacturer = ''; } if (isset($usbdev['product'])) { $product = $usbdev['product']; if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { $dev->setProduct($product); } } else { $product = ''; } if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if (isset($usbdev['speed'])) { $dev->setSpeed($usbdev['speed']); } if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && isset($usbdev['serial'])) { $dev->setSerial($usbdev['serial']); } } if (isset($usbdev['name']) && (($name=$usbdev['name']) !== 'unknown')) { $dev->setName($name); } else { if (($newname = trim($manufacturer.' '.$product)) !== '') { $dev->setName($newname); } else { $dev->setName('unknown'); } } $this->sys->setUsbDevices($dev); } } /** * I2C devices * * @return void */ protected function _i2c() { $i2cdevices = CommonFunctions::findglob('/sys/bus/i2c/devices/*/name', GLOB_NOSORT); if (is_array($i2cdevices) && (($total = count($i2cdevices)) > 0)) { $buf = ""; for ($i = 0; $i < $total; $i++) { if (CommonFunctions::rfts($i2cdevices[$i], $buf, 1, 4096, false) && (trim($buf) != "")) { $dev = new HWDevice(); $dev->setName(trim($buf, ": \n\r\t\v\x00")); $this->sys->setI2cDevices($dev); } } } } /** * NVMe devices * * @return void */ protected function _nvme() { if (CommonFunctions::executeProgram('nvme', 'list', $bufr, PSI_DEBUG) && ($bufr!="")) { $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $count = 0; $nlocate = array(); $nsize = array(); foreach ($bufe as $buf) { if ($count == 1) { $locid = 0; $nlocate[0] = 0; $total = strlen($buf); $begin = true; for ($i = 0; $i < $total; $i++) { if ($begin) { if ($buf[$i] !== '-') { $nsize[$locid] = $i - $nlocate[$locid]; $locid++; $begin = false; } } else { if ($buf[$i] === '-') { $nlocate[$locid] = $i; $begin = true; } } } if ($begin) { $nsize[$locid] = $i - $nlocate[$locid]; } } elseif ($count > 1) { if (isset($nlocate[2]) && isset($nsize[2]) && (($nvname=trim(substr($buf, $nlocate[2], $nsize[2]))) !== '')) { $dev = new HWDevice(); $dev->setName($nvname); if (defined('PSI_SHOW_DEVICES_INFOS') && (PSI_SHOW_DEVICES_INFOS)) { if (isset($nlocate[4]) && isset($nsize[4])) { if (preg_match('/\/\s*([0-9\.]+)\s*(B|KB|MB|GB|TB|PB)$/', str_replace(',', '.', trim(substr($buf, $nlocate[4], $nsize[4]))), $tmpbuf)) { switch ($tmpbuf[2]) { case 'B': $dev->setCapacity($tmpbuf[1]); break; case 'KB': $dev->setCapacity(1000*$tmpbuf[1]); break; case 'MB': $dev->setCapacity(1000*1000*$tmpbuf[1]); break; case 'GB': $dev->setCapacity(1000*1000*1000*$tmpbuf[1]); break; case 'TB': $dev->setCapacity(1000*1000*1000*1000*$tmpbuf[1]); break; case 'PB': $dev->setCapacity(1000*1000*1000*1000*1000*$tmpbuf[1]); } } } if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { if (isset($nlocate[1]) && isset($nsize[1])) { $dev->setSerial(trim(substr($buf, $nlocate[1], $nsize[1]))); } } } $this->sys->setNvmeDevices($dev); } } $count++; } } } /** * Network devices * includes also rx/tx bytes * * @return void */ protected function _network($bufr = null) { if (($bufr === null) && CommonFunctions::rfts('/proc/net/dev', $bufr, 0, 4096, PSI_DEBUG)) { $bufe = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe as $buf) { if (preg_match('/:/', $buf)) { list($dev_name, $stats_list) = preg_split('/:/', $buf, 2); $stats = preg_split('/\s+/', trim($stats_list)); $dev = new NetDevice(); $dev->setName(trim($dev_name)); $dev->setRxBytes($stats[0]); $dev->setTxBytes($stats[8]); $dev->setErrors($stats[2] + $stats[10]); $dev->setDrops($stats[3] + $stats[11]); if (((defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS)) || (defined('PSI_SHOW_NETWORK_BRIDGE') && PSI_SHOW_NETWORK_BRIDGE)) && CommonFunctions::executeProgram('ip', 'addr show '.trim($dev_name), $bufr2, PSI_DEBUG) && (trim($bufr2)!="")) { if (defined('PSI_SHOW_NETWORK_BRIDGE') && PSI_SHOW_NETWORK_BRIDGE && preg_match("/^\d+:\s+([^\s:@]+).+\s+master\s+(\S+)/", $bufr2, $brbufr)) { $dev->setBridge($brbufr[2]); } } else { $bufr2 = ""; } if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS)) { $macaddr = ""; if (($bufr2!="") || CommonFunctions::executeProgram('ifconfig', trim($dev_name).' 2>/dev/null', $bufr2, PSI_DEBUG)) { $bufe2 = preg_split("/\n/", $bufr2, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe2 as $buf2) { // if (preg_match('/^'.trim($dev_name).'\s+Link\sencap:Ethernet\s+HWaddr\s(\S+)/i', $buf2, $ar_buf2) if (preg_match('/\s+encap:Ethernet\s+HWaddr\s(\S+)/i', $buf2, $ar_buf2) || preg_match('/\s+encap:UNSPEC\s+HWaddr\s(\S+)-00-00-00-00-00-00-00-00-00-00\s*$/i', $buf2, $ar_buf2) || preg_match('/^\s+ether\s+(\S+)\s+txqueuelen/i', $buf2, $ar_buf2) || preg_match('/^\s+link\/\S+\s+(\S+)\s+brd/i', $buf2, $ar_buf2) || preg_match('/^\s+link\/\S+\s+(\S+)$/i', $buf2, $ar_buf2)) { if (!defined('PSI_HIDE_NETWORK_MACADDR') || !PSI_HIDE_NETWORK_MACADDR) { $macaddr = preg_replace('/:/', '-', strtoupper($ar_buf2[1])); if (($macaddr === '00-00-00-00-00-00') || ($macaddr === '00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00') || ($macaddr === '--') || ($macaddr === '0.0.0.0')) { // empty $macaddr = ""; } } } elseif (preg_match('/^\s+inet\saddr:(\S+)\s+P-t-P:(\S+)/i', $buf2, $ar_buf2) || preg_match('/^\s+inet\s+(\S+)\s+netmask.+destination\s+(\S+)/i', $buf2, $ar_buf2) || preg_match('/^\s+inet\s+([^\/\s]+).*peer\s+([^\/\s]+).*\s+scope\s((global)|(host))/i', $buf2, $ar_buf2) /*|| preg_match('/^\s+link\/sit\s+([^\/\s]+).*peer\s+([^\/\s]+)/i', $buf2, $ar_buf2)*/) { if ($ar_buf2[1] != $ar_buf2[2]) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1].";:".$ar_buf2[2]); } else { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1]); } } elseif ((preg_match('/^\s+inet\saddr:(\S+)/i', $buf2, $ar_buf2) || preg_match('/^\s+inet\s+(\S+)\s+netmask/i', $buf2, $ar_buf2) || preg_match('/^'.trim($dev_name).':\s+ip\s+(\S+)\s+mask/i', $buf2, $ar_buf2) || preg_match('/^\s+inet6\saddr:\s([^\/\s]+)(.+)\s+Scope:[GH]/i', $buf2, $ar_buf2) || preg_match('/^\s+inet6\s+(\S+)\s+prefixlen(.+)(()|())/i', $buf2, $ar_buf2) || preg_match('/^\s+inet6?\s+([^\/\s]+).*\s+scope\s((global)|(host))/i', $buf2, $ar_buf2) || preg_match('/^\s+inet\saddr6:\s+(\S+)\s+prefixlen(.+)/i', $buf2, $ar_buf2)) && ($ar_buf2[1]!="::") && !preg_match('/^fe80::/i', $ar_buf2[1])) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').strtolower($ar_buf2[1])); } } } if ($macaddr != "") { $dev->setInfo($macaddr.($dev->getInfo()?';'.$dev->getInfo():'')); } if ((!CommonFunctions::rfts('/sys/class/net/'.trim($dev_name).'/operstate', $buf, 1, 4096, false) || (($down=strtolower(trim($buf)))=="") || ($down!=="down")) && (CommonFunctions::rfts('/sys/class/net/'.trim($dev_name).'/speed', $buf, 1, 4096, false) && (($speed=trim($buf))!="") && ($buf > 0) && ($buf < 65535))) { if ($speed > 1000) { $speed = $speed/1000; $unit = "G"; } else { $unit = "M"; } if (CommonFunctions::rfts('/sys/class/net/'.trim($dev_name).'/duplex', $buf, 1, 4096, false) && (($duplex=strtolower(trim($buf)))!="") && ($duplex!='unknown')) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$speed.$unit.'b/s '.$duplex); } else { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$speed.$unit.'b/s'); } } } $this->sys->setNetDevices($dev); } } } elseif (($bufr === null) && CommonFunctions::executeProgram('ip', 'addr show', $bufr, PSI_DEBUG) && ($bufr!="")) { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $was = false; $macaddr = ""; $speedinfo = ""; $dev = null; foreach ($lines as $line) { if (preg_match("/^\d+:\s+([^\s:@]+)(.*)/", $line, $ar_buf)) { if ($was) { if ($macaddr != "") { $dev->setInfo($macaddr.($dev->getInfo()?';'.$dev->getInfo():'')); } if ($speedinfo != "") { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$speedinfo); } $this->sys->setNetDevices($dev); } $speedinfo = ""; $macaddr = ""; $dev = new NetDevice(); $dev->setName($ar_buf[1]); if (defined('PSI_SHOW_NETWORK_BRIDGE') && PSI_SHOW_NETWORK_BRIDGE && isset($ar_buf[2]) && (($ar_buf[2] = trim($ar_buf[2])) !=="") && preg_match("/\s+master\s+(\S+)/", $ar_buf[2], $bufr2)) { $dev->setBridge($bufr2[1]); } if (CommonFunctions::executeProgram('ip', '-s link show '.$ar_buf[1], $bufr2, false) && ($bufr2!="") && preg_match("/\n\s+RX:\s[^\n]+\n\s+(\d+)\s+\d+\s+(\d+)\s+(\d+)[^\n]+\n\s+TX:\s[^\n]+\n\s+(\d+)\s+\d+\s+(\d+)\s+(\d+)/m", $bufr2, $ar_buf2)) { $dev->setRxBytes($ar_buf2[1]); $dev->setTxBytes($ar_buf2[4]); $dev->setErrors($ar_buf2[2]+$ar_buf2[5]); $dev->setDrops($ar_buf2[3]+$ar_buf2[6]); } elseif (CommonFunctions::executeProgram('ifconfig', $ar_buf[1], $bufr2, false) && ($bufr2!="")) { if (preg_match('/\sRX bytes:(\d+)\s/im', $bufr2, $ar_buf2)) { $dev->setRxBytes($ar_buf2[1]); } if (preg_match('/\sTX bytes:(\d+)\s/im', $bufr2, $ar_buf2)) { $dev->setTxBytes($ar_buf2[1]); } $errors = 0; $drops = 0; if (preg_match('/\sRX packets:\d+\serrors:(\d+)\sdropped:(\d+)/im', $bufr2, $ar_buf2)) { $errors +=$ar_buf2[1]; $drops +=$ar_buf2[2]; } if (preg_match('/\sTX packets:\d+\serrors:(\d+)\sdropped:(\d+)/im', $bufr2, $ar_buf2)) { $errors +=$ar_buf2[1]; $drops +=$ar_buf2[2]; } $dev->setErrors($errors); $dev->setDrops($drops); } $was = true; if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS)) { if ((!CommonFunctions::rfts('/sys/class/net/'.$ar_buf[1].'/operstate', $buf, 1, 4096, false) || (($down=strtolower(trim($buf)))=="") || ($down!=="down")) && (CommonFunctions::rfts('/sys/class/net/'.$ar_buf[1].'/speed', $buf, 1, 4096, false) && (($speed=trim($buf))!="") && ($buf > 0) && ($buf < 65535))) { if ($speed > 1000) { $speed = $speed/1000; $unit = "G"; } else { $unit = "M"; } if (CommonFunctions::rfts('/sys/class/net/'.$ar_buf[1].'/duplex', $buf, 1, 4096, false) && (($duplex=strtolower(trim($buf)))!="") && ($duplex!='unknown')) { $speedinfo = $speed.$unit.'b/s '.$duplex; } else { $speedinfo = $speed.$unit.'b/s'; } } } } else { if ($was) { if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS)) { if (preg_match('/^\s+link\/\S+\s+(\S+)\s+brd/i', $line, $ar_buf2) || preg_match('/^\s+link\/\S+\s+(\S+)$/i', $line, $ar_buf2)) { if (!defined('PSI_HIDE_NETWORK_MACADDR') || !PSI_HIDE_NETWORK_MACADDR) { $macaddr = preg_replace('/:/', '-', strtoupper($ar_buf2[1])); if (($macaddr === '00-00-00-00-00-00') || ($macaddr === '00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00') || ($macaddr === '--') || ($macaddr === '0.0.0.0')) { // empty $macaddr = ""; } } } elseif (preg_match('/^\s+inet\s+([^\/\s]+).*peer\s+([^\/\s]+).*\s+scope\s((global)|(host))/i', $line, $ar_buf2) /*|| preg_match('/^\s+link\/sit\s+([^\/\s]+).*peer\s+([^\/\s]+)/i', $line, $ar_buf2)*/) { if ($ar_buf2[1] != $ar_buf2[2]) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1].";:".$ar_buf2[2]); } else { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1]); } } elseif (preg_match('/^\s+inet6?\s+([^\/\s]+).*\s+scope\s((global)|(host))/i', $line, $ar_buf2) && ($ar_buf2[1]!="::") && !preg_match('/^fe80::/i', $ar_buf2[1])) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').strtolower($ar_buf2[1])); } } } } } if ($was) { if ($macaddr != "") { $dev->setInfo($macaddr.($dev->getInfo()?';'.$dev->getInfo():'')); } if ($speedinfo != "") { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$speedinfo); } $this->sys->setNetDevices($dev); } } elseif (($bufr !== null) || CommonFunctions::executeProgram('ifconfig', '-a', $bufr, PSI_DEBUG)) { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $was = false; $errors = 0; $drops = 0; $macaddr = ""; $speedinfo = ""; $dev = null; foreach ($lines as $line) { if (preg_match("/^([^\s:]+)/", $line, $ar_buf)) { if ($was) { $dev->setErrors($errors); $dev->setDrops($drops); if ($macaddr != "") { $dev->setInfo($macaddr.($dev->getInfo()?';'.$dev->getInfo():'')); } if ($speedinfo != "") { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$speedinfo); } $this->sys->setNetDevices($dev); } $errors = 0; $drops = 0; $speedinfo = ""; $macaddr = ""; $dev = new NetDevice(); $dev->setName($ar_buf[1]); $was = true; if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS)) { if ((!CommonFunctions::rfts('/sys/class/net/'.$ar_buf[1].'/operstate', $buf, 1, 4096, false) || (($down=strtolower(trim($buf)))=="") || ($down!=="down")) && (CommonFunctions::rfts('/sys/class/net/'.$ar_buf[1].'/speed', $buf, 1, 4096, false) && (($speed=trim($buf))!="") && ($buf > 0) && ($buf < 65535))) { if ($speed > 1000) { $speed = $speed/1000; $unit = "G"; } else { $unit = "M"; } if (CommonFunctions::rfts('/sys/class/net/'.$ar_buf[1].'/duplex', $buf, 1, 4096, false) && (($duplex=strtolower(trim($buf)))!="") && ($duplex!='unknown')) { $speedinfo = $speed.$unit.'b/s '.$duplex; } else { $speedinfo = $speed.$unit.'b/s'; } } if (preg_match('/^'.$ar_buf[1].'\s+Link\sencap:Ethernet\s+HWaddr\s(\S+)/i', $line, $ar_buf2) || preg_match('/^'.$ar_buf[1].'\s+Link\s+encap:UNSPEC\s+HWaddr\s(\S+)-00-00-00-00-00-00-00-00-00-00\s*$/i', $line, $ar_buf2)) { if (!defined('PSI_HIDE_NETWORK_MACADDR') || !PSI_HIDE_NETWORK_MACADDR) { $macaddr = preg_replace('/:/', '-', strtoupper($ar_buf2[1])); if ($macaddr === '00-00-00-00-00-00') { // empty $macaddr = ""; } } } elseif (preg_match('/^'.$ar_buf[1].':\s+ip\s+(\S+)\s+mask/i', $line, $ar_buf2)) $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1]); } } else { if ($was) { if (preg_match('/\sRX bytes:(\d+)\s/i', $line, $ar_buf2)) { $dev->setRxBytes($ar_buf2[1]); } if (preg_match('/\sTX bytes:(\d+)\s/i', $line, $ar_buf2)) { $dev->setTxBytes($ar_buf2[1]); } if (preg_match('/\sRX packets:\d+\serrors:(\d+)\sdropped:(\d+)/i', $line, $ar_buf2)) { $errors +=$ar_buf2[1]; $drops +=$ar_buf2[2]; } elseif (preg_match('/\sTX packets:\d+\serrors:(\d+)\sdropped:(\d+)/i', $line, $ar_buf2)) { $errors +=$ar_buf2[1]; $drops +=$ar_buf2[2]; } if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS)) { if (preg_match('/\s+encap:Ethernet\s+HWaddr\s(\S+)/i', $line, $ar_buf2) || preg_match('/\s+encap:UNSPEC\s+HWaddr\s(\S+)-00-00-00-00-00-00-00-00-00-00\s*$/i', $line, $ar_buf2) || preg_match('/^\s+ether\s+(\S+)\s+txqueuelen/i', $line, $ar_buf2)) { if (!defined('PSI_HIDE_NETWORK_MACADDR') || !PSI_HIDE_NETWORK_MACADDR) { $macaddr = preg_replace('/:/', '-', strtoupper($ar_buf2[1])); if ($macaddr === '00-00-00-00-00-00') { // empty $macaddr = ""; } } } elseif (preg_match('/^\s+inet\saddr:(\S+)\s+P-t-P:(\S+)/i', $line, $ar_buf2) || preg_match('/^\s+inet\s+(\S+)\s+netmask.+destination\s+(\S+)/i', $line, $ar_buf2)) { if ($ar_buf2[1] != $ar_buf2[2]) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1].";:".$ar_buf2[2]); } else { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1]); } } elseif ((preg_match('/^\s+inet\saddr:(\S+)/i', $line, $ar_buf2) || preg_match('/^\s+inet\s+(\S+)\s+netmask/i', $line, $ar_buf2) || preg_match('/^\s+inet6\saddr:\s([^\/\s]+)(.+)\s+Scope:[GH]/i', $line, $ar_buf2) || preg_match('/^\s+inet6\s+(\S+)\s+prefixlen(.+)(()|())/i', $line, $ar_buf2) || preg_match('/^\s+inet\saddr6:\s+(\S+)\s+prefixlen(.+)/i', $line, $ar_buf2)) && ($ar_buf2[1]!="::") && !preg_match('/^fe80::/i', $ar_buf2[1])) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').strtolower($ar_buf2[1])); } } } } } if ($was) { $dev->setErrors($errors); $dev->setDrops($drops); if ($macaddr != "") { $dev->setInfo($macaddr.($dev->getInfo()?';'.$dev->getInfo():'')); } if ($speedinfo != "") { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$speedinfo); } $this->sys->setNetDevices($dev); } } } /** * Physical memory information and Swap Space information * * @return void */ protected function _memory($mbuf = null, $sbuf = null) { if (($mbuf !== null) || CommonFunctions::rfts('/proc/meminfo', $mbuf)) { $swaptotal = null; $swapfree = null; $bufe = preg_split("/\n/", $mbuf, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe as $buf) { if (preg_match('/^MemTotal:\s+(\d+)\s*kB/i', $buf, $ar_buf)) { $this->sys->setMemTotal($ar_buf[1] * 1024); } elseif (preg_match('/^MemFree:\s+(\d+)\s*kB/i', $buf, $ar_buf)) { $this->sys->setMemFree($ar_buf[1] * 1024); } elseif (preg_match('/^Cached:\s+(\d+)\s*kB/i', $buf, $ar_buf)) { $this->sys->setMemCache($ar_buf[1] * 1024); } elseif (preg_match('/^Buffers:\s+(\d+)\s*kB/i', $buf, $ar_buf)) { $this->sys->setMemBuffer($ar_buf[1] * 1024); } elseif (preg_match('/^SwapTotal:\s+(\d+)\s*kB/i', $buf, $ar_buf)) { $swaptotal = $ar_buf[1] * 1024; } elseif (preg_match('/^SwapFree:\s+(\d+)\s*kB/i', $buf, $ar_buf)) { $swapfree = $ar_buf[1] * 1024; } } $this->sys->setMemUsed($this->sys->getMemTotal() - $this->sys->getMemFree()); // values for splitting memory usage if (($this->sys->getMemCache() !== null) && ($this->sys->getMemBuffer() !== null)) { $this->sys->setMemApplication($this->sys->getMemUsed() - $this->sys->getMemCache() - $this->sys->getMemBuffer()); } if (($sbuf !== null) || CommonFunctions::rfts('/proc/swaps', $sbuf, 0, 4096, false)) { $swaps = preg_split("/\n/", $sbuf, -1, PREG_SPLIT_NO_EMPTY); unset($swaps[0]); foreach ($swaps as $swap) { $ar_buf = preg_split('/\s+/', $swap, 5); $dev = new DiskDevice(); $dev->setMountPoint($ar_buf[0]); $dev->setName("SWAP"); $dev->setTotal($ar_buf[2] * 1024); $dev->setUsed($ar_buf[3] * 1024); $dev->setFree($dev->getTotal() - $dev->getUsed()); $this->sys->setSwapDevices($dev); } } elseif (($swaptotal !== null) && ($swapfree !== null) && ($swaptotal > 0)) { $dev = new DiskDevice(); $dev->setName("SWAP"); $dev->setTotal($swaptotal); $dev->setFree($swapfree); $dev->setUsed($dev->getTotal() - $dev->getFree()); $this->sys->setSwapDevices($dev); } } } /** * filesystem information * * @return void */ protected function _filesystems() { $df_args = ""; $hideFstypes = array(); if (defined('PSI_HIDE_FS_TYPES') && is_string(PSI_HIDE_FS_TYPES)) { if (preg_match(ARRAY_EXP, PSI_HIDE_FS_TYPES)) { $hideFstypes = eval(PSI_HIDE_FS_TYPES); } else { $hideFstypes = array(PSI_HIDE_FS_TYPES); } } foreach ($hideFstypes as $Fstype) { $df_args .= "-x $Fstype "; } if ($df_args !== "") { $df_args = trim($df_args); // trim spaces $arrResult = Parser::df("-P $df_args 2>/dev/null"); } else { $arrResult = Parser::df("-P 2>/dev/null"); } foreach ($arrResult as $dev) { $this->sys->setDiskDevices($dev); } } /** * Distribution * * @return void */ protected function _distro() { $this->sys->setDistribution("Linux"); $list = @parse_ini_file(PSI_APP_ROOT."/data/distros.ini", true); if (!$list) { return; } $_ignore_lsb_release = false; $_Distrib = ""; $_DistribIcon = ""; // We have the '2>/dev/null' because Ubuntu gives an error on this command which causes the distro to be unknown if (CommonFunctions::executeProgram('lsb_release', '-a 2>/dev/null', $distro_info, PSI_DEBUG) && strlen($distro_info) > 0) { $distro_tmp = preg_split("/\r?\n/", $distro_info, -1, PREG_SPLIT_NO_EMPTY); foreach ($distro_tmp as $info) { $info_tmp = preg_split('/:/', $info, 2); if (isset($distro_tmp[0]) && ($distro_tmp[0] !== null) && (trim($distro_tmp[0]) != "") && isset($distro_tmp[1]) && ($distro_tmp[1] !== null) && (trim($distro_tmp[1]) != "")) { $distro[trim($info_tmp[0])] = trim($info_tmp[1]); } } if (!isset($distro['Distributor ID']) && !isset($distro['Description'])) { // Systems like StartOS if (isset($distro_tmp[0]) && ($distro_tmp[0] !== null) && (trim($distro_tmp[0]) != "")) { $_Distrib = trim($distro_tmp[0]); if (preg_match('/^(\S+)\s*/', $distro_tmp[0], $id_buf) && isset($list[strtolower(trim($id_buf[1]))]['Image'])) { $_DistribIcon = $list[strtolower(trim($id_buf[1]))]['Image']; // set ignore lsb_release for some distributions if (isset($list[strtolower(trim($id_buf[1]))]['Test']) && ($list[strtolower(trim($id_buf[1]))]['Test'] === "nolsbfirst")) $_ignore_lsb_release = true; } } } else { if (isset($distro['Description'])) { if (preg_match('/^NAME=\s*"?([^"\r\n]+)"?\s*$/', $distro['Description'], $name_tmp)) { $distro['Description'] = trim($name_tmp[1]); } elseif (($distro['Description']==="Rolling Release") && isset($distro['Distributor ID']) && ($distro['Distributor ID'] != "n/a")) { $distro['Description'] = $distro['Distributor ID']." ".$distro['Description']; } } if (isset($distro['Description']) && ($distro['Description'] != "n/a") && (!isset($distro['Distributor ID']) || (($distro['Distributor ID'] != "n/a") && ($distro['Description'] != $distro['Distributor ID'])))) { $_Distrib = $distro['Description']; if (isset($distro['Release']) && ($distro['Release'] != "n/a") && ($distro['Release'] != $distro['Description']) && strstr($distro['Release'], ".")){ if (preg_match("/^(\d+)\.[0]+$/", $distro['Release'], $match_buf)) { $tofind = $match_buf[1]; } else { $tofind = $distro['Release']; } if (!preg_match("/^".$tofind."[\s\.]|[\(\[]".$tofind."[\.\)\]]|\s".$tofind."$|\s".$tofind."[\s\.]/", $distro['Description'])) { $_Distrib .= " ".$distro['Release']; } } } elseif (isset($distro['Distributor ID'])) { if ($distro['Distributor ID'] != "n/a") { $_Distrib = $distro['Distributor ID']; if (isset($distro['Release']) && ($distro['Release'] != "n/a")) { $_Distrib .= " ".$distro['Release']; } if (isset($distro['Codename']) && ($distro['Codename'] != "n/a")) { $_Distrib .= " (".$distro['Codename'].")"; } } elseif (isset($distro['Description']) && ($distro['Description'] != "n/a")) { $_Distrib = $distro['Description']; } } if (isset($distro['Distributor ID'])) { $distrib = $distro['Distributor ID']; $distrib2 = $distrib; $distrib3 = $distrib; if (isset($distro['Description'])) { $distarr = preg_split("/\s/", $distro['Description'], -1, PREG_SPLIT_NO_EMPTY); if (isset($distarr[0])) { if ($distrib != "n/a") { $distrib2 .= ' '.$distarr[0]; } else { $distrib2 = $distarr[0]; } } if (isset($distarr[1])) { if ($distrib != "n/a") { $distrib3 .= ' '.$distarr[0].' '.$distarr[1]; } else { $distrib3 = $distarr[0].' '.$distarr[1]; } } } if (($distrib!==$distrib3) && isset($list[strtolower($distrib3)]['Image'])) { $_DistribIcon = $list[strtolower($distrib3)]['Image']; // set ignore lsb_release for some distributions if (isset($list[strtolower($distrib3)]['Test']) && ($list[strtolower($distrib3)]['Test'] === "nolsbfirst")) $_ignore_lsb_release = true; } elseif (($distrib!==$distrib2) && isset($list[strtolower($distrib2)]['Image'])) { $_DistribIcon = $list[strtolower($distrib2)]['Image']; // set ignore lsb_release for some distributions if (isset($list[strtolower($distrib2)]['Test']) && ($list[strtolower($distrib2)]['Test'] === "nolsbfirst")) $_ignore_lsb_release = true; } elseif (($distrib!=="n/a") && isset($list[strtolower($distrib)]['Image'])) { $_DistribIcon = $list[strtolower($distrib)]['Image']; // set ignore lsb_release for some distributions if (isset($list[strtolower($distrib)]['Test']) && ($list[strtolower($distrib)]['Test'] === "nolsbfirst")) $_ignore_lsb_release = true; } } } } if (!$_ignore_lsb_release) { // don't ignore lsb_release if ($_Distrib !== "") $this->sys->setDistribution(preg_replace("/ - Version:| Build:| Release| version| build| based in Ubuntu/i", "", $_Distrib)); if ($_DistribIcon !== "") $this->sys->setDistributionIcon($_DistribIcon); } // if the distribution is still unknown if ($this->sys->getDistribution() == "Linux") { /* default error handler */ if (function_exists('errorHandlerPsi')) { restore_error_handler(); } /* fatal errors only */ $old_err_rep = error_reporting(); error_reporting(E_ERROR); // Fall back in case 'lsb_release' does not exist but exist /etc/lsb-release if (CommonFunctions::fileexists($filename="/etc/lsb-release") && CommonFunctions::rfts($filename, $buf, 0, 4096, false) && (preg_match('/^DISTRIB_ID="?([^"\r\n]+)/m', $buf, $id_buf) || preg_match('/^DISTRIB_DESCRIPTION="?([^"\r\n]+)/m', $buf, $id_buf))) { if (preg_match('/^DISTRIB_DESCRIPTION="?([^"\r\n]+)/m', $buf, $desc_buf) && (trim($desc_buf[1])!=trim($id_buf[1]))) { if ($desc_buf[1]==="Rolling Release") { $desc_buf[1] = $id_buf[1]." ".$desc_buf[1]; } $this->sys->setDistribution(preg_replace("/ - Version:| Build:| Release| version| build| based in Ubuntu/i", "", trim($desc_buf[1]))); if (preg_match('/^DISTRIB_RELEASE="?([^"\r\n]+)/m', $buf, $vers_buf) && (trim($vers_buf[1])!=trim($desc_buf[1])) && strstr($vers_buf[1], ".")){ if (preg_match("/^(\d+)\.[0]+$/", trim($vers_buf[1]), $match_buf)) { $tofind = $match_buf[1]; } else { $tofind = trim($vers_buf[1]); } if (!preg_match("/^".$tofind."[\s\.]|[\(\[]".$tofind."[\.\)\]]|\s".$tofind."$|\s".$tofind."[\s\.]/", trim($desc_buf[1]))) { $this->sys->setDistribution($this->sys->getDistribution()." ".trim($vers_buf[1])); } } $distrib = trim($id_buf[1]); $distrib2 = $distrib; $distrib3 = $distrib; $distarr = preg_split("/\s/", trim($desc_buf[1]), -1, PREG_SPLIT_NO_EMPTY); if (isset($distarr[0])) { $distrib2 .= ' '.$distarr[0]; } if (isset($distarr[1])) { $distrib3 .= ' '.$distarr[0].' '.$distarr[1]; } if (($distrib!==$distrib3) && isset($list[strtolower($distrib3)]['Image'])) { $this->sys->setDistributionIcon($list[strtolower($distrib3)]['Image']); } elseif (($distrib!==$distrib2) && isset($list[strtolower($distrib2)]['Image'])) { $this->sys->setDistributionIcon($list[strtolower($distrib2)]['Image']); } elseif (($distrib!=="n/a") && isset($list[strtolower($distrib)]['Image'])) { $this->sys->setDistributionIcon($list[strtolower($distrib)]['Image']); } } else { if (isset($list[strtolower(trim($id_buf[1]))]['Name'])) { $this->sys->setDistribution(trim($list[strtolower(trim($id_buf[1]))]['Name'])); } else { $this->sys->setDistribution(trim($id_buf[1])); } if (preg_match('/^DISTRIB_RELEASE="?([^"\r\n]+)/m', $buf, $vers_buf)) { $this->sys->setDistribution($this->sys->getDistribution()." ".trim($vers_buf[1])); } if (preg_match('/^DISTRIB_CODENAME="?([^"\r\n]+)/m', $buf, $vers_buf)) { $this->sys->setDistribution($this->sys->getDistribution()." (".trim($vers_buf[1]).")"); } if (isset($list[strtolower(trim($id_buf[1]))]['Image'])) { $this->sys->setDistributionIcon($list[strtolower(trim($id_buf[1]))]['Image']); } } } else { // otherwise find files specific for distribution foreach ($list as $section=>$distribution) { if (!isset($distribution['Files'])) { continue; } else { foreach (preg_split("/;/", $distribution['Files'], -1, PREG_SPLIT_NO_EMPTY) as $filename) { if (CommonFunctions::fileexists($filename)) { $distro = $distribution; if (isset($distribution['Mode'])&&(strtolower($distribution['Mode'])=="detection")) { $buf = ""; } elseif (isset($distribution['Mode'])&&(strtolower($distribution['Mode'])=="execute")) { if (!CommonFunctions::executeProgram($filename, '2>/dev/null', $buf, PSI_DEBUG)) { $buf = ""; } elseif (preg_match('/^pve-manager\/([\d.]+)\//', $buf, $vers_buf)) { // Proxmox version $buf = $vers_buf[1]; } } else { if (!CommonFunctions::rfts($filename, $buf, 1, 4096, false)) { $buf = ""; if (isset($distribution['Mode'])&&(strtolower($distribution['Mode'])=="analyse")) { break; } } elseif (isset($distribution['Mode'])&&(strtolower($distribution['Mode'])=="analyse")) { if (preg_match('/^(\S+)\s*/', preg_replace('/^red\s+/', 'red', strtolower($buf)), $id_buf) && isset($list[trim($id_buf[1])]['Image'])) { $distro = $list[trim($id_buf[1])]; } } } if (($buf !== null) && (trim($buf) !== "")) { $buf = preg_replace("/ - Version:| Build:| Release| version| build/i", "", $buf); } if (isset($distro['Image'])) { $this->sys->setDistributionIcon($distro['Image']); } if (isset($distribution['Name'])) { if (($buf === null) || (trim($buf) == "")) { $this->sys->setDistribution($distribution['Name']); } else { $this->sys->setDistribution($distribution['Name']." ".trim($buf)); } } else { if (($buf === null) || (trim($buf) == "")) { $this->sys->setDistribution(preg_replace('/linux/', 'Linux', ucwords($section))); } else { $this->sys->setDistribution(trim($buf)); } } if (isset($distribution['Files2'])) { foreach (preg_split("/;/", $distribution['Files2'], -1, PREG_SPLIT_NO_EMPTY) as $filename2) { if (CommonFunctions::fileexists($filename2) && CommonFunctions::rfts($filename2, $buf, 0, 4096, false)) { if (preg_match('/^majorversion="?([^"\r\n]+)/m', $buf, $maj_buf) && preg_match('/^minorversion="?([^"\r\n]+)/m', $buf, $min_buf)) { $distr2=$maj_buf[1].'.'.$min_buf[1]; if (preg_match('/^buildphase="?([^"\r\n]+)/m', $buf, $pha_buf) && ($pha_buf[1]!=="0")) { $distr2.='.'.$pha_buf[1]; } if (preg_match('/^buildnumber="?([^"\r\n]+)/m', $buf, $num_buf)) { $distr2.='-'.$num_buf[1]; } if (preg_match('/^builddate="?([^"\r\n]+)/m', $buf, $dat_buf)) { $distr2.=' ('.$dat_buf[1].')'; } $this->sys->setDistribution($this->sys->getDistribution()." ".$distr2); } elseif (preg_match('/^elive-codename:\s*([^\r\n]+)/m', $buf, $cod_buf) && preg_match('/^elive-version:\s*([^\r\n]+)/m', $buf, $ver_buf)) { $this->sys->setDistribution($this->sys->getDistribution()." ".trim($cod_buf[1])." ".trim($ver_buf[1])); } elseif (preg_match('/^VERSION=["\']?([^"\'\r\n]+)/im', $buf, $vers_buf) || preg_match('/^VERSION_ID=["\']?([^"\'\r\n]+)/m', $buf, $vers_buf)) { $this->sys->setDistribution($this->sys->getDistribution()." ".trim($vers_buf[1])); } elseif (preg_match('/^DISTRIB_ID=[\'"]?([^\'"\r\n]+)/m', $buf, $id_buf)) { if (preg_match('/^DESCRIPTION="?([^"\r\n]+)/m', $buf, $desc_buf) && (trim($desc_buf[1])!=trim($id_buf[1]))) { $this->sys->setDistribution(trim($desc_buf[1])); } else { if (isset($list[strtolower(trim($id_buf[1]))]['Name'])) { $this->sys->setDistribution(trim($list[strtolower(trim($id_buf[1]))]['Name'])); } else { $this->sys->setDistribution(trim($id_buf[1])); } if (preg_match('/^RELEASE="?([^"\r\n]+)/m', $buf, $vers_buf) || preg_match('/^DISTRIB_RELEASE=[\'"]?([^\'"\r\n]+)/m', $buf, $vers_buf)) { $this->sys->setDistribution($this->sys->getDistribution()." ".trim($vers_buf[1])); } if (preg_match('/^CODENAME="?([^"\r\n]+)/m', $buf, $vers_buf)) { $this->sys->setDistribution($this->sys->getDistribution()." (".trim($vers_buf[1]).")"); } } } else { $distr2=trim(substr($buf, 0, strpos($buf, "\n"))); if (($distr2 !== null) && ($distr2 != "")) { $this->sys->setDistribution($this->sys->getDistribution()." ".$distr2); } } break; } } } break 2; } } } } } // if the distribution is still unknown if ($this->sys->getDistribution() == "Linux") { if ($_ignore_lsb_release) { // if lsb_release was ignored if ($_Distrib !== "") $this->sys->setDistribution(preg_replace("/ - Version:| Build:| Release| version| build| based in Ubuntu/i", "", $_Distrib)); if ($_DistribIcon !== "") $this->sys->setDistributionIcon($_DistribIcon); } } // if the distribution is still unknown if ($this->sys->getDistribution() == "Linux") { if (((defined('PSI_EMU_PORT') && CommonFunctions::executeProgram('cat', '/etc/os-release', $buf, false)) || (!defined('PSI_EMU_PORT') && CommonFunctions::fileexists($filename="/etc/os-release") && CommonFunctions::rfts($filename, $buf, 0, 4096, false))) && (preg_match('/^TAILS_VERSION_ID="?([^"\r\n]+)/m', $buf, $tid_buf) || preg_match('/^NAME=["\']?([^"\'\r\n]+)/m', $buf, $id_buf) || preg_match('/^DISTRIB_ID=["\']?([^"\'\r\n]+)/m', $buf, $id_buf))) { if (preg_match('/^TAILS_VERSION_ID="?([^"\r\n]+)/m', $buf, $tid_buf)) { if (preg_match('/^TAILS_PRODUCT_NAME="?([^"\r\n]+)/m', $buf, $desc_buf)) { $this->sys->setDistribution(trim($desc_buf[1])." ".trim($tid_buf[1])); } else { if (isset($list['tails']['Name'])) { $this->sys->setDistribution(trim($list['tails']['Name'])." ".trim($tid_buf[1])); } else { $this->sys->setDistribution('Tails'." ".trim($tid_buf[1])); } } $this->sys->setDistributionIcon($list['tails']['Image']); } else { $addversion = false; $distrib = trim($id_buf[1]); if (preg_match('/^PRETTY_NAME=["\']?([^"\'\r\n]+)/m', $buf, $desc_buf) && !preg_match('/\$/', $desc_buf[1]) // if is not defined by variable && ($distrib!==trim($desc_buf[1]))) { if (isset($list[strtolower($distrib)]['Name']) && !preg_match("/".$list[strtolower($distrib)]['Name']."/i", trim($desc_buf[1]))) { $this->sys->setDistribution($list[strtolower($distrib)]['Name'] ." ". preg_replace("/ - Version:| Build:| Release| version| build| based in Ubuntu/i", "", trim($desc_buf[1]))); } else { $this->sys->setDistribution(preg_replace("/ - Version:| Build:| Release| version| build| based in Ubuntu/i", "", trim($desc_buf[1]))); } $distrib2 = $distrib; $distrib3 = $distrib; $distarr = preg_split("/\s/", trim($desc_buf[1]), -1, PREG_SPLIT_NO_EMPTY); if (isset($distarr[0])) { $distrib2 .= ' '.$distarr[0]; } if (isset($distarr[1])) { $distrib3 .= ' '.$distarr[0].' '.$distarr[1]; } if (($distrib!==$distrib3) && isset($list[strtolower($distrib3)]['Image'])) { $this->sys->setDistributionIcon($list[strtolower($distrib3)]['Image']); if (count($distarr) == 2) { $addversion = true; } } elseif (($distrib!==$distrib2) && isset($list[strtolower($distrib2)]['Image'])) { $this->sys->setDistributionIcon($list[strtolower($distrib2)]['Image']); if (count($distarr) == 1) { $addversion = true; } } elseif (($distrib!=="n/a") && isset($list[strtolower($distrib)]['Image'])) { $this->sys->setDistributionIcon($list[strtolower($distrib)]['Image']); } } else { if (isset($list[strtolower($distrib)]['Name'])) { $this->sys->setDistribution(trim($list[strtolower($distrib)]['Name'])); } else { $this->sys->setDistribution($distrib); } if (isset($list[strtolower($distrib)]['Image'])) { $this->sys->setDistributionIcon($list[strtolower($distrib)]['Image']); } $addversion = true; } if ($addversion) { if (preg_match('/^VERSION=["\']?([^"\'\r\n]+)/m', $buf, $vers_buf) || preg_match('/^VERSION_ID=["\']?([^"\'\r\n]+)/m', $buf, $vers_buf) || preg_match('/^DISTRIB_RELEASE=["\']?([^"\'\r\n]+)/m', $buf, $vers_buf) || preg_match('/^IMAGE_VERSION=["\']?([^"\'\r\n]+)/m', $buf, $vers_buf)) { $this->sys->setDistribution($this->sys->getDistribution()." ".trim($vers_buf[1])); } if (!strstr($this->sys->getDistribution(), "(") && (preg_match('/^VERSION_CODENAME="?([^"\r\n]+)/m', $buf, $vers_buf) || preg_match('/^DISTRIB_CODENAME="?([^"\r\n]+)/m', $buf, $vers_buf))) { $this->sys->setDistribution($this->sys->getDistribution()." (".trim($vers_buf[1]).")"); } } } } elseif (CommonFunctions::fileexists($filename="/etc/DISTRO_SPECS") && CommonFunctions::rfts($filename, $buf, 0, 4096, false) && preg_match('/^DISTRO_NAME=["\']([^"\']+)/m', $buf, $id_buf)) { if (isset($list[strtolower(trim($id_buf[1]))]['Name'])) { $dist = trim($list[strtolower(trim($id_buf[1]))]['Name']); } else { $dist = trim($id_buf[1]); } if (preg_match('/^DISTRO_VERSION=([^$#\n\r]+)/m', $buf, $vers_buf)) { $this->sys->setDistribution(trim($dist." ".trim($vers_buf[1]))); } else { $this->sys->setDistribution($dist); } if (isset($list[strtolower(trim($id_buf[1]))]['Image'])) { $this->sys->setDistributionIcon($list[strtolower(trim($id_buf[1]))]['Image']); } else { if (isset($list['puppy']['Image'])) { $this->sys->setDistributionIcon($list['puppy']['Image']); if (!preg_match("/puppy/i", $dist = $this->sys->getDistribution())) { $this->sys->setDistribution("Puppy ".$dist); } } } } elseif ((CommonFunctions::fileexists($filename="/etc/distro-release") && CommonFunctions::rfts($filename, $buf, 1, 4096, false) && ($buf !== null) && (trim($buf) != "")) || (CommonFunctions::fileexists($filename="/etc/system-release") && CommonFunctions::rfts($filename, $buf, 1, 4096, false) && ($buf !== null) && (trim($buf) != ""))) { $this->sys->setDistribution(preg_replace("/ - Version:| Build:| Release| version| build| based in Ubuntu/i", "", trim($buf))); if (preg_match('/^(\S+)\s*/', preg_replace('/^red\s+/', 'red', strtolower($buf)), $id_buf) && isset($list[trim($id_buf[1])]['Image'])) { $this->sys->setDistributionIcon($list[trim($id_buf[1])]['Image']); } } elseif (CommonFunctions::fileexists($filename="/etc/debian_version")) { if (!CommonFunctions::rfts($filename, $buf, 1, 4096, false)) { $buf = ""; } if (isset($list['debian']['Image'])) { $this->sys->setDistributionIcon($list['debian']['Image']); } if (isset($list['debian']['Name'])) { if (($buf === null) || (trim($buf) == "")) { $this->sys->setDistribution($list['debian']['Name']); } else { $this->sys->setDistribution($list['debian']['Name']." ".trim($buf)); } } else { if (($buf === null) || (trim($buf) == "")) { $this->sys->setDistribution('Debian'); } else { $this->sys->setDistribution(trim($buf)); } } } elseif (CommonFunctions::fileexists($filename="/etc/slackware-version")) { if (!CommonFunctions::rfts($filename, $buf, 1, 4096, false)) { $buf = ""; } if (isset($list['slackware']['Image'])) { $this->sys->setDistributionIcon($list['slackware']['Image']); } if (isset($list['slackware']['Name'])) { if (($buf === null) || (trim($buf) == "")) { $this->sys->setDistribution($list['slackware']['Name']); } else { $this->sys->setDistribution($list['slackware']['Name']." ".trim($buf)); } } else { if (($buf === null) || (trim($buf) == "")) { $this->sys->setDistribution('Slackware'); } else { $this->sys->setDistribution(trim($buf)); } } } elseif (CommonFunctions::fileexists($filename="/etc/config/uLinux.conf") && CommonFunctions::rfts($filename, $buf, 0, 4096, false) && preg_match("/^Rsync\sModel\s*=\s*QNAP/m", $buf) && preg_match("/^Version\s*=\s*([\d\.]+)\r?\nBuild\sNumber\s*=\s*(\S+)/m", $buf, $ver_buf)) { $buf = $ver_buf[1]."-".$ver_buf[2]; if (isset($list['qts']['Image'])) { $this->sys->setDistributionIcon($list['qts']['Image']); } if (isset($list['qts']['Name'])) { $this->sys->setDistribution($list['qts']['Name']." ".trim($buf)); } else { $this->sys->setDistribution(trim($buf)); } } } /* restore error level */ error_reporting($old_err_rep); /* restore error handler */ if (function_exists('errorHandlerPsi')) { set_error_handler('errorHandlerPsi'); } } } /** * Processes * * @return void */ protected function _processes() { $process = CommonFunctions::findglob('/proc/*/status', GLOB_NOSORT); if (is_array($process) && (($total = count($process)) > 0)) { $processes['*'] = 0; $buf = ""; for ($i = 0; $i < $total; $i++) { if (CommonFunctions::rfts($process[$i], $buf, 0, 4096, false)) { $processes['*']++; // current total if (preg_match('/^State:\s+(\w)/m', $buf, $state)) { if (isset($processes[$state[1]])) { $processes[$state[1]]++; } else { $processes[$state[1]] = 1; } } } } if (!($processes['*'] > 0)) { $processes['*'] = $processes[' '] = $total; // all unknown } $this->sys->setProcesses($processes); } } /** * get the information * * @see PSI_Interface_OS::build() * * @return void */ public function build() { if (!$this->blockname || $this->blockname==='vitals') { $this->_distro(); $this->_hostname(); $this->_kernel(); $this->_uptime(); $this->_users(); $this->_loadavg(); $this->_processes(); } if (!$this->blockname || $this->blockname==='hardware') { $this->_machine(); $this->_cpuinfo(); $this->_virtualizer(); $this->_pci(); $this->_ide(); $this->_scsi(); $this->_nvme(); $this->_usb(); $this->_i2c(); } if (!$this->blockname || $this->blockname==='memory') { $this->_memory(); } if (!$this->blockname || $this->blockname==='filesystem') { $this->_filesystems(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } } } phpsysinfo-3.4.4/includes/os/class.Minix.inc.php000066400000000000000000000267471467431054600216560ustar00rootroot00000000000000 * @copyright 2012 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.Minix.inc.php 687 2012-09-06 20:54:49Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * Minix sysinfo class * get all the required information from Minix system * * @category PHP * @package PSI Minix OS class * @author Mieczyslaw Nalewaj * @copyright 2012 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Minix extends OS { /** * uptime command result. */ private $_uptime = null; /** * content of the syslog * * @var array */ private $_dmesg = null; /** * read /var/log/messages, but only if we haven't already * * @return array */ protected function readdmesg() { if ($this->_dmesg === null) { if (CommonFunctions::rfts('/var/log/messages', $buf)) { $blocks = preg_replace("/\s(kernel: MINIX \d+\.\d+\.\d+\.)/", '$1', $buf); $parts = preg_split("//", $blocks, -1, PREG_SPLIT_NO_EMPTY); $this->_dmesg = preg_split("/\n/", $parts[count($parts) - 1], -1, PREG_SPLIT_NO_EMPTY); } else { $this->_dmesg = array(); } } return $this->_dmesg; } /** * get the cpu information * * @return void */ protected function _cpuinfo() { if (CommonFunctions::rfts('/proc/cpuinfo', $bufr, 0, 4096, false)) { $processors = preg_split('/\s?\n\s?\n/', trim($bufr)); foreach ($processors as $processor) { $_n = ""; $_f = ""; $_m = ""; $_s = ""; $dev = new CpuDevice(); $details = preg_split("/\n/", $processor, -1, PREG_SPLIT_NO_EMPTY); foreach ($details as $detail) { if (preg_match('/^([^:]+):(.+)$/', trim($detail) , $arrBuff) && (($arrBuff2 = trim($arrBuff[2])) !== '')) { switch (strtolower(trim($arrBuff[1]))) { case 'model name': $_n = $arrBuff2; break; case 'cpu mhz': $dev->setCpuSpeed($arrBuff2); break; case 'cpu family': $_f = $arrBuff2; break; case 'model': $_m = $arrBuff2; break; case 'stepping': $_s = $arrBuff2; break; case 'flags': if (preg_match("/ vmx/", $arrBuff2)) { $dev->setVirt("vmx"); } elseif (preg_match("/ svm/", $arrBuff2)) { $dev->setVirt("svm"); } break; case 'vendor_id': $dev->setVendorId($arrBuff2); } } } if ($_n == "") $_n="CPU"; if ($_f != "") $_n.=" Family ".$_f; if ($_m != "") $_n.=" Model ".$_m; if ($_s != "") $_n.=" Stepping ".$_s; $dev->SetModel($_n); $this->sys->setCpus($dev); } } else foreach ($this->readdmesg() as $line) { if (preg_match('/kernel: (CPU .*) freq (.*) MHz/', $line, $ar_buf)) { $dev = new CpuDevice(); $dev->setModel($ar_buf[1]); $dev->setCpuSpeed($ar_buf[2]); $this->sys->setCpus($dev); } } } /** * PCI devices * get the pci device information out of dmesg * * @return void */ protected function _pci() { if (CommonFunctions::rfts('/proc/pci', $strBuf, 0, 4096, false)) { $arrLines = preg_split("/\n/", $strBuf, -1, PREG_SPLIT_NO_EMPTY); $arrResults = array(); foreach ($arrLines as $strLine) { $arrParams = preg_split('/\s+/', trim($strLine), 4); if (count($arrParams) == 4) $strName = $arrParams[3]; else $strName = "unknown"; $strName = preg_replace('/\(.*\)/', '', $strName); $dev = new HWDevice(); $dev->setName($strName); $arrResults[] = $dev; } foreach ($arrResults as $dev) { $this->sys->setPciDevices($dev); } } if (!(isset($arrResults) && is_array($arrResults)) && ($results = Parser::lspci())) { /* if access error: chmod 4755 /usr/bin/lspci */ foreach ($results as $dev) { $this->sys->setPciDevices($dev); } } } /** * Minix Version * * @return void */ private function _kernel() { if (CommonFunctions::executeProgram('uname', '-rvm', $ret)) { foreach ($this->readdmesg() as $line) { if (preg_match('/kernel: MINIX (\d+\.\d+\.\d+)\. \((.+)\)/', $line, $ar_buf)) { $branch = $ar_buf[2]; break; } } if (isset($branch)) $this->sys->setKernel($ret.' ('.$branch.')'); else $this->sys->setKernel($ret); } } /** * Distribution * * @return void */ protected function _distro() { if (CommonFunctions::executeProgram('uname', '-sr', $ret)) $this->sys->setDistribution($ret); else $this->sys->setDistribution('Minix'); $this->sys->setDistributionIcon('Minix.png'); } /** * UpTime * time the system is running * * @return void */ private function _uptime() { if (($this->_uptime !== null) || CommonFunctions::executeProgram('uptime', '', $this->_uptime)) { if (preg_match("/up (\d+) day[s]?,\s*(\d+):(\d+),/", $this->_uptime, $ar_buf)) { $min = $ar_buf[3]; $hours = $ar_buf[2]; $days = $ar_buf[1]; $this->sys->setUptime($days * 86400 + $hours * 3600 + $min * 60); } elseif (preg_match("/up (\d+):(\d+),/", $this->_uptime, $ar_buf)) { $min = $ar_buf[2]; $hours = $ar_buf[1]; $this->sys->setUptime($hours * 3600 + $min * 60); } } } /** * Processor Load * optionally create a loadbar * * @return void */ private function _loadavg() { if (($this->_uptime !== null) || CommonFunctions::executeProgram('uptime', '', $this->_uptime)) { if (preg_match("/load averages: (.*), (.*), (.*)$/", $this->_uptime, $ar_buf)) { $this->sys->setLoad($ar_buf[1].' '.$ar_buf[2].' '.$ar_buf[3]); } } } /** * Virtual Host Name * * @return void */ private function _hostname() { if (PSI_USE_VHOST) { if (CommonFunctions::readenv('SERVER_NAME', $hnm)) $this->sys->setHostname($hnm); } else { if (CommonFunctions::executeProgram('uname', '-n', $result, PSI_DEBUG)) { $ip = gethostbyname($result); if ($ip != $result) { $this->sys->setHostname(gethostbyaddr($ip)); } } } } /** * Physical memory information and Swap Space information * * @return void */ private function _memory() { if (CommonFunctions::rfts('/proc/meminfo', $bufr, 1, 4096, false)) { $ar_buf = preg_split('/\s+/', trim($bufr)); if (count($ar_buf) >= 5) { $this->sys->setMemTotal($ar_buf[0]*$ar_buf[1]); $this->sys->setMemFree($ar_buf[0]*$ar_buf[2]); $this->sys->setMemCache($ar_buf[0]*$ar_buf[4]); $this->sys->setMemUsed($ar_buf[0]*($ar_buf[1]-$ar_buf[2])); } } } /** * filesystem information * * @return void */ private function _filesystems() { $arrResult = Parser::df("-P 2>/dev/null"); foreach ($arrResult as $dev) { $this->sys->setDiskDevices($dev); } } /** * network information * * @return void */ private function _network() { if (CommonFunctions::executeProgram('ifconfig', '-a', $bufr, PSI_DEBUG)) { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { if (preg_match("/^([^\s:]+):\saddress\s(\S+)\snetmask/", $line, $ar_buf)) { $dev = new NetDevice(); $dev->setName($ar_buf[1]); if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS)) { $dev->setInfo($ar_buf[2]); } $this->sys->setNetDevices($dev); } } } } /** * Processes * * @return void */ protected function _processes() { if (CommonFunctions::executeProgram('ps', 'alx', $bufr, PSI_DEBUG)) { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $processes['*'] = 0; foreach ($lines as $line) { if (preg_match("/^\s(\w)\s/", $line, $ar_buf)) { $processes['*']++; $state = $ar_buf[1]; if ($state == 'W') $state = 'D'; //linux format elseif ($state == 'D') $state = 'd'; //invalid if (isset($processes[$state])) { $processes[$state]++; } else { $processes[$state] = 1; } } } if ($processes['*'] > 0) { $this->sys->setProcesses($processes); } } } /** * get the information * * @return void */ public function build() { $this->error->addWarning("The Minix version of phpSysInfo is a work in progress, some things currently don't work"); if (!$this->blockname || $this->blockname==='vitals') { $this->_distro(); $this->_hostname(); $this->_kernel(); $this->_uptime(); $this->_users(); $this->_loadavg(); $this->_processes(); } if (!$this->blockname || $this->blockname==='hardware') { $this->_pci(); $this->_cpuinfo(); } if (!$this->blockname || $this->blockname==='memory') { $this->_memory(); } if (!$this->blockname || $this->blockname==='filesystem') { $this->_filesystems(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } } } phpsysinfo-3.4.4/includes/os/class.NetBSD.inc.php000066400000000000000000000251211467431054600216320ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.NetBSD.inc.php 287 2009-06-26 12:11:59Z bigmichi1 $ * @link http://phpsysinfo.sourceforge.net */ /** * NetBSD sysinfo class * get all the required information from NetBSD systems * * @category PHP * @package PSI NetBSD OS class * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class NetBSD extends BSDCommon { /** * define the regexp for log parser */ public function __construct($blockname = false) { parent::__construct($blockname); //$this->setCPURegExp1("/^cpu(.*)\, (.*) MHz/"); $this->setCPURegExp2("/user = (.*), nice = (.*), sys = (.*), intr = (.*), idle = (.*)/"); $this->setSCSIRegExp1("/^(.*) at scsibus.*: <(.*)> .*/"); $this->setSCSIRegExp2("/^(sd[0-9]+): (.*)([MG])B,/"); $this->setPCIRegExp1("/(.*) at pci[0-9]+ dev [0-9]* function [0-9]*: (.*)$/"); $this->setPCIRegExp2("/\"(.*)\" (.*).* at [.0-9]+ irq/"); } /** * get network information * * @return void */ private function _network() { CommonFunctions::executeProgram('netstat', '-nbdi | cut -c1-25,44- | grep "^[a-z]*[0-9][ \t].*Link"', $netstat_b); CommonFunctions::executeProgram('netstat', '-ndi | cut -c1-25,44- | grep "^[a-z]*[0-9][ \t].*Link"', $netstat_n); $lines_b = preg_split("/\n/", $netstat_b, -1, PREG_SPLIT_NO_EMPTY); $lines_n = preg_split("/\n/", $netstat_n, -1, PREG_SPLIT_NO_EMPTY); for ($i = 0, $max = sizeof($lines_b); $i < $max; $i++) { $ar_buf_b = preg_split("/\s+/", $lines_b[$i]); $ar_buf_n = preg_split("/\s+/", $lines_n[$i]); if (!empty($ar_buf_b[0]) && (!empty($ar_buf_n[3]) || ($ar_buf_n[3] === "0"))) { $dev = new NetDevice(); $dev->setName($ar_buf_b[0]); $dev->setTxBytes($ar_buf_b[4]); $dev->setRxBytes($ar_buf_b[3]); $dev->setDrops($ar_buf_n[8]); $dev->setErrors($ar_buf_n[4] + $ar_buf_n[6]); if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS) && (CommonFunctions::executeProgram('ifconfig', $ar_buf_b[0].' 2>/dev/null', $bufr2, PSI_DEBUG))) { $speedinfo = ""; $bufe2 = preg_split("/\n/", $bufr2, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe2 as $buf2) { if (preg_match('/^\s+address:\s+(\S+)/i', $buf2, $ar_buf2)) { if (!defined('PSI_HIDE_NETWORK_MACADDR') || !PSI_HIDE_NETWORK_MACADDR) $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').preg_replace('/:/', '-', strtoupper($ar_buf2[1]))); } elseif (preg_match('/^\s+inet\s+(\S+)\s+netmask/i', $buf2, $ar_buf2)) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1]); } elseif ((preg_match('/^\s+inet6\s+([^\s%]+)\s+prefixlen/i', $buf2, $ar_buf2) || preg_match('/^\s+inet6\s+([^\s%]+)%\S+\s+prefixlen/i', $buf2, $ar_buf2)) && ($ar_buf2[1]!="::") && !preg_match('/^fe80::/i', $ar_buf2[1])) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').strtolower($ar_buf2[1])); } elseif (preg_match('/^\s+media:\s+/i', $buf2) && preg_match('/[\(\s](\d+)(G*)base/i', $buf2, $ar_buf2)) { if (isset($ar_buf2[2]) && strtoupper($ar_buf2[2])=="G") { $unit = "G"; } else { $unit = "M"; } if (preg_match('/\s(\S+)-duplex/i', $buf2, $ar_buf3)) $speedinfo = $ar_buf2[1].$unit.'b/s '.strtolower($ar_buf3[1]); else $speedinfo = $ar_buf2[1].$unit.'b/s'; } } if ($speedinfo != "") $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$speedinfo); } $this->sys->setNetDevices($dev); } } } /** * IDE information * * @return void */ protected function ide() { foreach ($this->readdmesg() as $line) { if (preg_match('/^(.*) at (pciide|wdc|atabus|atapibus)[0-9]+ (.*): <(.*)>/', $line, $ar_buf) || preg_match('/^(.*) at (pciide|wdc|atabus|atapibus)[0-9]+ /', $line, $ar_buf)) { $dev = new HWDevice(); if (isset($ar_buf[4])) { $dev->setName($ar_buf[4]); } else { $dev->setName($ar_buf[1]); // now loop again and find the name foreach ($this->readdmesg() as $line2) { if (preg_match("/^(".$ar_buf[1]."): <(.*)>$/", $line2, $ar_buf_n)) { $dev->setName($ar_buf_n[2]); break; } } } if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { // now loop again and find the capacity foreach ($this->readdmesg() as $line2) { if (preg_match("/^(".$ar_buf[1]."): (.*), (.*), (.*)MB, .*$/", $line2, $ar_buf_n)) { $dev->setCapacity($ar_buf_n[4] * 1024 * 1024); break; } elseif (preg_match("/^(".$ar_buf[1]."): (.*) MB, (.*), (.*), .*$/", $line2, $ar_buf_n)) { $dev->setCapacity($ar_buf_n[2] * 1024 * 1024); break; } elseif (preg_match("/^(".$ar_buf[1]."): (.*) GB, (.*), (.*), .*$/", $line2, $ar_buf_n)) { $dev->setCapacity($ar_buf_n[2] * 1024 * 1024 * 1024); break; } } } $this->sys->setIdeDevices($dev); } } } /** * CPU information * * @return void */ protected function cpuinfo() { $was = false; $cpuarray = array(); foreach ($this->readdmesg() as $line) { if (preg_match("/^cpu([0-9])+: (.*)/", $line, $ar_buf)) { $was = true; $ar_buf[2] = trim($ar_buf[2]); if (preg_match("/^(.+), ([\d\.]+) MHz/", $ar_buf[2], $ar_buf2)) { if (($model = trim($ar_buf2[1])) !== "") { $cpuarray[$ar_buf[1]]['model'] = $model; } if (($speed = trim($ar_buf2[2])) > 0) { $cpuarray[$ar_buf[1]]['speed'] = $speed; } } elseif (preg_match("/^L2 cache (\d+) ([KM])B /", $ar_buf[2], $ar_buf2)) { if ($ar_buf2[2]=="M") { $cpuarray[$ar_buf[1]]['cache'] = $ar_buf2[1]*1024*1024; } elseif ($ar_buf2[2]=="K") { $cpuarray[$ar_buf[1]]['cache'] = $ar_buf2[1]*1024; } } } elseif (!preg_match("/^cpu[0-9]+ /", $line) && $was) { break; } } $ncpu = $this->grabkey('hw.ncpu'); if (($ncpu === "") || !($ncpu >= 1)) { $ncpu = 1; } $ncpu = max($ncpu, count($cpuarray)); $model = $this->grabkey('machdep.cpu_brand'); $model2 = $this->grabkey('hw.model'); if ($cpuspeed = $this->grabkey('machdep.tsc_freq')) { $speed = round($cpuspeed / 1000000); } else { $speed = ""; } for ($cpu = 0 ; $cpu < $ncpu ; $cpu++) { $dev = new CpuDevice(); if (isset($cpuarray[$cpu]['model'])) { $dev->setModel($cpuarray[$cpu]['model']); } elseif ($model !== "") { $dev->setModel($model); } elseif ($model2 !== "") { $dev->setModel($model2); } if (isset($cpuarray[$cpu]['speed'])) { $dev->setCpuSpeed($cpuarray[$cpu]['speed']); } elseif ($speed !== "") { $dev->setCpuSpeed($speed); } if (isset($cpuarray[$cpu]['cache'])) { $dev->setCache($cpuarray[$cpu]['cache']); } if (($ncpu == 1) && PSI_LOAD_BAR) { $dev->setLoad($this->cpuusage()); } $this->sys->setCpus($dev); } } /** * get icon name * * @return void */ private function _distroicon() { $this->sys->setDistributionIcon('NetBSD.png'); } /** * Processes * * @return void */ protected function _processes() { if (CommonFunctions::executeProgram('ps', 'aux', $bufr, PSI_DEBUG)) { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $processes['*'] = 0; foreach ($lines as $line) { if (preg_match("/^\S+\s+\d+\s+\S+\s+\S+\s+\d+\s+\d+\s+\S+\s+(\w)/", $line, $ar_buf)) { $processes['*']++; $state = $ar_buf[1]; if ($state == 'O') $state = 'R'; //linux format elseif ($state == 'I') $state = 'S'; if (isset($processes[$state])) { $processes[$state]++; } else { $processes[$state] = 1; } } } if ($processes['*'] > 0) { $this->sys->setProcesses($processes); } } } /** * get the information * * @see BSDCommon::build() * * @return void */ public function build() { parent::build(); if (!$this->blockname || $this->blockname==='vitals') { $this->_distroicon(); $this->_processes(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } } } phpsysinfo-3.4.4/includes/os/class.OS.inc.php000066400000000000000000000265501467431054600211030ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.OS.inc.php 699 2012-09-15 11:57:13Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * Basic OS functions for all OS classes * * @category PHP * @package PSI OS class * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ abstract class OS implements PSI_Interface_OS { /** * object for error handling * * @var PSI_Error */ protected $error; /** * block name * * @var string */ protected $blockname = false; /** * @var System */ protected $sys; /** * build the global Error object */ public function __construct($blockname = false) { $this->error = PSI_Error::singleton(); $this->sys = new System(); $this->blockname = $blockname; $this->sys->setOS(get_class($this)); } /** * get os specific encoding * * @see PSI_Interface_OS::getEncoding() * * @return string */ public function getEncoding() { return PSI_SYSTEM_CODEPAGE; } /** * get os specific language * * @see PSI_Interface_OS::getLanguage() * * @return string */ public function getLanguage() { return PSI_SYSTEM_LANG; } /** * get block name * * @see PSI_Interface_OS::getBlockName() * * @return string */ public function getBlockName() { return $this->blockname; } /** * Number of Users * * @return void */ protected function _users() { if (CommonFunctions::executeProgram('who', '', $strBuf, PSI_DEBUG)) { if (strlen($strBuf) > 0) { $lines = preg_split('/\n/', $strBuf); $this->sys->setUsers(count($lines)); } } elseif (CommonFunctions::executeProgram('uptime', '', $buf, PSI_DEBUG) && preg_match("/,\s+(\d+)\s+user[s]?,/", $buf, $ar_buf)) { //} elseif (CommonFunctions::executeProgram('uptime', '', $buf) && preg_match("/,\s+(\d+)\s+user[s]?,\s+load average[s]?:\s+(.*),\s+(.*),\s+(.*)$/", $buf, $ar_buf)) { $this->sys->setUsers($ar_buf[1]); } else { $processlist = CommonFunctions::findglob('/proc/*/cmdline', GLOB_NOSORT); if (is_array($processlist) && (($total = count($processlist)) > 0)) { $count = 0; $buf = ""; for ($i = 0; $i < $total; $i++) { if (CommonFunctions::rfts($processlist[$i], $buf, 0, 4096, false)) { $name = str_replace(chr(0), ' ', trim($buf)); if (preg_match("/^-/", $name)) { $count++; } } } if ($count > 0) { $this->sys->setUsers($count); } } } } /** * IP of the Host * * @return void */ protected function _ip() { if (PSI_USE_VHOST && !defined('PSI_EMU_HOSTNAME')) { if ((CommonFunctions::readenv('SERVER_ADDR', $result) || CommonFunctions::readenv('LOCAL_ADDR', $result)) //is server address defined && !strstr($result, '.') && strstr($result, ':')) { //is IPv6, quick version of preg_match('/\(([[0-9A-Fa-f\:]+)\)/', $result) $dnsrec = dns_get_record($this->sys->getHostname(), DNS_AAAA); if (isset($dnsrec[0]['ipv6'])) { //is DNS IPv6 record $this->sys->setIp($dnsrec[0]['ipv6']); //from DNS (avoid IPv6 NAT translation) } else { $this->sys->setIp(preg_replace('/^::ffff:/i', '', $result)); //from SERVER_ADDR or LOCAL_ADDR } } else { $this->sys->setIp(gethostbyname($this->sys->getHostname())); //IPv4 only } } elseif (((PSI_OS != 'WINNT') && !defined('PSI_EMU_HOSTNAME')) && (CommonFunctions::readenv('SERVER_ADDR', $result) || CommonFunctions::readenv('LOCAL_ADDR', $result))) { $this->sys->setIp(preg_replace('/^::ffff:/i', '', $result)); } else { //$this->sys->setIp(gethostbyname($this->sys->getHostname())); $hn = $this->sys->getHostname(); $ghbn = gethostbyname($hn); if (defined('PSI_EMU_HOSTNAME') && ($hn === $ghbn)) { $this->sys->setIp(PSI_EMU_HOSTNAME); } else { $this->sys->setIp($ghbn); } } } /** * MEM information from dmidecode * * @return void */ protected function _dmimeminfo() { $dmimd = CommonFunctions::readdmimemdata(); if (!empty($dmimd)) { foreach ($dmimd as $mem) { if (isset($mem['Size']) && preg_match('/^(\d+)\s(M|G)B$/', $mem['Size'], $size) && ($size[1] > 0)) { $dev = new HWDevice(); $name = ''; if (isset($mem['Part Number']) && !preg_match("/^PartNum\d+$/", $part = $mem['Part Number']) && ($part != 'None') && ($part != 'N/A') && ($part != 'Not Specified') && ($part != 'NOT AVAILABLE')) { $name = $part; } if (isset($mem['Locator']) && (($dloc = $mem['Locator']) != 'None') && ($dloc != 'N/A') && ($dloc != 'Not Specified')) { if ($name != '') { $name .= ' - '.$dloc; } else { $name = $dloc; } } if (isset($mem['Bank Locator']) && (($bank = $mem['Bank Locator']) != 'None') && ($bank != 'N/A') && ($bank != 'Not Specified')) { if ($name != '') { $name .= ' in '.$bank; } else { $name = 'Physical Memory in '.$bank; } } if ($name != '') { $dev->setName(trim($name)); } else { $dev->setName('Physical Memory'); } if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if (isset($mem['Manufacturer']) && !preg_match("/^([A-F\d]{4}|[A-F\d]{12}|[A-F\d]{16})$/", $manufacturer = $mem['Manufacturer']) && !preg_match("/^Manufacturer\d+$/", $manufacturer) && !preg_match("/^Mfg \d+$/", $manufacturer) && !preg_match("/^JEDEC ID:/", $manufacturer) && ($manufacturer != 'None') && ($manufacturer != 'N/A') && ($manufacturer != 'Not Specified') && ($manufacturer != 'UNKNOWN')) { $dev->setManufacturer($manufacturer); } if ($size[2] == 'G') { $dev->setCapacity($size[1]*1024*1024*1024); } else { $dev->setCapacity($size[1]*1024*1024); } $memtype = ''; if (isset($mem['Type']) && (($type = $mem['Type']) != 'None') && ($type != 'N/A') && ($type != 'Not Specified') && ($type != 'Other') && ($type != 'Unknown') && ($type != '')) { if (isset($mem['Speed']) && preg_match('/^(\d+)\s(MHz|MT\/s)/', $mem['Speed'], $speed) && ($speed[1] > 0) && (preg_match('/^(DDR\d*)(.*)/', $type, $dr) || preg_match('/^(SDR)AM(.*)/', $type, $dr))) { if (isset($mem['Minimum Voltage']) && isset($mem['Maximum Voltage']) && preg_match('/^([\d\.]+)\sV$/', $mem['Minimum Voltage'], $minv) && preg_match('/^([\d\.]+)\sV$/', $mem['Maximum Voltage'], $maxv) && ($minv[1] > 0) && ($maxv[1] >0) && ($minv[1] < $maxv[1])) { $lv = 'L'; } else { $lv = ''; } if (isset($dr[2])) { $memtype = $dr[1].$lv.'-'.$speed[1].' '.$dr[2]; } else { $memtype = $dr[1].$lv.'-'.$speed[1]; } } else { $memtype = $type; } } if (isset($mem['Form Factor']) && (($form = $mem['Form Factor']) != 'None') && ($form != 'N/A') && ($form != 'Not Specified') && ($form != 'Other') && ($form != 'Unknown') && !preg_match('/ '.$form.'$/', $memtype)) { $memtype .= ' '.$form; } if (isset($mem['Data Width']) && isset($mem['Total Width']) && preg_match('/^(\d+)\sbits$/', $mem['Data Width'], $dataw) && preg_match('/^(\d+)\sbits$/', $mem['Total Width'], $totalw) && ($dataw[1] > 0) && ($totalw[1] >0) && ($dataw[1] < $totalw[1])) { $memtype .= ' ECC'; } if (isset($mem['Type Detail']) && preg_match('/Registered/', $mem['Type Detail'])) { $memtype .= ' REG'; } if (($memtype = trim($memtype)) != '') { $dev->setProduct($memtype); } if (isset($mem['Configured Clock Speed']) && preg_match('/^(\d+)\s(MHz|MT\/s)$/', $mem['Configured Clock Speed'], $clock) && ($clock[1] > 0)) { $dev->setSpeed($clock[1]); } if (isset($mem['Configured Voltage']) && preg_match('/^([\d\.]+)\sV$/', $mem['Configured Voltage'], $voltage) && ($voltage[1] > 0)) { $dev->setVoltage($voltage[1]); } if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && isset($mem['Serial Number']) && !preg_match("/^SerNum\d+$/", $serial = $mem['Serial Number']) && ($serial != 'None') && ($serial != 'Not Specified')) { $dev->setSerial($serial); } } $this->sys->setMemDevices($dev); } } } } /** * get the filled or unfilled (with default values) System object * * @see PSI_Interface_OS::getSys() * * @return System */ final public function getSys() { $this->build(); if (!$this->blockname || $this->blockname==='vitals') { $this->_ip(); } if ((!$this->blockname || $this->blockname==='hardware') && (PSI_OS != 'WINNT') && !defined('PSI_EMU_HOSTNAME')) { $this->_dmimeminfo(); } return $this->sys; } } phpsysinfo-3.4.4/includes/os/class.OpenBSD.inc.php000066400000000000000000000247161467431054600220160ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.OpenBSD.inc.php 621 2012-07-29 18:49:04Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * OpenBSD sysinfo class * get all the required information from OpenBSD systems * * @category PHP * @package PSI OpenBSD OS class * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class OpenBSD extends BSDCommon { /** * define the regexp for log parser */ public function __construct($blockname = false) { parent::__construct($blockname); // $this->setCPURegExp1("/^cpu(.*) (.*) MHz/"); $this->setCPURegExp2("/(.*),(.*),(.*),(.*),(.*)/"); $this->setSCSIRegExp1("/^(.*) at scsibus.*: <(.*)> .*/"); $this->setSCSIRegExp2("/^(sd[0-9]+): (.*)MB,/"); $this->setPCIRegExp1("/(.*) at pci[0-9]+ .* \"(.*)\"/"); $this->setPCIRegExp2("/\"(.*)\" (.*).* at [.0-9]+ irq/"); } /** * get network information * * @return void */ private function _network() { CommonFunctions::executeProgram('netstat', '-nbdi | cut -c1-25,44- | grep Link | grep -v \'* \'', $netstat_b, PSI_DEBUG); CommonFunctions::executeProgram('netstat', '-ndi | cut -c1-25,44- | grep Link | grep -v \'* \'', $netstat_n, PSI_DEBUG); $lines_b = preg_split("/\n/", $netstat_b, -1, PREG_SPLIT_NO_EMPTY); $lines_n = preg_split("/\n/", $netstat_n, -1, PREG_SPLIT_NO_EMPTY); for ($i = 0, $max = sizeof($lines_b); $i < $max; $i++) { $ar_buf_b = preg_split("/\s+/", $lines_b[$i]); $ar_buf_n = preg_split("/\s+/", $lines_n[$i]); if (!empty($ar_buf_b[0]) && (!empty($ar_buf_n[3]) || ($ar_buf_n[3] === "0"))) { $dev = new NetDevice(); $dev->setName($ar_buf_b[0]); $dev->setTxBytes($ar_buf_b[4]); $dev->setRxBytes($ar_buf_b[3]); if (sizeof($ar_buf_n) == 9) { $dev->setErrors($ar_buf_n[4] + $ar_buf_n[6]); $dev->setDrops($ar_buf_n[8]); } elseif (sizeof($ar_buf_n) == 8) { $dev->setDrops($ar_buf_n[4] + $ar_buf_n[6]); } if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS) && (CommonFunctions::executeProgram('ifconfig', $ar_buf_b[0].' 2>/dev/null', $bufr2, PSI_DEBUG))) { $speedinfo = ""; $bufe2 = preg_split("/\n/", $bufr2, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe2 as $buf2) { if (preg_match('/^\s+lladdr\s+(\S+)/i', $buf2, $ar_buf2)) { if (!defined('PSI_HIDE_NETWORK_MACADDR') || !PSI_HIDE_NETWORK_MACADDR) $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').preg_replace('/:/', '-', strtoupper($ar_buf2[1]))); } elseif (preg_match('/^\s+inet\s+(\S+)\s+netmask/i', $buf2, $ar_buf2)) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1]); } elseif ((preg_match('/^\s+inet6\s+([^\s%]+)\s+prefixlen/i', $buf2, $ar_buf2) || preg_match('/^\s+inet6\s+([^\s%]+)%\S+\s+prefixlen/i', $buf2, $ar_buf2)) && ($ar_buf2[1]!="::") && !preg_match('/^fe80::/i', $ar_buf2[1])) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').strtolower($ar_buf2[1])); } elseif (preg_match('/^\s+media:\s+/i', $buf2) && preg_match('/[\(\s](\d+)(G*)base/i', $buf2, $ar_buf2)) { if (isset($ar_buf2[2]) && strtoupper($ar_buf2[2])=="G") { $unit = "G"; } else { $unit = "M"; } if (preg_match('/\s(\S+)-duplex/i', $buf2, $ar_buf3)) $speedinfo = $ar_buf2[1].$unit.'b/s '.strtolower($ar_buf3[1]); else $speedinfo = $ar_buf2[1].$unit.'b/s'; } } if ($speedinfo != "") $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$speedinfo); } $this->sys->setNetDevices($dev); } } } /** * IDE information * * @return void */ protected function ide() { foreach ($this->readdmesg() as $line) { if (preg_match('/^(.*) at pciide[0-9]+ (.*): <(.*)>/', $line, $ar_buf)) { $dev = new HWDevice(); $dev->setName($ar_buf[3]); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { // now loop again and find the capacity foreach ($this->readdmesg() as $line2) { if (preg_match("/^(".$ar_buf[1]."): (.*), (.*), (.*)MB, .*$/", $line2, $ar_buf_n)) { $dev->setCapacity($ar_buf_n[4] * 1024 * 1024); break; } } } $this->sys->setIdeDevices($dev); } } } /** * get CPU information * * @return void */ protected function cpuinfo() { $was = false; $cpuarray = array(); foreach ($this->readdmesg() as $line) { if (preg_match("/^cpu([0-9])+: (.*)/", $line, $ar_buf)) { $was = true; $ar_buf[2] = trim($ar_buf[2]); if (preg_match("/^(.+), ([\d\.]+) MHz/", $ar_buf[2], $ar_buf2)) { if (($model = trim($ar_buf2[1])) !== "") { $cpuarray[$ar_buf[1]]['model'] = $model; } if (($speed = trim($ar_buf2[2])) > 0) { $cpuarray[$ar_buf[1]]['speed'] = $speed; } } elseif (preg_match("/(\d+)([KM])B \S+ \S+ L[23] cache$/", $ar_buf[2], $ar_buf2)) { if ($ar_buf2[2]=="M") { $cpuarray[$ar_buf[1]]['cache'] = $ar_buf2[1]*1024*1024; } elseif ($ar_buf2[2]=="K") { $cpuarray[$ar_buf[1]]['cache'] = $ar_buf2[1]*1024; } } else { $feats = preg_split("/,/", strtolower($ar_buf[2]), -1, PREG_SPLIT_NO_EMPTY); foreach ($feats as $feat) { if (($feat=="vmx") || ($feat=="svm")) { $cpuarray[$ar_buf[1]]['virt'] = $feat; } elseif ($feat=="hv") { if (!isset($cpuarray[$ar_buf[1]]['virt'])) { $cpuarray[$ar_buf[1]]['virt'] = 'hypervisor'; } if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO) { $this->sys->setVirtualizer("hypervisor", false); } } } } } elseif (!preg_match("/^cpu[0-9]+|^mtrr: |^acpitimer[0-9]+: /", $line) && $was) { break; } } $ncpu = $this->grabkey('hw.ncpu'); if (($ncpu === "") || !($ncpu >= 1)) { $ncpu = 1; } $ncpu = max($ncpu, count($cpuarray)); $model = $this->grabkey('hw.model'); $speed = $this->grabkey('hw.cpuspeed'); $vendor = $this->grabkey('machdep.cpuvendor'); for ($cpu = 0 ; $cpu < $ncpu ; $cpu++) { $dev = new CpuDevice(); if (isset($cpuarray[$cpu]['model'])) { $dev->setModel($cpuarray[$cpu]['model']); } elseif ($model !== "") { $dev->setModel($model); } if (isset($cpuarray[$cpu]['speed'])) { $dev->setCpuSpeed($cpuarray[$cpu]['speed']); } elseif ($speed !== "") { $dev->setCpuSpeed($speed); } if (isset($cpuarray[$cpu]['cache'])) { $dev->setCache($cpuarray[$cpu]['cache']); } if (isset($cpuarray[$cpu]['virt'])) { $dev->setVirt($cpuarray[$cpu]['virt']); } if ($vendor !== "") { $dev->setVendorId($vendor); } if (($ncpu == 1) && PSI_LOAD_BAR) { $dev->setLoad($this->cpuusage()); } $this->sys->setCpus($dev); } } /** * get icon name * * @return void */ private function _distroicon() { $this->sys->setDistributionIcon('OpenBSD.png'); } /** * Processes * * @return void */ protected function _processes() { if (CommonFunctions::executeProgram('ps', 'aux', $bufr, PSI_DEBUG)) { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $processes['*'] = 0; foreach ($lines as $line) { if (preg_match("/^\S+\s+\d+\s+\S+\s+\S+\s+\d+\s+\d+\s+\S+\s+(\w)/", $line, $ar_buf)) { $processes['*']++; $state = $ar_buf[1]; if ($state == 'I') $state = 'S'; //linux format if (isset($processes[$state])) { $processes[$state]++; } else { $processes[$state] = 1; } } } if ($processes['*'] > 0) { $this->sys->setProcesses($processes); } } } /** * get the information * * @see BSDCommon::build() * * @return void */ public function build() { parent::build(); if (!$this->blockname || $this->blockname==='vitals') { $this->_distroicon(); $this->_processes(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } } } phpsysinfo-3.4.4/includes/os/class.QNX.inc.php000066400000000000000000000146441467431054600212310ustar00rootroot00000000000000 * @copyright 2012 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.QNX.inc.php 687 2012-09-06 20:54:49Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * QNX sysinfo class * get all the required information from QNX system * * @category PHP * @package PSI QNX OS class * @author Mieczyslaw Nalewaj * @copyright 2012 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class QNX extends OS { /** * get the cpu information * * @return void */ protected function _cpuinfo() { if (CommonFunctions::executeProgram('pidin', 'info', $buf) && preg_match('/^Processor\d+: (.*)/m', $buf)) { $lines = preg_split("/\n/", $buf, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { if (preg_match('/^Processor\d+: (.+)/', $line, $proc)) { $dev = new CpuDevice(); $dev->SetModel(trim($proc[1])); if (preg_match('/(\d+)MHz/', $proc[1], $mhz)) { $dev->setCpuSpeed($mhz[1]); } $this->sys->setCpus($dev); } } } } /** * QNX Version * * @return void */ private function _kernel() { if (CommonFunctions::executeProgram('uname', '-rvm', $ret)) { $this->sys->setKernel($ret); } } /** * Distribution * * @return void */ protected function _distro() { if (CommonFunctions::executeProgram('uname', '-sr', $ret)) $this->sys->setDistribution($ret); else $this->sys->setDistribution('QNX'); $this->sys->setDistributionIcon('QNX.png'); } /** * UpTime * time the system is running * * @return void */ private function _uptime() { if (CommonFunctions::executeProgram('pidin', 'info', $buf) && preg_match('/^.* BootTime:(.*)/', $buf, $bstart) && CommonFunctions::executeProgram('date', '', $bstop)) { date_default_timezone_set('UTC'); $uptime = strtotime($bstop)-strtotime($bstart[1]); if ($uptime > 0) $this->sys->setUptime($uptime); } } /** * Number of Users * * @return void */ protected function _users() { $this->sys->setUsers(1); } /** * Virtual Host Name * * @return void */ private function _hostname() { if (PSI_USE_VHOST) { if (CommonFunctions::readenv('SERVER_NAME', $hnm)) $this->sys->setHostname($hnm); } else { if (CommonFunctions::executeProgram('uname', '-n', $result, PSI_DEBUG)) { $ip = gethostbyname($result); if ($ip != $result) { $this->sys->setHostname(gethostbyaddr($ip)); } } } } /** * Physical memory information and Swap Space information * * @return void */ private function _memory() { if (CommonFunctions::executeProgram('pidin', 'info', $buf) && preg_match('/^.* FreeMem:(\S+)Mb\/(\S+)Mb/', $buf, $memm)) { $this->sys->setMemTotal(1024*1024*$memm[2]); $this->sys->setMemFree(1024*1024*$memm[1]); $this->sys->setMemUsed(1024*1024*($memm[2]-$memm[1])); } } /** * filesystem information * * @return void */ private function _filesystems() { $arrResult = Parser::df("-P 2>/dev/null"); foreach ($arrResult as $dev) { $this->sys->setDiskDevices($dev); } } /** * network information * * @return void */ private function _network() { if (CommonFunctions::executeProgram('ifconfig', '', $bufr, PSI_DEBUG)) { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $was = false; $dev = null; foreach ($lines as $line) { if (preg_match("/^([^\s:]+)/", $line, $ar_buf)) { if ($was) { $this->sys->setNetDevices($dev); } $dev = new NetDevice(); $dev->setName($ar_buf[1]); $was = true; } else { if ($was) { if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS)) { if (preg_match('/^\s+address:\s*(\S+)/i', $line, $ar_buf2)) { if (!defined('PSI_HIDE_NETWORK_MACADDR') || !PSI_HIDE_NETWORK_MACADDR) $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').preg_replace('/:/', '-', strtoupper($ar_buf2[1]))); } elseif (preg_match('/^\s+inet\s+(\S+)\s+netmask/i', $line, $ar_buf2)) $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1]); } } } } if ($was) { $this->sys->setNetDevices($dev); } } } /** * get the information * * @return void */ public function build() { $this->error->addWarning("The QNX version of phpSysInfo is a work in progress, some things currently don't work"); if (!$this->blockname || $this->blockname==='vitals') { $this->_distro(); $this->_hostname(); $this->_kernel(); $this->_uptime(); $this->_users(); } if (!$this->blockname || $this->blockname==='hardware') { $this->_cpuinfo(); } if (!$this->blockname || $this->blockname==='memory') { $this->_memory(); } if (!$this->blockname || $this->blockname==='filesystem') { $this->_filesystems(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } } } phpsysinfo-3.4.4/includes/os/class.SSH.inc.php000066400000000000000000000765151467431054600212250ustar00rootroot00000000000000 * @copyright 2012 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.SSH.inc.php 687 2012-09-06 20:54:49Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * SSH sysinfo class * get all the required information from SSH * * @category PHP * @package PSI SSH class * @author Mieczyslaw Nalewaj * @copyright 2022 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class SSH extends GNU { /** * content of the system status * * @var string */ private $_sysstatus = null; /** * content of the system performance status * * @var string */ private $_sysperformance = null; /** * content of the sys ver systeminfo * * @var string */ private $_sysversysteminfo = null; /** * content of the show status * * @var string */ private $_showstatus = null; /** * OS type * * @var string */ private $_ostype = null; /** * check system type */ public function __construct($blockname = false) { parent::__construct($blockname); $this->_ostype = $this->sys->getOS(); switch ($this->_ostype) { case '4.2BSD': case 'AIX': case 'Darwin': case 'DragonFly': case 'FreeBSD': case 'HI-UX/MPP': case 'Haiku': case 'Minix': case 'NetBSD': case 'OpenBSD': case 'QNX': case 'SunOS': $this->error->addError("__construct()", "OS ".$this->_ostype. " is not supported via SSH"); break; case 'GNU': case 'Linux': break; case 'SSH': $this->error->addError("__construct()", "SSH connection error"); break; default: if ($this->getSystemStatus() !== '') { $this->_ostype = 'FortiOS'; $this->sys->setOS('Linux'); } elseif ($this->getSysVerSysteminfo() !== '') { $this->_ostype = 'DrayOS'; $this->sys->setOS('DrayOS'); } } } /** * get os specific encoding * * @see PSI_Interface_OS::getEncoding() * * @return string */ public function getEncoding() { // if (($this->_ostype === 'FortiOS') || ($this->_ostype === 'DrayOS') || ($this->_ostype === 'SSH')) { // return 'UTF-8'; // } //return null; } /** * get os specific language * * @see PSI_Interface_OS::getLanguage() * * @return string */ public function getLanguage() { //return null; } private function getSystemStatus() { if ($this->_sysstatus === null) { if (CommonFunctions::executeProgram('get', 'system status', $resulte, false) && ($resulte !== "") && preg_match('/^(.*[\$#]\s*)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { $this->_sysstatus = substr($resulte, strlen($resulto[1][0])); } else { $this->_sysstatus = ''; } } return $this->_sysstatus; } private function getSystemPerformance() { if ($this->_sysperformance === null) { if (CommonFunctions::executeProgram('get', 'system performance status', $resulte, false) && ($resulte !== "") && preg_match('/^(.*[\$#]\s*)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { $this->_sysperformance = substr($resulte, strlen($resulto[1][0])); } else { $this->_sysperformance = ''; } } return $this->_sysperformance; } private function getSysVerSysteminfo() { if ($this->_sysversysteminfo === null) { if (CommonFunctions::executeProgram('sys', 'ver systeminfo', $resulte, false, PSI_EXEC_TIMEOUT_INT, '>') && ($resulte !== "") && preg_match('/([\s\S]+> sys ver systeminfo)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { $this->_sysversysteminfo = substr($resulte, strlen($resulto[1][0])); } else { $this->_sysversysteminfo = ''; } } return $this->_sysversysteminfo; } private function getShowStatus() { if ($this->_showstatus === null) { if (CommonFunctions::executeProgram('show', 'status', $resulte, false, PSI_EXEC_TIMEOUT_INT, '>') && ($resulte !== "") && preg_match('/([\s\S]+> show status)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { $this->_showstatus = substr($resulte, strlen($resulto[1][0])); } else { $this->_showstatus = ''; } } return $this->_showstatus; } /** * Physical memory information and Swap Space information * * @return void */ protected function _memory($mbuf = null, $sbuf = null) { switch ($this->_ostype) { case 'FortiOS': if (CommonFunctions::executeProgram('get', 'hardware memory', $resulte, false) && ($resulte !== "") && preg_match('/^(.*[\$#]\s*)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { parent::_memory(substr($resulte, strlen($resulto[1][0]))); } break; case 'DrayOS': if (($sysstat = $this->getSysVerSysteminfo()) !== '') { $machine= ''; if (preg_match("/ Total memory usage : \d+ % \((\d+)K\/(\d+)K\)/", $sysstat, $buf)) { $this->sys->setMemTotal($buf[2]*1024); $this->sys->setMemUsed($buf[1]*1024); $this->sys->setMemFree(($buf[2]-$buf[1])*1024); } } break; case 'GNU': case 'Linux': if (!CommonFunctions::executeProgram('cat', '/proc/meminfo', $mbuf, false) || ($mbuf === "")) { $mbuf = null; } if (!CommonFunctions::executeProgram('cat', '/proc/swaps', $sbuf, false) || ($sbuf === "")) { $sbuf = null; } if (($mbuf !== null) || ($sbuf !== null)) { parent::_memory($mbuf, $sbuf); } } } /** * USB devices * * @return void */ protected function _usb($bufu = null) { switch ($this->_ostype) { case 'FortiOS': $bufr = ''; if (CommonFunctions::executeProgram('fnsysctl', 'cat /proc/bus/usb/devices', $resulte, false) && ($resulte !== "") && preg_match('/^(.*[\$#]\s*)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { $resulti = substr($resulte, strlen($resulto[1][0])); if (preg_match('/(\n.*[\$#])$/', $resulti, $resulto, PREG_OFFSET_CAPTURE)) { $bufr = substr($resulti, 0, $resulto[1][1]); if (count(preg_split('/\n/', $bufr, -1, PREG_SPLIT_NO_EMPTY)) >= 2) { parent::_usb($bufr); } } } break; case 'GNU': case 'Linux': parent::_usb(); } } /** * Network devices * includes also rx/tx bytes * * @return void */ protected function _network($bufr = null) { switch ($this->_ostype) { case 'FortiOS': $bufr = ''; if (CommonFunctions::executeProgram('fnsysctl', 'ifconfig', $resulte, false) && ($resulte !== "") && preg_match('/^(.*[\$#]\s*)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { $resulti = substr($resulte, strlen($resulto[1][0])); if (preg_match('/(\n.*[\$#])$/', $resulti, $resulto, PREG_OFFSET_CAPTURE)) { $bufr = substr($resulti, 0, $resulto[1][1]); if (count(preg_split('/\n/', $bufr, -1, PREG_SPLIT_NO_EMPTY)) < 2) { $bufr = ''; } } } if ($bufr !== '') { parent::_network($bufr); } else { $netdevs = array(); if (CommonFunctions::executeProgram('diagnose', 'ip address list', $resulte, false) && ($resulte !== "") && preg_match('/^(.*[\$#]\s*)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { $strBuf = substr($resulte, strlen($resulto[1][0])); $lines = preg_split('/\n/', $strBuf, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) if (preg_match('/^IP=(\S+)->.+ devname=(\S+)$/', $line, $buf)) { if (!isset($netdevs[$buf[2]])) { $netdevs[$buf[2]] = $buf[1]; } else { $netdevs[$buf[2]] .= ';'.$buf[1]; } } } if (CommonFunctions::executeProgram('diagnose', 'ipv6 address list', $resulte, false) && ($resulte !== "") && preg_match('/^(.*[\$#]\s*)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { $strBuf = substr($resulte, strlen($resulto[1][0])); $lines = preg_split('/\n/', $strBuf, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) if (preg_match('/ devname=(\S+) .+ addr=(\S+)/', $line, $buf)) { if (!preg_match('/^fe80::/i', $buf[2])) { if (!isset($netdevs[$buf[1]])) { $netdevs[$buf[1]] = $buf[2]; } else { $netdevs[$buf[1]] .= ';'.$buf[2]; } } } } foreach ($netdevs as $netname=>$netinfo) { if (!preg_match('/^vsys_/i', $netname)) { $dev = new NetDevice(); // if ($netname === 'root') { // $dev->setName('lo'); // } else { $dev->setName($netname); // } $this->sys->setNetDevices($dev); $dev->setInfo($netinfo); } } } break; case 'DrayOS': $macarray = array(); if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS) && (!defined('PSI_HIDE_NETWORK_MACADDR') || !PSI_HIDE_NETWORK_MACADDR)) { if (CommonFunctions::executeProgram('sys', 'iface', $resulte, false, PSI_EXEC_TIMEOUT_INT, '>') && ($resulte !== "") && preg_match('/([\s\S]+> sys iface)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { $lines = preg_split("/\n/", substr($resulte, strlen($resulto[1][0])), -1, PREG_SPLIT_NO_EMPTY); $ipaddr = 'LAN'; foreach ($lines as $line) { if (preg_match("/^IP Address:\s+([\d\.]+)\s/", trim($line), $ar_buf)) { if ($ipaddr === false) { $ipaddr = $ar_buf[1]; } } elseif (preg_match("/^MAC:\s+([\d\-A-F]+)/", trim($line), $ar_buf)) { if ($ipaddr !== '0.0.0.0') { $macarray[$ipaddr] = $ar_buf[1]; } $ipaddr = false; } } } } $lantxrate = false; $lanrxrate = false; if (defined('PSI_SHOW_NETWORK_ACTIVE_SPEED') && PSI_SHOW_NETWORK_ACTIVE_SPEED) { if ((($bufr = $this->getShowStatus()) !== '') && preg_match('/IP Address:[\d\.]+[ ]+Tx Rate:(\d+)[ ]+Rx Rate:(\d+)/m', $bufr, $ar_buf)) { $lantxrate = $ar_buf[1]; $lanrxrate = $ar_buf[2]; } } $notwaslan = true; if (CommonFunctions::executeProgram('show', 'lan', $resulte, false, PSI_EXEC_TIMEOUT_INT, '>') && ($resulte !== "") && preg_match('/([\s\S]+> show lan)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { $lines = preg_split("/\n/", substr($resulte, strlen($resulto[1][0])), -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { if (preg_match("/^\[V\](\S+)\s+([\d\.]+)\s/", trim($line), $ar_buf)) { $dev = new NetDevice(); $dev->setName($ar_buf[1]); if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS)) { $dev->setInfo($ar_buf[2]); if (isset($macarray['LAN'])) { $dev->setInfo($macarray['LAN'].';'.$ar_buf[2]); } else { $dev->setInfo($ar_buf[2]); } } if ($lantxrate !== false) { $dev->setTxRate($lantxrate); } if ($lanrxrate !== false) { $dev->setRxRate($lanrxrate); } $this->sys->setNetDevices($dev); if (preg_match('/^LAN/', $ar_buf[1])) { $notwaslan = false; } } } } if (($bufr = $this->getShowStatus()) !== '') { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $last = false; $dev = null; foreach ($lines as $line) { if (preg_match("/^(.+) Status/", trim($line), $ar_buf)) { if (($last !== false) && (($last !== 'LAN') || $notwaslan)) { $this->sys->setNetDevices($dev); } $dev = new NetDevice(); $last = preg_replace('/\s+/', '', $ar_buf[1]); $dev->setName($last); } else { if ($last !== false) { if (preg_match('/ IP:([\d\.]+)[ ]+GW/', $line, $ar_buf) || preg_match('/IP Address:([\d\.]+)[ ]+Tx/', $line, $ar_buf)) { if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS)) { if ($last === 'LAN') { if (isset($macarray['LAN'])) { $dev->setInfo($macarray['LAN'].';'.$ar_buf[1]); } if ($lantxrate !== false) { $dev->setTxRate($lantxrate); } if ($lanrxrate !== false) { $dev->setRxRate($lanrxrate); } } elseif (isset($macarray[$ar_buf[1]])) { $dev->setInfo($macarray[$ar_buf[1]].';'.$ar_buf[1]); } else { $dev->setInfo($ar_buf[1]); } } } elseif (preg_match('/TX Packets:\d+[ ]+TX Rate\(bps\):(\d+)[ ]+RX Packets:\d+[ ]+RX Rate\(bps\):(\d+)/', $line, $ar_buf)) { if (defined('PSI_SHOW_NETWORK_ACTIVE_SPEED') && PSI_SHOW_NETWORK_ACTIVE_SPEED) { $dev->setTxRate($ar_buf[1]); $dev->setRxRate($ar_buf[2]); } } } } } if (($last !== false) && (($last !== 'LAN') || $notwaslan)) { $this->sys->setNetDevices($dev); } } break; case 'GNU': case 'Linux': parent::_network(); } } /** * CPU information * All of the tags here are highly architecture dependant. * * @return void */ protected function _cpuinfo($bufr = null) { switch ($this->_ostype) { case 'FortiOS': if (CommonFunctions::executeProgram('get', 'hardware cpu', $resulte, false) && ($resulte !== "") && preg_match('/^(.*[\$#]\s*)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { parent::_cpuinfo(substr($resulte, strlen($resulto[1][0]))); } break; case 'DrayOS': if (preg_match_all("/CPU(\d+) speed:[ ]*(\d+) MHz/m", $sysinfo = $this->getSysVerSysteminfo(), $bufarr)) { foreach ($bufarr[1] as $index=>$nr) { $dev = new CpuDevice(); $dev->setModel('CPU'.$nr); $dev->setCpuSpeed($bufarr[2][$index]); if (PSI_LOAD_BAR) { $dev->setLoad($this->_parseProcStat('cpu'.$nr)); } $this->sys->setCpus($dev); } // $this->_cpu_loads['cpu'] = $buf[1]; // if (preg_match("/CPU1 speed/", $sysinfo)) { // $this->_cpu_loads['cpu0'] = $buf[1]; // } } break; case 'GNU': case 'Linux': if (CommonFunctions::executeProgram('cat', '/proc/cpuinfo', $resulte, false) && ($resulte !== "")) { parent::_cpuinfo($resulte); } } } /** * Machine * * @return void */ protected function _machine() { switch ($this->_ostype) { case 'FortiOS': if (($sysstat = $this->getSystemStatus()) !== '') { $machine= ''; if (preg_match("/^Version: (\S+) v/", $sysstat, $buf)) { $machine = $buf[1]; } if (preg_match("/\nSystem Part-Number: (\S+)\n/", $sysstat, $buf)) { $machine .= ' '.$buf[1]; } if (preg_match("/\nBIOS version: (\S+)\n/", $sysstat, $buf)) { if (trim($machine) !== '') { $machine .= ', BIOS '.$buf[1]; } else { $machine = 'BIOS '.$buf[1]; } } $machine = trim($machine); if ($machine !== '') { $this->sys->setMachine($machine); } } break; case 'DrayOS': if (($sysstat = $this->getSysVerSysteminfo()) !== '') { $machine= ''; if (preg_match("/[\r\n]Router Model: (\S+) /", $sysstat, $buf)) { $machine = $buf[1]; } if (preg_match("/[\r\n]Revision: (.+)[\r\n]/", $sysstat, $buf)) { $machine .= ' '.$buf[1]; } $machine = trim($machine); if ($machine !== '') { $this->sys->setMachine($machine); } } break; case 'GNU': case 'Linux': parent::_machine(); } } /** * Hostname * * @return void */ protected function _hostname() { switch ($this->_ostype) { case 'FortiOS': // $hostname = PSI_EMU_HOSTNAME; if (preg_match("/\nHostname: ([^\n]+)\n/", $this->getSystemStatus(), $buf)) { $this->sys->setHostname(trim($buf[1])); // $hostname = trim($buf[1]); } // $ip = gethostbyname($hostname); // if ($ip != $hostname) { // $this->sys->setHostname(gethostbyaddr($ip)); // } else { // $this->sys->setHostname($hostname); // } break; case 'DrayOS': if (preg_match("/[\r\n]Router Name: ([^\n\r]+)[\r\n]/", $this->getSysVerSysteminfo(), $buf)) { $this->sys->setHostname(trim($buf[1])); } break; case 'GNU': case 'Linux': parent::_hostname(); } } /** * filesystem information * * @return void */ protected function _filesystems() { switch ($this->_ostype) { case 'FortiOS': if (CommonFunctions::executeProgram('fnsysctl', 'df -k', $resulte, false) && ($resulte !== "") && preg_match('/^(.*[\$#]\s*)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { $resulti = substr($resulte, $resulto[1][1]); $df = preg_split("/\n/", $resulti, -1, PREG_SPLIT_NO_EMPTY); foreach ($df as $df_line) { $df_buf1 = preg_split("/(\%\s)/", $df_line, 3); if (count($df_buf1) != 2) { continue; } if (preg_match("/(.*)(\s+)(([0-9]+)(\s+)([0-9]+)(\s+)([\-0-9]+)(\s+)([0-9]+)$)/", $df_buf1[0], $df_buf2)) { $df_buf = array($df_buf2[1], $df_buf2[4], $df_buf2[6], $df_buf2[8], $df_buf2[10], $df_buf1[1]); if (count($df_buf) == 6) { $df_buf[5] = trim($df_buf[5]); $dev = new DiskDevice(); $dev->setName(trim($df_buf[0])); if ($df_buf[2] < 0) { $dev->setTotal($df_buf[3] * 1024); $dev->setUsed($df_buf[3] * 1024); } else { $dev->setTotal($df_buf[1] * 1024); $dev->setUsed($df_buf[2] * 1024); if ($df_buf[3]>0) { $dev->setFree($df_buf[3] * 1024); } } if (PSI_SHOW_MOUNT_POINT) $dev->setMountPoint($df_buf[5]); $dev->setFsType('unknown'); $this->sys->setDiskDevices($dev); } } } } break; case 'DrayOS': if (CommonFunctions::executeProgram('nand', 'usage', $resulte, false, PSI_EXEC_TIMEOUT_INT, '>') && ($resulte !== "") && preg_match('/([\s\S]+> nand usage)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { $df = substr($resulte, strlen($resulto[1][0])); if (preg_match('/Usecfg/', $df)) { // fix for Vigor2135ac v4.4.2 $df = preg_replace("/(cfg|bin)/", "\n$1", substr($resulte, strlen($resulto[1][0]))); $percent = ''; } else { $percent = '%'; } $df = preg_split("/\n/", $df, -1, PREG_SPLIT_NO_EMPTY); foreach ($df as $df_line) { if (preg_match("/^(\S+)[ ]+(\d+)[ ]+(\d+)[ ]+(\d+)[ ]+(\d+)".$percent."/", trim($df_line), $df_buf)) { $dev = new DiskDevice(); $dev->setName($df_buf[1]); $dev->setTotal($df_buf[2]); $dev->setUsed($df_buf[3]); $dev->setFree($df_buf[4]); $dev->setFsType('NAND'); $this->sys->setDiskDevices($dev); } } } break; case 'GNU': case 'Linux': parent::_filesystems(); } } /** * Distribution * * @return void */ protected function _distro() { switch ($this->_ostype) { case 'SSH': $this->sys->setOS('Unknown'); $this->sys->setDistributionIcon('Unknown.png'); break; case 'FortiOS': if (preg_match("/^Version: \S+ (v[^\n]+)\n/", $this->getSystemStatus(), $buf)) { $this->sys->setDistribution('FortiOS '.trim($buf[1])); } $this->sys->setDistributionIcon('FortiOS.png'); break; case 'DrayOS': if (preg_match("/ Version: ([^\n]+)\n/", $this->getSysVerSysteminfo(), $buf)) { $this->sys->setDistribution('DrayOS '.trim($buf[1])); } $this->sys->setDistributionIcon('DrayOS.png'); break; case 'GNU': case 'Linux': parent::_distro(); } // if ($this->_ostype !== null) { // $this->sys->setDistributionIcon($this->_ostype); // } } /** * fill the load for a individual cpu, through parsing /proc/stat for the specified cpu * * @param String $cpuline cpu for which load should be meassured * * @return int */ protected function _parseProcStat($cpuline) { if ($this->_cpu_loads === null) { $this->_cpu_loads = array(); switch ($this->_ostype) { case 'FortiOS': if (($strBuf = $this->getSystemPerformance()) !== '') { $lines = preg_split('/\n/', $strBuf, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) if (preg_match('/^CPU(\d*) states: \d+% user \d+% system \d+% nice (\d+)% idle /', $line, $buf)) { $this->_cpu_loads['cpu'.$buf[1]] = 100-$buf[2]; } } break; case 'DrayOS': if (preg_match("/CPU usage :[ ]*(\d+) %/", $sysinfo = $this->getSysVerSysteminfo(), $buf)) { $this->_cpu_loads['cpu'] = $buf[1]; if (preg_match("/CPU1 speed/", $sysinfo) && !preg_match("/CPU2 speed/", $sysinfo)) { //only one cpu $this->_cpu_loads['cpu1'] = $buf[1]; } } } } if (isset($this->_cpu_loads[$cpuline])) { return $this->_cpu_loads[$cpuline]; } else { return null; } } /** * Processor Load * optionally create a loadbar * * @return void */ protected function _loadavg($bufr = null) { switch ($this->_ostype) { case 'FortiOS': if (CommonFunctions::executeProgram('fnsysctl', 'cat /proc/loadavg', $resulte, false) && ($resulte !== "") && preg_match('/^(.*[\$#]\s*)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { parent::_loadavg(substr($resulte, strlen($resulto[1][0]))); } break; case 'DrayOS': if (PSI_LOAD_BAR) { $this->sys->setLoadPercent($this->_parseProcStat('cpu')); } break; case 'GNU': case 'Linux': parent::_loadavg(); } } /** * UpTime * time the system is running * * @return void */ protected function _uptime($bufu = null) { switch ($this->_ostype) { case 'FortiOS': if (preg_match("/\nUptime: ([^\n]+)\n/", $this->getSystemPerformance(), $buf)) { parent::_uptime('up '.trim($buf[1])); } break; case 'DrayOS': if (preg_match("/System Uptime:([\d:]+)/", $this->getShowStatus(), $buf)) { parent::_uptime('up '.trim($buf[1])); } break; case 'GNU': case 'Linux': if (CommonFunctions::executeProgram('cat', '/proc/uptime', $resulte, false) && ($resulte !== "")) { $ar_buf = preg_split('/ /', $resulte); $this->sys->setUptime(trim($ar_buf[0])); } else { parent::_uptime(); } } } /** * Kernel Version * * @return void */ protected function _kernel() { switch ($this->_ostype) { case 'FortiOS': if (CommonFunctions::executeProgram('fnsysctl', 'cat /proc/version', $resulte, false) && ($resulte !== "") && preg_match('/^(.*[\$#]\s*)/', $resulte, $resulto, PREG_OFFSET_CAPTURE)) { $strBuf = substr($resulte, $resulto[1][1]); if (preg_match('/version\s+(\S+)/', $strBuf, $ar_buf)) { $verBuf = $ar_buf[1]; if (preg_match('/ SMP /', $strBuf)) { $verBuf .= ' (SMP)'; } $this->sys->setKernel($verBuf); } } break; case 'GNU': case 'Linux': parent::_kernel(); } } /** * get the information * * @return void */ public function build() { $this->error->addWarning("The SSH version of phpSysInfo is a work in progress, some things currently don't work"); switch ($this->_ostype) { case 'SSH': $this->_distro(); break; case 'FortiOS': if (!$this->blockname || $this->blockname==='vitals') { $this->_distro(); $this->_hostname(); $this->_kernel(); $this->_uptime(); // $this->_users(); $this->_loadavg(); // $this->_processes(); } if (!$this->blockname || $this->blockname==='hardware') { $this->_machine(); $this->_cpuinfo(); //$this->_virtualizer(); // $this->_pci(); $this->_usb(); // $this->_i2c(); } if (!$this->blockname || $this->blockname==='memory') { $this->_memory(); } if (!$this->blockname || $this->blockname==='filesystem') { $this->_filesystems(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } break; case 'DrayOS': if (!$this->blockname || $this->blockname==='vitals') { $this->_distro(); $this->_hostname(); // $this->_kernel(); $this->_uptime(); //// $this->_users(); $this->_loadavg(); //// $this->_processes(); } if (!$this->blockname || $this->blockname==='hardware') { $this->_machine(); $this->_cpuinfo(); // //$this->_virtualizer(); //// $this->_pci(); // $this->_usb(); //// $this->_i2c(); } if (!$this->blockname || $this->blockname==='memory') { $this->_memory(); } if (!$this->blockname || $this->blockname==='filesystem') { $this->_filesystems(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } break; case 'GNU': case 'Linux': parent::build(); } } } phpsysinfo-3.4.4/includes/os/class.SunOS.inc.php000066400000000000000000000500731467431054600215660ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.SunOS.inc.php 687 2012-09-06 20:54:49Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * SunOS sysinfo class * get all the required information from SunOS systems * * @category PHP * @package PSI SunOS OS class * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class SunOS extends OS { /** * content of prtconf -v * * @var array */ private $_prtconf = null; /** * Execute prtconf -v and save ass array * * @return array */ protected function prtconf() { if ($this->_prtconf === null) { $this->_prtconf = array(); if (CommonFunctions::executeProgram('prtconf', '-v', $buf, PSI_DEBUG) && ($buf!="")) { $blocks = preg_split('/\n(?= \S)/', $buf, -1, PREG_SPLIT_NO_EMPTY); if (!empty($blocks) && (count($blocks)>2)) { array_shift($blocks); foreach ($blocks as $block) { if (preg_match('/^ (\S+) /', $block, $ar_buf)) { $group = trim($ar_buf[1], ','); $grouparr = array(); $blocks1 = preg_split('/\n(?= \S)/', $block, -1, PREG_SPLIT_NO_EMPTY); if (!empty($blocks1) && count($blocks1)) { array_shift($blocks1); foreach ($blocks1 as $block1) { if (!preg_match('/^ name=\'([^\']+)\'/', $block1) && preg_match('/^ (\S+) /', $block1, $ar_buf)) { $device = trim($ar_buf[1], ','); $devicearr = array(); $blocks2 = preg_split('/\n(?= \S)/', $block1, -1, PREG_SPLIT_NO_EMPTY); if (!empty($blocks2) && count($blocks2)) { array_shift($blocks2); foreach ($blocks2 as $block2) { if (!preg_match('/^ name=\'([^\']+)\'/', $block2) && preg_match('/^ (\S+) /', $block2, $ar_buf)) { $subdev = trim($ar_buf[1], ','); $subdevarr = array(); $blocks3 = preg_split('/\n(?= \S)/', $block2, -1, PREG_SPLIT_NO_EMPTY); if (!empty($blocks3) && count($blocks3)) { array_shift($blocks3); foreach ($blocks3 as $block3) { if (preg_match('/^ name=\'([^\']+)\' [\s\S]+ value=\'?([^\']+)\'?/m', $block3, $ar_buf)) { if ($subdev==='Hardware') { $subdevarr[$ar_buf[1]] = $ar_buf[2]; $subdevarr['device'] = $device; } } } if (count($subdevarr)) { $devicearr = $subdevarr; } } } } } if (count($devicearr)) { $grouparr[$device][] = $devicearr; } } } } if (count($grouparr)) { $this->_prtconf[$group][] = $grouparr; } } } } } } return $this->_prtconf; } /** * Extract kernel values via kstat() interface * * @param string $key key for kstat programm * * @return string */ private function _kstat($key) { if (CommonFunctions::executeProgram('kstat', '-p d '.$key, $m, PSI_DEBUG) && ($m!=="")) { list($key, $value) = preg_split("/\t/", $m, 2); return trim($value); } else { return ''; } } /** * Virtual Host Name * * @return void */ private function _hostname() { if (PSI_USE_VHOST) { if (CommonFunctions::readenv('SERVER_NAME', $hnm)) $this->sys->setHostname($hnm); } else { if (CommonFunctions::executeProgram('uname', '-n', $result, PSI_DEBUG)) { $ip = gethostbyname($result); if ($ip != $result) { $this->sys->setHostname(gethostbyaddr($ip)); } } } } /** * Kernel Version * * @return void */ private function _kernel() { if (CommonFunctions::executeProgram('uname', '-s', $kernel, PSI_DEBUG) && ($kernel != "")) { if (CommonFunctions::executeProgram('uname', '-r', $version, PSI_DEBUG) && ($version != "")) { $kernel.=' '.$version; } if (CommonFunctions::executeProgram('uname', '-v', $subversion, PSI_DEBUG) && ($subversion != "")) { $kernel.=' ('.$subversion.')'; } if (CommonFunctions::executeProgram('uname', '-i', $platform, PSI_DEBUG) && ($platform != "")) { $kernel.=' '.$platform; } $this->sys->setKernel($kernel); } } /** * UpTime * time the system is running * * @return void */ private function _uptime() { $this->sys->setUptime(time() - $this->_kstat('unix:0:system_misc:boot_time')); } /** * Processor Load * optionally create a loadbar * * @return void */ private function _loadavg() { $load1 = $this->_kstat('unix:0:system_misc:avenrun_1min'); $load5 = $this->_kstat('unix:0:system_misc:avenrun_5min'); $load15 = $this->_kstat('unix:0:system_misc:avenrun_15min'); $this->sys->setLoad(round($load1 / 256, 2).' '.round($load5 / 256, 2).' '.round($load15 / 256, 2)); } /** * CPU information * * @return void */ private function _cpuinfo() { if (CommonFunctions::executeProgram('kstat', '-p d cpu_info:*:cpu_info*:core_id', $m, PSI_DEBUG) && ($m!=="")) { $cpuc = count(preg_split('/\n/', $m, -1, PREG_SPLIT_NO_EMPTY)); for ($cpu=0; $cpu < $cpuc; $cpu++) { $dev = new CpuDevice(); if (($buf = $this->_kstat('cpu_info:'.$cpu.':cpu_info'.$cpu.':current_clock_Hz')) !== "") { $dev->setCpuSpeed($buf/1000000); } elseif (($buf = $this->_kstat('cpu_info:'.$cpu.':cpu_info'.$cpu.':clock_MHz')) !== "") { $dev->setCpuSpeed($buf); } if (($buf = $this->_kstat('cpu_info:'.$cpu.':cpu_info'.$cpu.':supported_frequencies_Hz')) !== "") { $cpuarr = preg_split('/:/', $buf, -1, PREG_SPLIT_NO_EMPTY); if (($cpuarrc=count($cpuarr))>1) { $dev->setCpuSpeedMin($cpuarr[0]/1000000); $dev->setCpuSpeedMax($cpuarr[$cpuarrc-1]/1000000); } } if (($buf =$this->_kstat('cpu_info:'.$cpu.':cpu_info'.$cpu.':brand')) !== "") { $dev->setModel($buf); } elseif (($buf =$this->_kstat('cpu_info:'.$cpu.':cpu_info'.$cpu.':cpu_type')) !== "") { $dev->setModel($buf); } elseif (CommonFunctions::executeProgram('uname', '-p', $buf, PSI_DEBUG) && ($buf!="")) { $dev->setModel($buf); } elseif (CommonFunctions::executeProgram('uname', '-i', $buf, PSI_DEBUG) && ($buf!="")) { $dev->setModel($buf); } $this->sys->setCpus($dev); } } } /** * PCI devices * * @return void */ protected function _pci() { $prtconf = $this->prtconf(); if ((count($prtconf)>1) && isset($prtconf['pci'])) { foreach ($prtconf['pci'] as $prt) { foreach ($prt as $pci) { foreach ($pci as $pcidev) { if (isset($pcidev['device'])) { $dev = new HWDevice(); if (isset($pcidev['model'])) { $name = $pcidev['model']; } else { $name = $pcidev['device']; } if (isset($pcidev['device-name'])) { $name .= ': '.$pcidev['device-name']; } $dev->setName($name); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if (isset($pcidev['subsystem-name']) && ($pcidev['subsystem-name']!=='unknown subsystem')) { $dev->setProduct($pcidev['subsystem-name']); } if (isset($pcidev['vendor-name'])) { $dev->setManufacturer($pcidev['vendor-name']); } } $this->sys->setPciDevices($dev); } } } } } } /** * Network devices * * @return void */ private function _network() { if (CommonFunctions::executeProgram('netstat', '-ni | awk \'(NF ==10){print;}\'', $netstat, PSI_DEBUG)) { $lines = preg_split("/\n/", $netstat, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { $ar_buf = preg_split("/\s+/", $line); if (!empty($ar_buf[0]) && $ar_buf[0] !== 'Name') { $dev = new NetDevice(); $dev->setName($ar_buf[0]); $results[$ar_buf[0]]['errs'] = $ar_buf[5] + $ar_buf[7]; if (preg_match('/^(\D+)(\d+)$/', $ar_buf[0], $intf)) { $prefix = $intf[1].':'.$intf[2].':'.$intf[1].$intf[2].':'; } elseif (preg_match('/^(\D.*)(\d+)$/', $ar_buf[0], $intf)) { $prefix = $intf[1].':'.$intf[2].':mac:'; } else { $prefix = ""; } if ($prefix !== "") { $cnt = $this->_kstat($prefix.'drop'); if ($cnt > 0) { $dev->setDrops($cnt); } $cnt = $this->_kstat($prefix.'obytes64'); if ($cnt > 0) { $dev->setTxBytes($cnt); } $cnt = $this->_kstat($prefix.'rbytes64'); if ($cnt > 0) { $dev->setRxBytes($cnt); } } if (defined('PSI_SHOW_NETWORK_INFOS') && (PSI_SHOW_NETWORK_INFOS)) { if (CommonFunctions::executeProgram('ifconfig', $ar_buf[0], $bufr2, PSI_DEBUG) && ($bufr2!=="")) { $bufe2 = preg_split("/\n/", $bufr2, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe2 as $buf2) { if (preg_match('/^\s+ether\s+(\S+)/i', $buf2, $ar_buf2)) { if (!defined('PSI_HIDE_NETWORK_MACADDR') || !PSI_HIDE_NETWORK_MACADDR) $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').preg_replace('/:/', '-', strtoupper($ar_buf2[1]))); } elseif (preg_match('/^\s+inet\s+(\S+)\s+netmask/i', $buf2, $ar_buf2)) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').$ar_buf2[1]); } } } if (CommonFunctions::executeProgram('ifconfig', $ar_buf[0].' inet6', $bufr2, PSI_DEBUG) && ($bufr2!=="")) { $bufe2 = preg_split("/\n/", $bufr2, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe2 as $buf2) { if (preg_match('/^\s+inet6\s+([^\s\/]+)/i', $buf2, $ar_buf2) && ($ar_buf2[1]!="::") && !preg_match('/^fe80::/i', $ar_buf2[1])) $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').strtolower($ar_buf2[1])); } } } $this->sys->setNetDevices($dev); } } } } /** * Physical memory information and Swap Space information * * @return void */ private function _memory() { $pagesize = $this->_kstat('unix:0:seg_cache:slab_size'); $this->sys->setMemTotal($this->_kstat('unix:0:system_pages:pagestotal') * $pagesize); $this->sys->setMemUsed($this->_kstat('unix:0:system_pages:pageslocked') * $pagesize); $this->sys->setMemFree($this->_kstat('unix:0:system_pages:pagesfree') * $pagesize); if (($swap=$this->_kstat('unix:0:vminfo:swap_avail')) > 0) { $dev = new DiskDevice(); $dev->setName('SWAP'); $dev->setFsType('swap'); $dev->setMountPoint('SWAP'); $dev->setTotal($swap / 1024); $dev->setUsed($this->_kstat('unix:0:vminfo:swap_alloc') / 1024); $dev->setFree($this->_kstat('unix:0:vminfo:swap_free') / 1024); $this->sys->setSwapDevices($dev); } } /** * filesystem information * * @return void */ private function _filesystems() { if (CommonFunctions::executeProgram('df', '-k', $df, PSI_DEBUG)) { $df = preg_replace('/\n\s/m', ' ', $df); $mounts = preg_split("/\n/", $df, -1, PREG_SPLIT_NO_EMPTY); foreach ($mounts as $mount) { $ar_buf = preg_split('/\s+/', $mount, 6); if (!empty($ar_buf[0]) && $ar_buf[0] !== 'Filesystem') { $dev = new DiskDevice(); $dev->setName($ar_buf[0]); $dev->setTotal($ar_buf[1] * 1024); $dev->setUsed($ar_buf[2] * 1024); $dev->setFree($ar_buf[3] * 1024); $dev->setMountPoint($ar_buf[5]); if (CommonFunctions::executeProgram('df', '-n', $dftypes, PSI_DEBUG)) { $mounttypes = preg_split("/\n/", $dftypes, -1, PREG_SPLIT_NO_EMPTY); foreach ($mounttypes as $type) { $ty_buf = preg_split('/:/', $type, 2); if (trim($ty_buf[0]) == $dev->getMountPoint()) { $dev->setFsType($ty_buf[1]); break; } } } elseif (CommonFunctions::executeProgram('df', '-T', $dftypes, PSI_DEBUG)) { $dftypes = preg_replace('/\n\s/m', ' ', $dftypes); $mounttypes = preg_split("/\n/", $dftypes, -1, PREG_SPLIT_NO_EMPTY); foreach ($mounttypes as $type) { $ty_buf = preg_split("/\s+/", $type, 3); if ($ty_buf[0] == $dev->getName()) { $dev->setFsType($ty_buf[1]); break; } } } $this->sys->setDiskDevices($dev); } } } } /** * Distribution Icon * * @return void */ private function _distro() { if (CommonFunctions::rfts('/etc/release', $buf, 1, 4096, false) && (trim($buf)!="")) { $this->sys->setDistribution(trim($buf)); $list = @parse_ini_file(PSI_APP_ROOT."/data/distros.ini", true); if ($list && preg_match('/^(\S+)\s*/', preg_replace('/^open\s+/', 'open', preg_replace('/^oracle\s+/', 'oracle', strtolower(trim($buf)))), $id_buf) && isset($list[$distid=(trim($id_buf[1].' sunos'))]['Image'])) { $this->sys->setDistributionIcon($list[$distid]['Image']); if (isset($list[trim($distid)]['Name'])) { $this->sys->setDistribution(trim($list[$distid]['Name']).' '.$this->sys->getDistribution()); } } else { $this->sys->setDistributionIcon('SunOS.png'); } } else { $this->sys->setDistribution('SunOS'); $this->sys->setDistributionIcon('SunOS.png'); } } /** * Processes * * @return void */ protected function _processes() { if (CommonFunctions::executeProgram('ps', 'aux', $bufr, PSI_DEBUG)) { $lines = preg_split("/\n/", $bufr, -1, PREG_SPLIT_NO_EMPTY); $processes['*'] = 0; foreach ($lines as $line) { if (preg_match("/^\S+\s+\d+\s+\S+\s+\S+\s+\d+\s+\d+\s+\S+\s+(\w)/", $line, $ar_buf)) { $processes['*']++; $state = $ar_buf[1]; if ($state == 'O') $state = 'R'; //linux format elseif ($state == 'W') $state = 'D'; elseif ($state == 'D') $state = 'd'; //invalid if (isset($processes[$state])) { $processes[$state]++; } else { $processes[$state] = 1; } } } if ($processes['*'] > 0) { $this->sys->setProcesses($processes); } } } /** * get the information * * @see PSI_Interface_OS::build() * * @return void */ public function build() { $this->error->addWarning("The SunOS version of phpSysInfo is a work in progress, some things currently don't work"); if (!$this->blockname || $this->blockname==='vitals') { $this->_distro(); $this->_hostname(); $this->_kernel(); $this->_uptime(); $this->_users(); $this->_loadavg(); $this->_processes(); } if (!$this->blockname || $this->blockname==='hardware') { $this->_cpuinfo(); $this->_pci(); } if (!$this->blockname || $this->blockname==='memory') { $this->_memory(); } if (!$this->blockname || $this->blockname==='filesystem') { $this->_filesystems(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } } } phpsysinfo-3.4.4/includes/os/class.WINNT.inc.php000066400000000000000000002660351467431054600214650ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.WINNT.inc.php 699 2012-09-15 11:57:13Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * WINNT sysinfo class * get all the required information from WINNT systems * information are retrieved through the WMI interface * * @category PHP * @package PSI WINNT OS class * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class WINNT extends OS { /** * holds codepage for chcp * * @var int */ private static $_cp = null; /** * holds the data from WMI Win32_OperatingSystem * * @var array */ private static $_Win32_OperatingSystem = null; /** * holds the data from WMI Win32_ComputerSystem * * @var array */ private $_Win32_ComputerSystem = null; /** * holds the data from WMI Win32_Processor * * @var array */ private static $_Win32_Processor = null; /** * holds the data from WMI Win32_PhysicalMemory * * @var array */ private static $_Win32_PhysicalMemory = null; /** * holds the data from WMI Win32_PerfFormattedData_PerfOS_Processor * * @var array */ private $_Win32_PerfFormattedData_PerfOS_Processor = null; /** * holds the data from systeminfo command * * @var string */ private $_systeminfo = null; /** * holds the COM object that we pull WMI root\CIMv2 data from * * @var Object */ private static $_wmi = null; /** * holds the COM object that we pull all the EnumKey and RegRead data from * * @var Object */ private $_reg = null; /** * holds result of 'cmd /c ver' * * @var string */ private $_ver = ""; /** * holds system manufacturer * * @var string */ private $_Manufacturer = ""; /** * holds system model * * @var string */ private $_Model = ""; /** * holds all devices, which are in the system * * @var array */ private $_wmidevices = null; /** * holds all disks, which are in the system * * @var array */ private $_wmidisks = array(); /** * store language encoding of the system to convert some output to utf-8 * * @var string */ private $_codepage = null; /** * store language of the system * * @var string */ private $_syslang = null; /** * value of checking run as administrator * * @var boolean */ private static $_asadmin = null; /** * returns codepage for chcp * * @return int */ public static function getcp() { return self::$_cp; } /** * returns the COM object that we pull WMI root\CIMv2 data from * * @return Object */ public static function getcimv2wmi() { return self::$_wmi; } /** * reads the data from WMI Win32_OperatingSystem * * @return array */ public static function _get_Win32_OperatingSystem() { if (self::$_Win32_OperatingSystem === null) self::$_Win32_OperatingSystem = self::getWMI(self::$_wmi, 'Win32_OperatingSystem', array('CodeSet', 'Locale', 'LastBootUpTime', 'LocalDateTime', 'Version', 'ServicePackMajorVersion', 'Caption', 'TotalVisibleMemorySize', 'FreePhysicalMemory')); return self::$_Win32_OperatingSystem; } /** * reads the data from WMI Win32_ComputerSystem * * @return array */ private function _get_Win32_ComputerSystem() { if ($this->_Win32_ComputerSystem === null) $this->_Win32_ComputerSystem = self::getWMI(self::$_wmi, 'Win32_ComputerSystem', array('Name', 'Manufacturer', 'Model', 'SystemFamily')); return $this->_Win32_ComputerSystem; } /** * reads the data from WMI Win32_Processor * * @return array */ public static function _get_Win32_Processor() { if (self::$_Win32_Processor === null) self::$_Win32_Processor = self::getWMI(self::$_wmi, 'Win32_Processor', array('DeviceID', 'LoadPercentage', 'AddressWidth', 'Name', 'L2CacheSize', 'L3CacheSize', 'CurrentClockSpeed', 'ExtClock', 'NumberOfCores', 'NumberOfLogicalProcessors', 'MaxClockSpeed', 'Manufacturer', 'Architecture', 'Caption', 'CurrentVoltage')); return self::$_Win32_Processor; } /** * reads the data from WMI Win32_PhysicalMemory * * @return array */ public static function _get_Win32_PhysicalMemory() { if (self::$_Win32_PhysicalMemory === null) self::$_Win32_PhysicalMemory = self::getWMI(self::$_wmi, 'Win32_PhysicalMemory', array('PartNumber', 'DeviceLocator', 'Capacity', 'Manufacturer', 'SerialNumber', 'Speed', 'ConfiguredClockSpeed', 'ConfiguredVoltage', 'MemoryType', 'SMBIOSMemoryType', 'FormFactor', 'DataWidth', 'TotalWidth', 'BankLabel', 'MinVoltage', 'MaxVoltage')); return self::$_Win32_PhysicalMemory; } /** * reads the data from WMI Win32_PerfFormattedData_PerfOS_Processor * * @return array */ private function _get_Win32_PerfFormattedData_PerfOS_Processor() { if ($this->_Win32_PerfFormattedData_PerfOS_Processor === null) { $this->_Win32_PerfFormattedData_PerfOS_Processor = array(); $buffer = $this->_get_Win32_OperatingSystem(); if ($buffer && isset($buffer[0]) && isset($buffer[0]['Version']) && version_compare($buffer[0]['Version'], "5.1", ">=")) { // minimal windows 2003 or windows XP $cpubuffer = self::getWMI(self::$_wmi, 'Win32_PerfFormattedData_PerfOS_Processor', array('Name', 'PercentProcessorTime')); foreach ($cpubuffer as $cpu) { if (isset($cpu['Name']) && isset($cpu['PercentProcessorTime'])) { $this->_Win32_PerfFormattedData_PerfOS_Processor['cpu'.$cpu['Name']] = $cpu['PercentProcessorTime']; } } } } return $this->_Win32_PerfFormattedData_PerfOS_Processor; } /** * reads the data from systeminfo * * @return string */ private function _get_systeminfo() { if (!defined('PSI_EMU_HOSTNAME')) { if ($this->_systeminfo === null) CommonFunctions::executeProgram('systeminfo', '', $this->_systeminfo, false); return $this->_systeminfo; } else { return ''; } } /** * checks WINNT and 'run as Administrator' mode * * @return boolean */ public static function isAdmin() { if (self::$_asadmin == null) { if (PSI_OS == 'WINNT') { $strBuf = ''; CommonFunctions::executeProgram('sfc', '2>&1', $strBuf, false); // 'net session' for detection does not work if "Server" (LanmanServer) service is stopped if (preg_match('/^\/SCANNOW\s/m', preg_replace('/(\x00)/', '', $strBuf))) { // SCANNOW checking - also if Unicode self::$_asadmin = true; } else { self::$_asadmin = false; } } else { self::$_asadmin = false; } } return self::$_asadmin; } /** * function for getting a list of values in the specified context * optionally filter this list, based on the list from third parameter * * @param $wmi object holds the COM object that we pull the WMI data from * @param string $strClass name of the class where the values are stored * @param array $strValue filter out only needed values, if not set all values of the class are returned * * @return array content of the class stored in an array */ public static function getWMI($wmi, $strClass, $strValue = array()) { $arrData = array(); if (gettype($wmi) === "object") { $value = ""; try { $objWEBM = $wmi->Get($strClass); $arrProp = $objWEBM->Properties_; $arrWEBMCol = $objWEBM->Instances_(); foreach ($arrWEBMCol as $objItem) { if (is_array($arrProp)) { reset($arrProp); } $arrInstance = array(); foreach ($arrProp as $propItem) { $value = $objItem->{$propItem->Name}; //instead exploitable eval("\$value = \$objItem->".$propItem->Name.";"); if (empty($strValue)) { if (is_string($value)) $arrInstance[$propItem->Name] = trim($value); else $arrInstance[$propItem->Name] = $value; } else { if (in_array($propItem->Name, $strValue)) { if (is_string($value)) $arrInstance[$propItem->Name] = trim($value); else $arrInstance[$propItem->Name] = $value; } } } $arrData[] = $arrInstance; } } catch (Exception $e) { if (PSI_DEBUG && (($message = trim($e->getMessage())) !== "Source: SWbemServicesEx
Description: Not found")) { $error = PSI_Error::singleton(); $error->addError("getWMI()", preg_replace('//', "\n", preg_replace('/|<\/b>/', '', $message))); } } } elseif ((gettype($wmi) === "string") && (PSI_OS == 'Linux')) { $delimeter = '@@@DELIM@@@'; if (CommonFunctions::executeProgram('wmic', '--delimiter="'.$delimeter.'" '.$wmi.' '.$strClass.'" 2>/dev/null', $strBuf, true) && preg_match("/^CLASS:\s/", $strBuf)) { if (self::$_cp) { if (self::$_cp == 932) { $codename = ' (SJIS)'; } elseif (self::$_cp == 949) { $codename = ' (EUC-KR)'; } elseif (self::$_cp == 950) { $codename = ' (BIG-5)'; } else { $codename = ''; } self::convertCP($strBuf, 'windows-'.self::$_cp.$codename); } $lines = preg_split('/\n/', $strBuf, -1, PREG_SPLIT_NO_EMPTY); if (count($lines) >=3) { unset($lines[0]); $names = preg_split('/'.$delimeter.'/', $lines[1], -1, PREG_SPLIT_NO_EMPTY); $namesc = count($names); unset($lines[1]); foreach ($lines as $line) { $arrInstance = array(); $values = preg_split('/'.$delimeter.'/', $line, -1); if (count($values) == $namesc) { foreach ($values as $id=>$value) { if (empty($strValue)) { if ($value !== "(null)") $arrInstance[$names[$id]] = trim($value); else $arrInstance[$names[$id]] = null; } else { if (in_array($names[$id], $strValue)) { if ($value !== "(null)") $arrInstance[$names[$id]] = trim($value); else $arrInstance[$names[$id]] = null; } } } $arrData[] = $arrInstance; } } } } } return $arrData; } /** * readReg function * * @return boolean command successfull or not */ public static function readReg($reg, $strName, &$strBuffer, $booErrorRep = true, $dword = false, $bits64 = false) { $strBuffer = ''; if ($reg === false) { if (defined('PSI_EMU_HOSTNAME')) { return false; } $last = strrpos($strName, "\\"); $keyname = substr($strName, $last + 1); if ($bits64) { $param = ' /reg:64'; } else { $param = ''; } if ($dword) { $valtype = "DWORD"; } else { $valtype = "SZ|EXPAND_SZ"; } if (self::$_cp) { if (CommonFunctions::executeProgram('cmd', '/c chcp '.self::$_cp.' >nul & reg query "'.substr($strName, 0, $last).'" /v '.$keyname.$param.' 2>&1', $strBuf, $booErrorRep) && (strlen($strBuf) > 0) && preg_match("/^\s*".$keyname."\s+REG_(".$valtype.")\s+(.+)\s*$/mi", $strBuf, $buffer2)) { if ($dword) { $strBuffer = strval(hexdec($buffer2[2])); } else { $strBuffer = $buffer2[2]; } } else { return false; } } else { if (CommonFunctions::executeProgram('reg', 'query "'.substr($strName, 0, $last).'" /v '.$keyname.$param.' 2>&1', $strBuf, $booErrorRep) && (strlen($strBuf) > 0) && preg_match("/^\s*".$keyname."\s+REG_(".$valtype.")\s+(.+)\s*$/mi", $strBuf, $buffer2)) { if ($dword) { $strBuffer = strval(hexdec($buffer2[2])); } else { $strBuffer = $buffer2[2]; } } else { return false; } } } elseif (gettype($reg) === "object") { $_hkey = array('HKEY_CLASSES_ROOT'=>0x80000000, 'HKEY_CURRENT_USER'=>0x80000001, 'HKEY_LOCAL_MACHINE'=>0x80000002, 'HKEY_USERS'=>0x80000003, 'HKEY_PERFORMANCE_DATA'=>0x80000004, 'HKEY_PERFORMANCE_TEXT'=>0x80000050, 'HKEY_PERFORMANCE_NLSTEXT'=>0x80000060, 'HKEY_CURRENT_CONFIG'=>0x80000005, 'HKEY_DYN_DATA'=>0x80000006); $first = strpos($strName, "\\"); $last = strrpos($strName, "\\"); $hkey = substr($strName, 0, $first); if (isset($_hkey[$hkey])) { $sub_keys = new VARIANT(); try { if ($dword) { $reg->Get("StdRegProv")->GetDWORDValue(strval($_hkey[$hkey]), substr($strName, $first+1, $last-$first-1), substr($strName, $last+1), $sub_keys); } else { $reg->Get("StdRegProv")->GetStringValue(strval($_hkey[$hkey]), substr($strName, $first+1, $last-$first-1), substr($strName, $last+1), $sub_keys); } } catch (Exception $e) { if ($booErrorRep) { $error = PSI_Error::singleton(); $error->addError("GetStringValue()", preg_replace('//', "\n", preg_replace('/|<\/b>/', '', $e->getMessage()))); } return false; } if (variant_get_type($sub_keys) !== VT_NULL) { $strBuffer = strval($sub_keys); } else { return false; } } else { return false; } } return true; } /** * enumKey function * * @return boolean command successfull or not */ public static function enumKey($reg, $strName, &$arrBuffer, $booErrorRep = true) { $arrBuffer = array(); if ($reg === false) { if (defined('PSI_EMU_HOSTNAME')) { return false; } if (self::$_cp) { if (CommonFunctions::executeProgram('cmd', '/c chcp '.self::$_cp.' >nul & reg query "'.$strName.'" 2>&1', $strBuf, $booErrorRep) && (strlen($strBuf) > 0) && preg_match_all("/^".preg_replace("/\\\\/", "\\\\\\\\", $strName)."\\\\(.*)/mi", $strBuf, $buffer2)) { foreach ($buffer2[1] as $sub_key) { $arrBuffer[] = trim($sub_key); } } else { return false; } } else { if (CommonFunctions::executeProgram('reg', 'query "'.$strName.'" 2>&1', $strBuf, $booErrorRep) && (strlen($strBuf) > 0) && preg_match_all("/^".preg_replace("/\\\\/", "\\\\\\\\", $strName)."\\\\(.*)/mi", $strBuf, $buffer2)) { foreach ($buffer2[1] as $sub_key) { $arrBuffer[] = trim($sub_key); } } else { return false; } } } elseif (gettype($reg) === "object") { $_hkey = array('HKEY_CLASSES_ROOT'=>0x80000000, 'HKEY_CURRENT_USER'=>0x80000001, 'HKEY_LOCAL_MACHINE'=>0x80000002, 'HKEY_USERS'=>0x80000003, 'HKEY_PERFORMANCE_DATA'=>0x80000004, 'HKEY_PERFORMANCE_TEXT'=>0x80000050, 'HKEY_PERFORMANCE_NLSTEXT'=>0x80000060, 'HKEY_CURRENT_CONFIG'=>0x80000005, 'HKEY_DYN_DATA'=>0x80000006); $first = strpos($strName, "\\"); $hkey = substr($strName, 0, $first); if (isset($_hkey[$hkey])) { $sub_keys = new VARIANT(); try { $reg->Get("StdRegProv")->EnumKey(strval($_hkey[$hkey]), substr($strName, $first+1), $sub_keys); } catch (Exception $e) { if ($booErrorRep) { $error = PSI_Error::singleton(); $error->addError("enumKey()", preg_replace('//', "\n", preg_replace('/|<\/b>/', '', $e->getMessage())));; } return false; } if (variant_get_type($sub_keys) !== VT_NULL) { foreach ($sub_keys as $sub_key) { $arrBuffer[] = $sub_key; } } else { return false; } } else { return false; } } return true; } /** * initWMI function * * @return string, object or false */ public static function initWMI($namespace, $booErrorRep = false) { $wmi = false; if (self::$_wmi !== false) { // WMI not disabled try { if (PSI_OS == 'Linux') { if (defined('PSI_EMU_HOSTNAME')) $wmi = '--namespace="'.$namespace.'" -U '.PSI_EMU_USER.'%'.PSI_EMU_PASSWORD.' //'.PSI_EMU_HOSTNAME.' "select * from'; } elseif (PSI_OS == 'WINNT') { $objLocator = new COM('WbemScripting.SWbemLocator'); if (defined('PSI_EMU_HOSTNAME')) $wmi = $objLocator->ConnectServer(PSI_EMU_HOSTNAME, $namespace, PSI_EMU_USER, PSI_EMU_PASSWORD); else $wmi = $objLocator->ConnectServer('', $namespace); } } catch (Exception $e) { if ($booErrorRep) { $error = PSI_Error::singleton(); $error->addError("WMI connect ".$namespace." error", "PhpSysInfo can not connect to the WMI interface for security reasons.\nCheck an authentication mechanism for the directory where phpSysInfo is installed or credentials."); } } } return $wmi; } /** * convertCP function * * @return void */ public static function convertCP(&$strBuf, $encoding) { if (defined('PSI_SYSTEM_CODEPAGE') && (PSI_SYSTEM_CODEPAGE != null) && ($encoding != null) && ($encoding != PSI_SYSTEM_CODEPAGE)) { $systemcp = PSI_SYSTEM_CODEPAGE; if (preg_match("/^windows-\d+ \((.+)\)$/", $systemcp, $buf)) { $systemcp = $buf[1]; } if (preg_match("/^windows-\d+ \((.+)\)$/", $encoding, $buf)) { $encoding = $buf[1]; } $enclist = mb_list_encodings(); if (in_array($encoding, $enclist) && in_array($systemcp, $enclist)) { $strBuf = mb_convert_encoding($strBuf, $encoding, $systemcp); } elseif (function_exists("iconv")) { if (($iconvout=iconv($systemcp, $encoding.'//IGNORE', $strBuf))!==false) { $strBuf = $iconvout; } } elseif (function_exists("libiconv") && (($iconvout=libiconv($systemcp, $encoding, $strBuf))!==false)) { $strBuf = $iconvout; } } } /** * build the global Error object and create the WMI connection */ public function __construct($blockname = false) { parent::__construct($blockname); if (!defined('PSI_EMU_HOSTNAME') && CommonFunctions::executeProgram('cmd', '/c ver 2>nul', $ver_value, false) && (($ver_value = trim($ver_value)) !== "")) { $this->_ver = $ver_value; } if (($this->_ver !== "") && preg_match("/ReactOS\r?\n\S+\s+.+/", $this->_ver)) { self::$_wmi = false; // No WMI info on ReactOS yet $this->_reg = false; // No EnumKey and ReadReg on ReactOS yet } else { if ((PSI_OS == 'WINNT') && !defined('PSI_SYSTEM_CODEPAGE')) { if (defined('PSI_EMU_HOSTNAME')) { try { $objLocator = new COM('WbemScripting.SWbemLocator'); $wmi = $objLocator->ConnectServer('', 'root\CIMv2'); $buffer = self::getWMI($wmi, 'Win32_OperatingSystem', array('CodeSet')); if (!$buffer) { $reg = $objLocator->ConnectServer('', 'root\default'); if (self::readReg($reg, "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Nls\\CodePage\\ACP", $strBuf, false)) { $buffer[0]['CodeSet'] = $strBuf; } } if ($buffer && isset($buffer[0]) && isset($buffer[0]['CodeSet'])) { $codeset = $buffer[0]['CodeSet']; if ($codeset == 932) { $codename = ' (SJIS)'; } elseif ($codeset == 949) { $codename = ' (EUC-KR)'; } elseif ($codeset == 950) { $codename = ' (BIG-5)'; } else { $codename = ''; } define('PSI_SYSTEM_CODEPAGE', 'windows-'.$codeset.$codename); } else { define('PSI_SYSTEM_CODEPAGE', null); if (PSI_DEBUG) { $this->error->addError("__construct()", "PhpSysInfo can not detect PSI_SYSTEM_CODEPAGE"); } } } catch (Exception $e) { define('PSI_SYSTEM_CODEPAGE', null); if (PSI_DEBUG) { $this->error->addError("WMI connect error", "PhpSysInfo can not connect to the WMI interface for security reasons.\nCheck an authentication mechanism for the directory where phpSysInfo is installed"); } } } else { define('PSI_SYSTEM_CODEPAGE', null); } } self::$_wmi = self::initWMI('root\CIMv2', true); if (PSI_OS == 'WINNT') { $this->_reg = self::initWMI('root\default', PSI_DEBUG); if (gettype($this->_reg) === "object") { $this->_reg->Security_->ImpersonationLevel = 3; } } else { $this->_reg = false; // No EnumKey and ReadReg on Linux } } $this->_getCodeSet(); } /** * store the codepage of the os for converting some strings to utf-8 * * @return void */ private function _getCodeSet() { $buffer = $this->_get_Win32_OperatingSystem(); if (!$buffer) { if (self::readReg($this->_reg, "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Nls\\CodePage\\ACP", $strBuf, false)) { $buffer[0]['CodeSet'] = $strBuf; } if (self::readReg($this->_reg, "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Nls\\Language\\Default", $strBuf, false)) { $buffer[0]['Locale'] = $strBuf; } } if ($buffer && isset($buffer[0])) { if (isset($buffer[0]['CodeSet'])) { $codeset = $buffer[0]['CodeSet']; if ($codeset == 932) { $codename = ' (SJIS)'; } elseif ($codeset == 949) { $codename = ' (EUC-KR)'; } elseif ($codeset == 950) { $codename = ' (BIG-5)'; } else { $codename = ''; } self::$_cp = $codeset; $this->_codepage = 'windows-'.$codeset.$codename; } if (isset($buffer[0]['Locale']) && (($locale = hexdec($buffer[0]['Locale']))>0)) { $lang = ""; if (is_readable(PSI_APP_ROOT.'/data/languages.ini') && ($langdata = @parse_ini_file(PSI_APP_ROOT.'/data/languages.ini', true))) { if (isset($langdata['WINNT'][$locale])) { $lang = $langdata['WINNT'][$locale]; } } if ($lang == "") { $lang = 'Unknown'; } $this->_syslang = $lang.' ('.$locale.')'; } } } /** * retrieve different device types from the system based on selector * * @param string $strType type of the devices that should be returned * * @return array list of devices of the specified type */ private function _devicelist($strType) { if ($this->_wmidevices === null) { $this->_wmidevices = array(); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { $this->_wmidevices = self::getWMI(self::$_wmi, 'Win32_PnPEntity', array('Name', 'PNPDeviceID', 'Manufacturer', 'PNPClass')); if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { $this->_wmidisks = self::getWMI(self::$_wmi, 'Win32_DiskDrive', array('PNPDeviceID', 'Size', 'SerialNumber')); } else { $this->_wmidisks = self::getWMI(self::$_wmi, 'Win32_DiskDrive', array('PNPDeviceID', 'Size')); } } else { $this->_wmidevices = self::getWMI(self::$_wmi, 'Win32_PnPEntity', array('Name', 'PNPDeviceID')); } if (empty($this->_wmidevices)) { $lstdevs = array(); $services = array(); foreach (array('PCI', 'USB') as $type) { $hkey = "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\".$type; if (self::enumKey($this->_reg, $hkey, $vendevs, false)) { foreach ($vendevs as $vendev) if (self::enumKey($this->_reg, $hkey."\\".$vendev, $ids, false)) { foreach ($ids as $id) { if ($type === 'PCI') { // enumerate all PCI devices $lstdevs[$type."\\".$vendev."\\".$id] = true; } elseif (self::readReg($this->_reg, $hkey."\\".$vendev."\\".$id."\\Service", $service, false)) { $services[$service] = true; // ever used USB services break; } } } } } $hkey = "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services"; foreach ($services as $service=>$tmp) if (self::readReg($this->_reg, $hkey."\\".$service."\\Enum\\Count", $count, false, true) && ($count > 0)) { for ($i = 0; $i < $count; $i++) if (self::readReg($this->_reg, $hkey."\\".$service."\\Enum\\".$i, $id, false) && preg_match("/^USB/", $id)) { $lstdevs[$id] = true; // used USB devices } } $hkey = "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\"; foreach ($lstdevs as $lstdev=>$tmp) { if (self::readReg($this->_reg, $hkey.$lstdev."\\DeviceDesc", $nameBuf, false)) { $namesplit = preg_split('/;/', $nameBuf, -1, PREG_SPLIT_NO_EMPTY); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && self::readReg($this->_reg, $hkey.$lstdev."\\Mfg", $mfgBuf, false)) { $mfgsplit = preg_split('/;/', $mfgBuf, -1, PREG_SPLIT_NO_EMPTY); $this->_wmidevices[] = array('Name'=>$namesplit[count($namesplit)-1], 'PNPDeviceID'=>$lstdev, 'Manufacturer'=>$mfgsplit[count($mfgsplit)-1]); } else { $this->_wmidevices[] = array('Name'=>$namesplit[count($namesplit)-1], 'PNPDeviceID'=>$lstdev); } } } $hkey = "HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\Scsi"; $id = 0; if (self::enumKey($this->_reg, $hkey, $portBuf, false)) { foreach ($portBuf as $scsiport) { if (self::enumKey($this->_reg, $hkey."\\".$scsiport, $busBuf, false)) { foreach ($busBuf as $scsibus) { if (self::enumKey($this->_reg, $hkey."\\".$scsiport."\\".$scsibus, $tarBuf, false)) { foreach ($tarBuf as $scsitar) if (!strncasecmp($scsitar, "Target Id ", strlen("Target Id "))) { if (self::enumKey($this->_reg, $hkey."\\".$scsiport."\\".$scsibus."\\".$scsitar, $logBuf, false)) { foreach ($logBuf as $scsilog) if (!strncasecmp($scsilog, "Logical Unit Id ", strlen("Logical Unit Id "))) { $hkey2 = $hkey."\\".$scsiport."\\".$scsibus."\\".$scsitar."\\".$scsilog."\\"; if ((self::readReg($this->_reg, $hkey2."DeviceType", $typeBuf, false) || self::readReg($this->_reg, $hkey2."Type", $typeBuf, false)) && (($typeBuf=strtolower(trim($typeBuf))) !== "")) { if ((($typeBuf == 'diskperipheral') || ($typeBuf == 'cdromperipheral')) && self::readReg($this->_reg, $hkey2."Identifier", $ideBuf, false)) { $this->_wmidevices[] = array('Name'=>$ideBuf, 'PNPDeviceID'=>'SCSI\\'.$id); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && self::readReg($this->_reg, $hkey2."SerialNumber", $serBuf, false) && (($serBuf=trim($serBuf)) !== "")) { $this->_wmidisks[] = array('PNPDeviceID'=>'SCSI\\'.$id, 'SerialNumber'=>$serBuf); } $id++; } } } } } } } } } } } } $list = array(); foreach ($this->_wmidevices as $device) { if (substr($device['PNPDeviceID'], 0, strpos($device['PNPDeviceID'], "\\") + 1) == ($strType."\\")) { if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if (!isset($device['PNPClass']) || ($device['PNPClass']===$strType) || ($device['PNPClass']==='System')) { $device['PNPClass'] = null; } if (!isset($device['Manufacturer']) || preg_match('/^\(.*\)$/', $device['Manufacturer']) || (($device['PNPClass']==='USB') && preg_match('/\sUSB\s/', $device['Manufacturer']))) { $device['Manufacturer'] = null; } $device['Capacity'] = null; if (($strType==='IDE')||($strType==='SCSI')) { foreach ($this->_wmidisks as $disk) { if (($disk['PNPDeviceID'] === $device['PNPDeviceID']) && isset($disk['Size'])) { $device['Capacity'] = $disk['Size']; break; } } } $device['Serial'] = null; if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { if ($strType==='USB') { // if (preg_match('/\\\\([^\\\\][^&\\\\][^\\\\]+)$/', $device['PNPDeviceID'], $buf)) { // second character !== & if (preg_match('/\\\\(\w+)$/', $device['PNPDeviceID'], $buf)) { $device['Serial'] = $buf[1]; } } elseif (($strType==='IDE')||($strType==='SCSI')) { foreach ($this->_wmidisks as $disk) { if (($disk['PNPDeviceID'] === $device['PNPDeviceID']) && isset($disk['SerialNumber'])) { $device['Serial'] = $disk['SerialNumber']; break; } } } } $list[] = array('Name'=>$device['Name'], 'Manufacturer'=>$device['Manufacturer'], 'Product'=>$device['PNPClass'], 'Capacity'=>$device['Capacity'], 'Serial'=>$device['Serial']); } else { $list[] = array('Name'=>$device['Name']); } } } return $list; } /** * Host Name * * @return void */ private function _hostname() { if (PSI_USE_VHOST && !defined('PSI_EMU_HOSTNAME')) { if (CommonFunctions::readenv('SERVER_NAME', $hnm)) $this->sys->setHostname($hnm); } else { $buffer = $this->_get_Win32_ComputerSystem(); if (!$buffer && self::readReg($this->_reg, "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\ComputerName\\ActiveComputerName\\ComputerName", $strBuf, false) && (strlen($strBuf) > 0)) { $buffer[0]['Name'] = $strBuf; } if ($buffer) { $result = $buffer[0]['Name']; $ip = gethostbyname($result); if ($ip != $result) { if ((version_compare("10.0.0.0", $ip, "<=") && version_compare($ip, "10.255.255.255", "<=")) || (version_compare("172.16.0.0", $ip, "<=") && version_compare($ip, "172.31.255.255", "<=")) || (version_compare("192.168.0.0", $ip, "<=") && version_compare($ip, "192.168.255.255", "<=")) || (version_compare("127.0.0.0", $ip, "<=") && version_compare($ip, "127.255.255.255", "<=")) || (version_compare("169.254.1.0", $ip, "<=") && version_compare($ip, "169.254.254.255", "<=")) || (version_compare("255.255.255.255", $ip, "=="))) { $this->sys->setHostname($result); // internal ip } else { $hostname = gethostbyaddr($ip); if ($hostname !== false) $this->sys->setHostname($hostname); else $this->sys->setHostname($result); } } else { $this->sys->setHostname($result); } } elseif (defined('PSI_EMU_HOSTNAME')) { $this->sys->setHostname(PSI_EMU_HOSTNAME); } elseif (CommonFunctions::readenv('COMPUTERNAME', $hnm)) { $this->sys->setHostname($hnm); } } } /** * Virtualizer info * * @return void */ protected function _virtualizer() { if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO) { $cpuvirt = $this->sys->getVirtualizer(); // previous info from _cpuinfo() $vendor_array = array(); if ($this->_Model != "") { $vendor_array[] = $this->_Model; } if ($this->_Manufacturer != "") { if ($this->_Model != "") { $vendor_array[] = $this->_Manufacturer." ".$this->_Model; } else { $vendor_array[] = $this->_Manufacturer; } } $novm = true; if (count($vendor_array)>0) { $virt = CommonFunctions::decodevirtualizer($vendor_array); if ($virt !== null) { $this->sys->setVirtualizer($virt); $novm = false; } } if ($novm) { // Detect QEMU cpu if (isset($cpuvirt["cpuid:QEMU"])) { $this->sys->setVirtualizer('qemu'); // QEMU } } } } /** * UpTime * time the system is running * * @return void */ private function _uptime() { $result = 0; date_default_timezone_set('UTC'); $buffer = $this->_get_Win32_OperatingSystem(); if ($buffer && ($buffer[0]['LastBootUpTime'] !== null)) { $local = $buffer[0]['LocalDateTime']; $boot = $buffer[0]['LastBootUpTime']; $lyear = intval(substr($local, 0, 4)); $lmonth = intval(substr($local, 4, 2)); $lday = intval(substr($local, 6, 2)); $lhour = intval(substr($local, 8, 2)); $lminute = intval(substr($local, 10, 2)); $lseconds = intval(substr($local, 12, 2)); $loffset = intval(substr($boot, 21, 4)); $byear = intval(substr($boot, 0, 4)); $bmonth = intval(substr($boot, 4, 2)); $bday = intval(substr($boot, 6, 2)); $bhour = intval(substr($boot, 8, 2)); $bminute = intval(substr($boot, 10, 2)); $bseconds = intval(substr($boot, 12, 2)); $boffset = intval(substr($boot, 21, 4)); if (version_compare($buffer[0]['Version'], "5.1", "<")) { // fix LastBootUpTime on Windows 2000 and older $boffset += $boffset; } $localtime = mktime($lhour, $lminute, $lseconds, $lmonth, $lday, $lyear) - $loffset*60; $boottime = mktime($bhour, $bminute, $bseconds, $bmonth, $bday, $byear) - $boffset*60; $result = $localtime - $boottime; $this->sys->setUptime($result); } elseif (!defined('PSI_EMU_HOSTNAME') && (substr($this->sys->getDistribution(), 0, 7)=="ReactOS") && CommonFunctions::executeProgram('uptime', '', $strBuf, false) && (strlen($strBuf) > 0) && preg_match("/^System Up Time:\s+(\d+) days, (\d+) Hours, (\d+) Minutes, (\d+) Seconds/", $strBuf, $ar_buf)) { $sec = $ar_buf[4]; $min = $ar_buf[3]; $hours = $ar_buf[2]; $days = $ar_buf[1]; $this->sys->setUptime($days * 86400 + $hours * 3600 + $min * 60 + $sec); } } /** * Number of Users * * @return void */ protected function _users() { if (!defined('PSI_EMU_HOSTNAME') && CommonFunctions::executeProgram('quser', '', $strBuf, false) && (strlen($strBuf) > 0)) { $lines = preg_split('/\n/', $strBuf); $users = count($lines)-1; } else { $users = 0; $buffer = self::getWMI(self::$_wmi, 'Win32_Process', array('Caption')); foreach ($buffer as $process) { if (strtoupper($process['Caption']) == strtoupper('explorer.exe')) { $users++; } } } $this->sys->setUsers($users); } /** * Distribution * * @return void */ private function _distro() { $buffer = $this->_get_Win32_OperatingSystem(); if ($buffer) { $ver = $buffer[0]['Version']; if (($this->_ver !== "") && preg_match("/^Microsoft [^\[]*\s*\[\D*\s*(".$ver."\.\d+).*\]/", $this->_ver, $ar_temp)) { $kernel = $ar_temp[1]; } else { $kernel = $ver; } if ($buffer[0]['ServicePackMajorVersion'] > 0) { $kernel .= ' SP'.$buffer[0]['ServicePackMajorVersion']; } if ($allCpus = $this->_get_Win32_Processor()) { $addresswidth = 0; if (isset($allCpus[0]['AddressWidth']) && (($addresswidth = $allCpus[0]['AddressWidth']) > 0)) { $kernel .= ' ('.$addresswidth.'-bit)'; } if (isset($allCpus[0]['Architecture'])) { switch ($allCpus[0]['Architecture']) { case 0: $kernel .= ' x86'; break; case 1: $kernel .= ' MIPS'; break; case 2: $kernel .= ' Alpha'; break; case 3: $kernel .= ' PowerPC'; break; case 5: $kernel .= ' ARM'; break; case 6: $kernel .= ' ia64'; break; case 9: if ($addresswidth == 32) { $kernel .= ' x86'; } else { $kernel .= ' x64'; } break; case 12: if ($addresswidth == 32) { $kernel .= ' ARM'; } else { $kernel .= ' ARM64'; } } } } $this->sys->setKernel($kernel); $distribution = $buffer[0]['Caption']; if (version_compare($ver, "10.0", ">=") && !preg_match('/server/i', $buffer[0]['Caption']) && ($list = @parse_ini_file(PSI_APP_ROOT."/data/osnames.ini", true))) { $karray = preg_split('/\./', $ver); if (isset($karray[2]) && isset($list['win10'][$karray[2]])) { $distribution .= ' ('.$list['win10'][$karray[2]].')'; } } $this->sys->setDistribution($distribution); if (version_compare($ver, "5.1", "<")) $icon = 'Win2000.png'; elseif (version_compare($ver, "5.1", ">=") && version_compare($ver, "6.0", "<")) $icon = 'WinXP.png'; elseif (version_compare($ver, "6.0", ">=") && version_compare($ver, "6.2", "<")) $icon = 'WinVista.png'; elseif (version_compare($ver, "6.2", ">=") && version_compare($ver, "10.0.21996", "<")) $icon = 'Win8.png'; else $icon = 'Win11.png'; $this->sys->setDistributionIcon($icon); } elseif ($this->_ver !== "") { if (preg_match("/ReactOS\r?\n\S+\s+(.+)/", $this->_ver, $ar_temp)) { if (preg_match("/^(\d+\.\d+\.\d+[\S]*)(.+)$/", trim($ar_temp[1]), $ver_temp)) { $this->sys->setDistribution("ReactOS ".trim($ver_temp[1])); $this->sys->setKernel(trim($ver_temp[2])); } else { $this->sys->setDistribution("ReactOS"); $this->sys->setKernel($ar_temp[1]); } $this->sys->setDistributionIcon('ReactOS.png'); } elseif (preg_match("/^(Microsoft [^\[]*)\s*\[\D*\s*([\.\d]+)\]/", $this->_ver, $ar_temp)) { $ver = $ar_temp[2]; $kernel = $ver; if (($this->_reg === false) && self::readReg($this->_reg, "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProductName", $strBuf, false, false, true) && (strlen($strBuf) > 0)) { // only if reg query via cmd if (self::readReg($this->_reg, "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows NT\\CurrentVersion\\ProductName", $tmpBuf, false)) { $kernel .= ' (64-bit)'; } if (preg_match("/^Microsoft /", $strBuf)) { $distribution = $strBuf; } else { $distribution = "Microsoft ".$strBuf; } } elseif (self::readReg($this->_reg, "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProductName", $strBuf, false) && (strlen($strBuf) > 0)) { if (preg_match("/^Microsoft /", $strBuf)) { $distribution = $strBuf; } else { $distribution = "Microsoft ".$strBuf; } } else { $distribution = $ar_temp[1]; } $this->sys->setKernel($kernel); if (version_compare($ver, "10.0", ">=") && !preg_match('/server/i', $this->sys->getDistribution()) && ($list = @parse_ini_file(PSI_APP_ROOT."/data/osnames.ini", true))) { if (version_compare($ver, "10.0.21996", ">=") && version_compare($ver, "11.0", "<")) { $distribution = preg_replace("/Windows 10/", "Windows 11", $distribution); // fix Windows 11 detection } $karray = preg_split('/\./', $ver); if (isset($karray[2]) && isset($list['win10'][$karray[2]])) { $distribution .= ' ('.$list['win10'][$karray[2]].')'; } } $this->sys->setDistribution($distribution); if (version_compare($ver, "5.1", "<")) $icon = 'Win2000.png'; elseif (version_compare($ver, "5.1", ">=") && version_compare($ver, "6.0", "<")) $icon = 'WinXP.png'; elseif (version_compare($ver, "6.0", ">=") && version_compare($ver, "6.2", "<")) $icon = 'WinVista.png'; elseif (version_compare($ver, "6.2", ">=") && version_compare($ver, "10.0.21996", "<")) $icon = 'Win8.png'; else $icon = 'Win11.png'; $this->sys->setDistributionIcon($icon); } else { $this->sys->setDistribution("WINNT"); $this->sys->setDistributionIcon('WINNT.png'); } } else { $this->sys->setDistribution("WINNT"); $this->sys->setDistributionIcon('WINNT.png'); } } /** * Processor Load * optionally create a loadbar * * @return void */ private function _loadavg() { if (($cpubuffer = $this->_get_Win32_PerfFormattedData_PerfOS_Processor()) && isset($cpubuffer['cpu_Total'])) { $this->sys->setLoad($cpubuffer['cpu_Total']); if (PSI_LOAD_BAR) { $this->sys->setLoadPercent($cpubuffer['cpu_Total']); } } elseif ($buffer = $this->_get_Win32_Processor()) { $loadok = true; $sum = 0; foreach ($buffer as $load) { $value = $load['LoadPercentage']; if ($value !== null) { $sum += $value; } else { $loadok = false; break; } } if ($loadok) { $percent = $sum / count($buffer); $this->sys->setLoad($percent); if (PSI_LOAD_BAR) { $this->sys->setLoadPercent($percent); } } } } /** * CPU information * * @return void */ private function _cpuinfo() { $allCpus = $this->_get_Win32_Processor(); if (empty($allCpus)) { $hkey = "HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor"; if (self::enumKey($this->_reg, $hkey, $arrBuf, false)) { foreach ($arrBuf as $coreCount) { if (self::readReg($this->_reg, $hkey."\\".$coreCount."\\ProcessorNameString", $strBuf, false)) { $allCpus[$coreCount]['Name'] = $strBuf; } if (self::readReg($this->_reg, $hkey."\\".$coreCount."\\~MHz", $strBuf, false)) { if (preg_match("/^0x([0-9a-f]+)$/i", $strBuf, $hexvalue)) { $allCpus[$coreCount]['CurrentClockSpeed'] = hexdec($hexvalue[1]); } } if (self::readReg($this->_reg, $hkey."\\".$coreCount."\\VendorIdentifier", $strBuf, false)) { $allCpus[$coreCount]['Manufacturer'] = $strBuf; } if (self::readReg($this->_reg, $hkey."\\".$coreCount."\\Identifier", $strBuf, false)) { $allCpus[$coreCount]['Caption'] = $strBuf; } } } } $globalcpus = 0; foreach ($allCpus as $oneCpu) { $cpuCount = 1; if (isset($oneCpu['NumberOfLogicalProcessors'])) { $cpuCount = $oneCpu['NumberOfLogicalProcessors']; } elseif (isset($oneCpu['NumberOfCores'])) { $cpuCount = $oneCpu['NumberOfCores']; } $globalcpus+=$cpuCount; } $cpulist = null; foreach ($allCpus as $oneCpu) { $cpuCount = 1; if (isset($oneCpu['NumberOfLogicalProcessors'])) { $cpuCount = $oneCpu['NumberOfLogicalProcessors']; } elseif (isset($oneCpu['NumberOfCores'])) { $cpuCount = $oneCpu['NumberOfCores']; } for ($i = 0; $i < $cpuCount; $i++) { $cpu = new CpuDevice(); if (isset($oneCpu['Name'])) $cpu->setModel($oneCpu['Name']); if (isset($oneCpu['L3CacheSize']) && ($oneCpu['L3CacheSize'] > 0)) { $cpu->setCache($oneCpu['L3CacheSize'] * 1024); } elseif (isset($oneCpu['L2CacheSize']) && ($oneCpu['L2CacheSize'] > 0)) { $cpu->setCache($oneCpu['L2CacheSize'] * 1024); } if (isset($oneCpu['CurrentVoltage']) && ($oneCpu['CurrentVoltage'] > 0)) { $cpu->setVoltage($oneCpu['CurrentVoltage']/10); } if (isset($oneCpu['CurrentClockSpeed']) && ($oneCpu['CurrentClockSpeed'] > 0)) { $cpu->setCpuSpeed($oneCpu['CurrentClockSpeed']); if (isset($oneCpu['MaxClockSpeed']) && ($oneCpu['CurrentClockSpeed'] <= $oneCpu['MaxClockSpeed'])) $cpu->setCpuSpeedMax($oneCpu['MaxClockSpeed']); } if (isset($oneCpu['ExtClock']) && ($oneCpu['ExtClock'] > 0)) { $cpu->setBusSpeed($oneCpu['ExtClock']); } if (isset($oneCpu['Manufacturer'])) { $cpumanufacturer = $oneCpu['Manufacturer']; $cpu->setVendorId($cpumanufacturer); if ($cpumanufacturer === "QEMU") { if (isset($oneCpu['Caption'])) { $impl = ''; if (preg_match('/^ARMv8 \(64-bit\) Family 8 Model ([0-9a-fA-F]+) Revision[ ]+([0-9a-fA-F]+)$/', $oneCpu['Caption'], $partvar)) { switch (strtolower($partvar[1])) { case '51': $impl = '0x0'; break; // Qemu case 'd03': case 'd07': case 'd08': $impl = '0x41'; break; // ARM Limited case '1': $impl = '0x46'; // Fujitsu Ltd. } } elseif (preg_match('/^ARM Family 7 Model ([0-9a-fA-F]+) Revision[ ]+([0-9a-fA-F]+)$/', $oneCpu['Caption'], $partvar)) { switch (strtolower($partvar[1])) { case 'c07': case 'c0f': $impl = '0x41'; // ARM Limited } } if ($impl !== '') { if ($cpulist === null) $cpulist = @parse_ini_file(PSI_APP_ROOT."/data/cpus.ini", true); if ($cpulist) { if ((isset($cpulist['cpu'][$cpufromlist = strtolower($impl.',0x'.$partvar[1].',0x'.$partvar[2])])) || isset($cpulist['cpu'][$cpufromlist = strtolower($impl.',0x'.$partvar[1])])) { if (($cpumodel = $cpu->getModel()) !== '') { $cpu->setModel($cpumodel.' - '.$cpulist['cpu'][$cpufromlist]); } else { $cpu->setModel($cpulist['cpu'][$cpufromlist]); } } } } } if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO) { $this->sys->setVirtualizer("cpuid:QEMU", false); } } } if (PSI_LOAD_BAR) { if (($cpubuffer = $this->_get_Win32_PerfFormattedData_PerfOS_Processor()) && (count($cpubuffer) == ($globalcpus+1)) && isset($cpubuffer['cpu'.$i])) { $cpu->setLoad($cpubuffer['cpu'.$i]); } elseif ((count($allCpus) == $globalcpus) && isset($oneCpu['LoadPercentage'])) { $cpu->setLoad($oneCpu['LoadPercentage']); } } $this->sys->setCpus($cpu); } } } /** * Machine information * * @return void */ private function _machine() { $buffer = $this->_get_Win32_ComputerSystem(); $bufferp = self::getWMI(self::$_wmi, 'Win32_BaseBoard', array('Product')); $bufferb = self::getWMI(self::$_wmi, 'Win32_BIOS', array('SMBIOSBIOSVersion', 'ReleaseDate')); if (!$buffer) { if (self::readReg($this->_reg, "HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\BIOS\\systemManufacturer", $strBuf, false)) { $buffer[0]['Manufacturer'] = $strBuf; } if (self::readReg($this->_reg, "HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\BIOS\\SystemProductName", $strBuf, false)) { $buffer[0]['Model'] = $strBuf; } if (self::readReg($this->_reg, "HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\BIOS\\SystemFamily", $strBuf, false)) { $buffer[0]['SystemFamily'] = $strBuf; } } if (!$bufferp) { if (self::readReg($this->_reg, "HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\BIOS\\BaseBoardProduct", $strBuf, false)) { $bufferp[0]['Product'] = $strBuf; } } if (!$bufferb) { if (self::readReg($this->_reg, "HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\BIOS\\BIOSVersion", $strBuf, false)) { $bufferb[0]['SMBIOSBIOSVersion'] = $strBuf; } if (self::readReg($this->_reg, "HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\BIOS\\BIOSReleaseDate", $strBuf, false)) { $bufferb[0]['ReleaseDate'] = $strBuf; } } if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO) { if (isset($buffer[0]['Manufacturer'])) { $this->_Manufacturer = $buffer[0]['Manufacturer']; } if (isset($buffer[0]['Model'])) { $this->_Model = $buffer[0]['Model']; } } $buf = ""; $model = ""; if ($buffer && isset($buffer[0])) { if (isset($buffer[0]['Manufacturer']) && !preg_match("/^To be filled by O\.E\.M\.$|^System manufacturer$|^Not Specified$/i", $buf2=trim($buffer[0]['Manufacturer'])) && ($buf2 !== "")) { $buf .= ' '.$buf2; } if (isset($buffer[0]['Model']) && !preg_match("/^To be filled by O\.E\.M\.$|^System Product Name$|^Not Specified$/i", $buf2=trim($buffer[0]['Model'])) && ($buf2 !== "")) { $model = $buf2; $buf .= ' '.$buf2; } } if ($bufferp && isset($bufferp[0])) { if (isset($bufferp[0]['Product']) && !preg_match("/^To be filled by O\.E\.M\.$|^BaseBoard Product Name$|^Not Specified$|^Default string$/i", $buf2=trim($bufferp[0]['Product'])) && ($buf2 !== "")) { if ($buf2 !== $model) { $buf .= '/'.$buf2; } elseif (isset($buffer[0]['SystemFamily']) && !preg_match("/^To be filled by O\.E\.M\.$|^System Family$|^Not Specified$/i", $buf2=trim($buffer[0]['SystemFamily'])) && ($buf2 !== "")) { $buf .= '/'.$buf2; } } } if ($bufferb && isset($bufferb[0])) { $bver = ""; $brel = ""; if (isset($bufferb[0]['SMBIOSBIOSVersion']) && (($buf2=trim($bufferb[0]['SMBIOSBIOSVersion'])) !== "")) { $bver .= ' '.$buf2; } if (isset($bufferb[0]['ReleaseDate'])) { if (preg_match("/^(\d{4})(\d{2})(\d{2})\d{6}\.\d{6}\+\d{3}$/", $bufferb[0]['ReleaseDate'], $dateout)) { $brel .= ' '.$dateout[2].'/'.$dateout[3].'/'.$dateout[1]; } elseif (preg_match("/^\d{2}\/\d{2}\/\d{4}$/", $bufferb[0]['ReleaseDate'])) { $brel .= ' '.$bufferb[0]['ReleaseDate']; } } if ((trim($bver) !== "") || (trim($brel) !== "")) { $buf .= ', BIOS'.$bver.$brel; } } if (trim($buf) != "") { $this->sys->setMachine(trim($buf)); } } /** * Hardwaredevices * * @return void */ private function _hardware() { foreach ($this->_devicelist('PCI') as $pciDev) { $dev = new HWDevice(); $dev->setName($pciDev['Name']); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if (($pciDev['Manufacturer'] !== null) && preg_match("/^@[^\.]+\.inf,%([^%]+)%$/i", trim($pciDev['Manufacturer']), $mbuff)) { $dev->setManufacturer($mbuff[1]); } else { $dev->setManufacturer($pciDev['Manufacturer']); } $dev->setProduct($pciDev['Product']); } $this->sys->setPciDevices($dev); } foreach ($this->_devicelist('IDE') as $ideDev) { $dev = new HWDevice(); $dev->setName($ideDev['Name']); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { $dev->setCapacity($ideDev['Capacity']); if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { $dev->setSerial($ideDev['Serial']); } } $this->sys->setIdeDevices($dev); } foreach ($this->_devicelist('SCSI') as $scsiDev) { $dev = new HWDevice(); $dev->setName($scsiDev['Name']); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { $dev->setCapacity($scsiDev['Capacity']); if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { $dev->setSerial($scsiDev['Serial']); } } $this->sys->setScsiDevices($dev); } foreach ($this->_devicelist('USB') as $usbDev) { $dev = new HWDevice(); $dev->setName($usbDev['Name']); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { $dev->setManufacturer($usbDev['Manufacturer']); $dev->setProduct($usbDev['Product']); if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { $dev->setSerial($usbDev['Serial']); } } $this->sys->setUsbDevices($dev); } } /** * Network devices * * @return void */ private function _network() { if (self::$_wmi) { $buffer = $this->_get_Win32_OperatingSystem(); if ($buffer && isset($buffer[0]) && isset($buffer[0]['Version']) && version_compare($buffer[0]['Version'], "6.2", ">=")) { // minimal windows 2012 or windows 8 $allDevices = self::getWMI(self::$_wmi, 'Win32_PerfRawData_Tcpip_NetworkAdapter', array('Name', 'BytesSentPersec', 'BytesTotalPersec', 'BytesReceivedPersec', 'PacketsReceivedErrors', 'PacketsReceivedDiscarded', 'CurrentBandwidth')); } else { $allDevices = self::getWMI(self::$_wmi, 'Win32_PerfRawData_Tcpip_NetworkInterface', array('Name', 'BytesSentPersec', 'BytesTotalPersec', 'BytesReceivedPersec', 'PacketsReceivedErrors', 'PacketsReceivedDiscarded', 'CurrentBandwidth')); } if ($allDevices) { $aliases = array(); $hkey = "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}"; if (self::enumKey($this->_reg, $hkey, $arrBuf, false)) { foreach ($arrBuf as $netID) { if (self::readReg($this->_reg, $hkey."\\".$netID."\\Connection\\PnPInstanceId", $strInstanceID, false)) { if (self::readReg($this->_reg, "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\".$strInstanceID."\\FriendlyName", $strName, false)) { $cname = str_replace(array('(', ')', '#', '/'), array('[', ']', '_', '_'), $strName); //convert to canonical if (!isset($aliases[$cname])) { // duplicate checking $aliases[$cname]['id'] = $netID; $aliases[$cname]['name'] = $strName; if (self::readReg($this->_reg, $hkey."\\".$netID."\\Connection\\Name", $strCName, false) && (str_replace(array('(', ')', '#', '/'), array('[', ']', '_', '_'), $strCName) !== $cname)) { $aliases[$cname]['netname'] = $strCName; } } else { $aliases[$cname]['id'] = ''; } } } } } $aliases2 = array(); $hkey = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards"; if (self::enumKey($this->_reg, $hkey, $arrBuf, false)) { foreach ($arrBuf as $netCount) { if (self::readReg($this->_reg, $hkey."\\".$netCount."\\Description", $strName, false) && self::readReg($this->_reg, $hkey."\\".$netCount."\\ServiceName", $strGUID, false)) { $cname = str_replace(array('(', ')', '#', '/'), array('[', ']', '_', '_'), $strName); //convert to canonical if (!isset($aliases2[$cname])) { // duplicate checking $aliases2[$cname]['id'] = $strGUID; $aliases2[$cname]['name'] = $strName; } else { $aliases2[$cname]['id'] = ''; } } } } $allNetworkAdapterConfigurations = self::getWMI(self::$_wmi, 'Win32_NetworkAdapterConfiguration', array('SettingID', /*'Description',*/ 'MACAddress', 'IPAddress')); foreach ($allDevices as $device) if (!preg_match('/^WAN Miniport \[/', $device['Name'])) { $dev = new NetDevice(); $name = $device['Name']; if (preg_match('/^isatap\.({[A-Fa-f0-9\-]*})/', $name)) { $dev->setName("Microsoft ISATAP Adapter"); } else { if (preg_match('/\s-\s([^-]*)$/', $name, $ar_name)) { $name=substr($name, 0, strlen($name)-strlen($ar_name[0])); } $dev->setName($name); } $macexist = false; if (((($ali=$aliases) && isset($ali[$name])) || (($ali=$aliases2) && isset($ali[$name]))) && isset($ali[$name]['id']) && ($ali[$name]['id'] !== "")) { foreach ($allNetworkAdapterConfigurations as $NetworkAdapterConfiguration) { if ($ali[$name]['id']==$NetworkAdapterConfiguration['SettingID']) { $mininame = $ali[$name]['name']; if (preg_match('/^isatap\.({[A-Fa-f0-9\-]*})/', $mininame)) $mininame="Microsoft ISATAP Adapter"; elseif (preg_match('/\s-\s([^-]*)$/', $mininame, $ar_name)) $name=substr($mininame, 0, strlen($mininame)-strlen($ar_name[0])); $dev->setName($mininame); if (isset($NetworkAdapterConfiguration['MACAddress']) && trim($NetworkAdapterConfiguration['MACAddress']) !== "") $macexist = true; if (defined('PSI_SHOW_NETWORK_INFOS') && PSI_SHOW_NETWORK_INFOS) { if (isset($ali[$name]['netname'])) $dev->setInfo(str_replace(';', ':', $ali[$name]['netname'])); if ((!defined('PSI_HIDE_NETWORK_MACADDR') || !PSI_HIDE_NETWORK_MACADDR) && $macexist) $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').str_replace(':', '-', strtoupper(trim($NetworkAdapterConfiguration['MACAddress'])))); if (isset($NetworkAdapterConfiguration['IPAddress'])) foreach ($NetworkAdapterConfiguration['IPAddress'] as $ipaddres) if (($ipaddres != "0.0.0.0") && ($ipaddres != "::") && !preg_match('/^fe80::/i', $ipaddres)) $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').strtolower($ipaddres)); } break; } } } if ($macexist // || ($device['CurrentBandwidth'] >= 1000000) || ($device['BytesTotalPersec'] != 0) || ($device['BytesSentPersec'] != 0) || ($device['BytesReceivedPersec'] != 0) || ($device['PacketsReceivedErrors'] != 0) || ($device['PacketsReceivedDiscarded'] != 0)) { // hide unused if (defined('PSI_SHOW_NETWORK_INFOS') && PSI_SHOW_NETWORK_INFOS) { if (($speedinfo = $device['CurrentBandwidth']) >= 1000000) { if ($speedinfo > 1000000000) { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').round($speedinfo/1000000000, 2)."Gb/s"); } else { $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').round($speedinfo/1000000, 2)."Mb/s"); } } } // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_perfrawdata_tcpip_networkinterface.asp // there is a possible bug in the wmi interfaceabout uint32 and uint64: http://www.ureader.com/message/1244948.aspx, so that // magative numbers would occour, try to calculate the nagative value from total - positive number $txbytes = $device['BytesSentPersec']; $rxbytes = $device['BytesReceivedPersec']; if (($txbytes < 0) && ($rxbytes < 0)) { $txbytes += 4294967296; $rxbytes += 4294967296; } elseif ($txbytes < 0) { if ($device['BytesTotalPersec'] > $rxbytes) $txbytes = $device['BytesTotalPersec'] - $rxbytes; else $txbytes += 4294967296; } elseif ($rxbytes < 0) { if ($device['BytesTotalPersec'] > $txbytes) $rxbytes = $device['BytesTotalPersec'] - $txbytes; else $rxbytes += 4294967296; } $dev->setTxBytes($txbytes); $dev->setRxBytes($rxbytes); $dev->setErrors($device['PacketsReceivedErrors']); $dev->setDrops($device['PacketsReceivedDiscarded']); $this->sys->setNetDevices($dev); } } } } elseif (($buffer = $this->_get_systeminfo()) && preg_match('/^(\s+)\[\d+\]:[^\r\n]+\r\n\s+[^\s\[]/m', $buffer, $matches, PREG_OFFSET_CAPTURE)) { $netbuf = substr($buffer, $matches[0][1]); if (preg_match('/^[^\s]/m', $netbuf, $matches2, PREG_OFFSET_CAPTURE)) { $netbuf = substr($netbuf, 0, $matches2[0][1]); } $netstrs = preg_split('/^'.$matches[1][0].'\[\d+\]:/m', $netbuf, -1, PREG_SPLIT_NO_EMPTY); $devnr = 0; foreach ($netstrs as $netstr) { $netstrls = preg_split('/\r\n/', $netstr, -1, PREG_SPLIT_NO_EMPTY); if (sizeof($netstrls)>1) { $dev = new NetDevice(); foreach ($netstrls as $nr=>$netstrl) { if ($nr === 0) { $name = trim($netstrl); if ($name !== "") { $dev->setName($name); } else { $dev->setName('dev'.$devnr); $devnr++; } } elseif (preg_match('/\[\d+\]:\s+(.+)/', $netstrl, $netinfo)) { $ipaddres = trim($netinfo[1]); if (($ipaddres!="0.0.0.0") && !preg_match('/^fe80::/i', $ipaddres)) $dev->setInfo(($dev->getInfo()?$dev->getInfo().';':'').strtolower($ipaddres)); } } $this->sys->setNetDevices($dev); } } } } /** * Physical memory information and Swap Space information * * @link http://msdn2.microsoft.com/En-US/library/aa394239.aspx * @link http://msdn2.microsoft.com/en-us/library/aa394246.aspx * @return void */ private function _memory() { if (self::$_wmi) { $buffer = $this->_get_Win32_OperatingSystem(); if ($buffer) { $this->sys->setMemTotal($buffer[0]['TotalVisibleMemorySize'] * 1024); $this->sys->setMemFree($buffer[0]['FreePhysicalMemory'] * 1024); $this->sys->setMemUsed($this->sys->getMemTotal() - $this->sys->getMemFree()); } $buffer = self::getWMI(self::$_wmi, 'Win32_PageFileUsage'); foreach ($buffer as $swapdevice) { $dev = new DiskDevice(); $dev->setName("SWAP"); $dev->setMountPoint($swapdevice['Name']); $dev->setTotal($swapdevice['AllocatedBaseSize'] * 1024 * 1024); $dev->setUsed($swapdevice['CurrentUsage'] * 1024 * 1024); $dev->setFree($dev->getTotal() - $dev->getUsed()); $dev->setFsType('swap'); $this->sys->setSwapDevices($dev); } } elseif (($buffer = $this->_get_systeminfo()) && preg_match("/:\s([\d \xFF]+)\sMB\r\n.+:\s([\d \xFF]+)\sMB\r\n.+:\s([\d \xFF]+)\sMB\r\n.+:\s([\d \xFF]+)\sMB\r\n.+\s([\d \xFF]+)\sMB\r\n/m", $buffer, $buffer2)) { // && (preg_match("/:\s([\d \xFF]+)\sMB\r\n.+:\s([\d \xFF]+)\sMB\r\n.+:\s([\d \xFF]+)\sMB\r\n.+:\s([\d \xFF]+)\sMB\r\n.+\s([\d \xFF]+)\sMB\r\n.*:\s+(\S+)\r\n/m", $buffer, $buffer2)) { $this->sys->setMemTotal(preg_replace('/(\s)|(\xFF)/', '', $buffer2[1]) * 1024 * 1024); $this->sys->setMemFree(preg_replace('/(\s)|(\xFF)/', '', $buffer2[2]) * 1024 * 1024); $this->sys->setMemUsed($this->sys->getMemTotal() - $this->sys->getMemFree()); } } /** * filesystem information * * @return void */ private function _filesystems() { $typearray = array('Unknown', 'No Root Directory', 'Removable Disk', 'Local Disk', 'Network Drive', 'Compact Disc', 'RAM Disk'); $floppyarray = array('Unknown', '5 1/4 in.', '3 1/2 in.', '3 1/2 in.', '3 1/2 in.', '3 1/2 in.', '5 1/4 in.', '5 1/4 in.', '5 1/4 in.', '5 1/4 in.', '5 1/4 in.', 'Other', 'HD', '3 1/2 in.', '3 1/2 in.', '5 1/4 in.', '5 1/4 in.', '3 1/2 in.', '3 1/2 in.', '5 1/4 in.', '3 1/2 in.', '3 1/2 in.', '8 in.'); $buffer = self::getWMI(self::$_wmi, 'Win32_LogicalDisk', array('Name', 'Size', 'FreeSpace', 'FileSystem', 'DriveType', 'MediaType')); foreach ($buffer as $filesystem) { $dev = new DiskDevice(); $dev->setMountPoint($filesystem['Name']); if (isset($filesystem['FileSystem'])) { $dev->setFsType($filesystem['FileSystem']); } if ($filesystem['Size'] > 0) { $dev->setTotal($filesystem['Size']); $dev->setFree($filesystem['FreeSpace']); $dev->setUsed($filesystem['Size'] - $filesystem['FreeSpace']); } if ($filesystem['MediaType'] != "" && $filesystem['DriveType'] == 2) { $dev->setName($typearray[$filesystem['DriveType']]." (".$floppyarray[$filesystem['MediaType']].")"); } else { $dev->setName($typearray[$filesystem['DriveType']]); } $this->sys->setDiskDevices($dev); } if (!$buffer && !defined('PSI_EMU_HOSTNAME')) { $letters = array(); if (CommonFunctions::executeProgram('fsutil', 'fsinfo drives 2>nul', $out_value, false) && ($out_value !== '') && preg_match('/^Drives:\s*(.+)$/i', $out_value, $disks)) { $diskarr = preg_split('/ /', $disks[1], -1, PREG_SPLIT_NO_EMPTY); foreach ($diskarr as $disk) if (preg_match('/^(\w):\\\\$/', $disk, $diskletter)) { $letters[] = $diskletter[1]; } } if (count($letters) == 0) for ($letter='A'; $letter!='AA'; $letter++) { $letters[] = $letter; } if ((substr($this->sys->getDistribution(), 0, 7)=="ReactOS") && CommonFunctions::executeProgram('cmd', '/c free 2>nul', $out_value, false)) { foreach ($letters as $letter) if (CommonFunctions::executeProgram('cmd', '/c free '.$letter.': 2>nul', $out_value, false)) { $values = preg_replace('/[^\d\n]/', '', $out_value); if (preg_match('/\n(\d+)\n(\d+)\n(\d+)$/', $values, $out_dig)) { $size = $out_dig[1]; $used = $out_dig[2]; $free = $out_dig[3]; if ($used + $free == $size) { $dev = new DiskDevice(); $dev->setMountPoint($letter.":"); if (CommonFunctions::executeProgram('fsutil', 'fsinfo volumeinfo '.$letter.':\ 2>nul', $out_value, false) && ($out_value !== '') && preg_match('/\nFile System Name\s*:\s*(\S+)/im', $out_value, $fsname)) { $dev->setFsType($fsname[1]); } else { $dev->setFsType('Unknown'); } $dev->setName('Unknown'); $dev->setTotal($size); $dev->setUsed($used); $dev->setFree($free); $this->sys->setDiskDevices($dev); } } } } else { if (substr($this->sys->getDistribution(), 0, 7)=="ReactOS") { $disksep = ':\\'; } else { $disksep = ':'; } foreach ($letters as $letter) { $size = disk_total_space($letter.':\\'); $free = disk_free_space($letter.':\\'); if (($size !== false) && ($free !== false) && ($size >= 0) && ($free >= 0) && ($size >= $free)) { $dev = new DiskDevice(); $dev->setMountPoint($letter.":"); if (CommonFunctions::executeProgram('fsutil', 'fsinfo volumeinfo '.$letter.$disksep.' 2>nul', $out_value, false) && ($out_value !== '') && preg_match('/\nFile System Name\s*:\s*(\S+)/im', $out_value, $fsname)) { $dev->setFsType($fsname[1]); } else { $dev->setFsType('Unknown'); } $dev->setName('Unknown'); $dev->setTotal($size); $dev->setUsed($size - $free); $dev->setFree($free); $this->sys->setDiskDevices($dev); } } } } } /** * get os specific encoding * * @see OS::getEncoding() * * @return string */ public function getEncoding() { return $this->_codepage; } /** * get os specific language * * @see OS::getLanguage() * * @return string */ public function getLanguage() { return $this->_syslang; } public function _processes() { $processes['*'] = 0; if (!defined('PSI_EMU_HOSTNAME') && CommonFunctions::executeProgram('qprocess', '*', $strBuf, false) && (strlen($strBuf) > 0)) { $lines = preg_split('/\n/', $strBuf); $processes['*'] = (count($lines)-1) - 3 ; //correction for process "qprocess *" } if ($processes['*'] <= 0) { $buffer = self::getWMI(self::$_wmi, 'Win32_Process', array('Caption')); $processes['*'] = count($buffer); } $processes[' '] = $processes['*']; $this->sys->setProcesses($processes); } /** * MEM information * * @return void */ private function _meminfo() { $allMems = self::_get_Win32_PhysicalMemory(); if ($allMems) { $reg = false; if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { $arrMems = self::getWMI(self::$_wmi, 'Win32_PhysicalMemoryArray', array('MemoryErrorCorrection')); $reg = (count($arrMems) == 1) && isset($arrMems[0]['MemoryErrorCorrection']) && ($arrMems[0]['MemoryErrorCorrection'] == 6); } foreach ($allMems as $mem) { $dev = new HWDevice(); $name = ''; if (isset($mem['PartNumber']) && !preg_match("/^PartNum\d+$/", $part = $mem['PartNumber']) && ($part != '') && ($part != 'None') && ($part != 'N/A') && ($part != 'NOT AVAILABLE')) { $name = $part; } if (isset($mem['DeviceLocator']) && (($dloc = $mem['DeviceLocator']) != '') && ($dloc != 'None') && ($dloc != 'N/A')) { if ($name != '') { $name .= ' - '.$dloc; } else { $name = $dloc; } } if (isset($mem['BankLabel']) && (($bank = $mem['BankLabel']) != '') && ($bank != 'None') && ($bank != 'N/A')) { if ($name != '') { $name .= ' in '.$bank; } else { $name = 'Physical Memory in '.$bank; } } if ($name != '') { $dev->setName(trim($name)); } else { $dev->setName('Physical Memory'); } if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if (isset($mem['Manufacturer']) && !preg_match("/^([A-F\d]{4}|[A-F\d]{12}|[A-F\d]{16})$/", $manufacturer = $mem['Manufacturer']) && !preg_match("/^Manufacturer\d+$/", $manufacturer) && !preg_match("/^Mfg \d+$/", $manufacturer) && ($manufacturer != '') && ($manufacturer != 'None') && ($manufacturer != 'N/A') && ($manufacturer != 'UNKNOWN')) { $dev->setManufacturer($manufacturer); } if (isset($mem['Capacity'])) { $dev->setCapacity($mem['Capacity']); } $memtype = ''; if (isset($mem['MemoryType']) && (($memval = $mem['MemoryType']) != 0)) { switch ($memval) { // case 0: $memtype = 'Unknown'; break; // case 1: $memtype = 'Other'; break; case 2: $memtype = 'DRAM'; break; case 3: $memtype = 'Synchronous DRAM'; break; case 4: $memtype = 'Cache DRAM'; break; case 5: $memtype = 'EDO'; break; case 6: $memtype = 'EDRAM'; break; case 7: $memtype = 'VRAM'; break; case 8: $memtype = 'SRAM'; break; case 9: $memtype = 'RAM'; break; case 10: $memtype = 'ROM'; break; case 11: $memtype = 'Flash'; break; case 12: $memtype = 'EEPROM'; break; case 13: $memtype = 'FEPROM'; break; case 14: $memtype = 'EPROM'; break; case 15: $memtype = 'CDRAM'; break; case 16: $memtype = '3DRAM'; break; case 17: $memtype = 'SDRAM'; break; case 18: $memtype = 'SGRAM'; break; case 19: $memtype = 'RDRAM'; break; case 20: $memtype = 'DDR'; break; case 21: $memtype = 'DDR2'; break; case 22: $memtype = 'DDR2 FB-DIMM'; break; case 24: $memtype = 'DDR3'; break; case 25: $memtype = 'FBD2'; break; case 26: $memtype = 'DDR4'; } } elseif (isset($mem['SMBIOSMemoryType'])) { switch ($mem['SMBIOSMemoryType']) { // case 0: $memtype = 'Invalid'; break; // case 1: $memtype = 'Other'; break; // case 2: $memtype = 'Unknown'; break; case 3: $memtype = 'DRAM'; break; case 4: $memtype = 'EDRAM'; break; case 5: $memtype = 'VRAM'; break; case 6: $memtype = 'SRAM'; break; case 7: $memtype = 'RAM'; break; case 8: $memtype = 'ROM'; break; case 9: $memtype = 'FLASH'; break; case 10: $memtype = 'EEPROM'; break; case 11: $memtype = 'FEPROM'; break; case 12: $memtype = 'EPROM'; break; case 13: $memtype = 'CDRAM'; break; case 14: $memtype = '3DRAM'; break; case 15: $memtype = 'SDRAM'; break; case 16: $memtype = 'SGRAM'; break; case 17: $memtype = 'RDRAM'; break; case 18: $memtype = 'DDR'; break; case 19: $memtype = 'DDR2'; break; case 20: $memtype = 'DDR2 FB-DIMM'; break; case 24: $memtype = 'DDR3'; break; case 25: $memtype = 'FBD2'; break; case 26: $memtype = 'DDR4'; break; case 27: $memtype = 'LPDDR'; break; case 28: $memtype = 'LPDDR2'; break; case 29: $memtype = 'LPDDR3'; break; case 30: $memtype = 'DDR3'; break; case 31: $memtype = 'FBD2'; break; case 32: $memtype = 'Logical non-volatile device'; break; case 33: $memtype = 'HBM2'; break; case 34: $memtype = 'DDR5'; break; case 35: $memtype = 'LPDDR5'; } } if (isset($mem['Speed']) && (($speed = $mem['Speed']) > 0) && (preg_match('/^(DDR\d*)(.*)/', $memtype, $dr) || preg_match('/^(SDR)AM(.*)/', $memtype, $dr))) { if (isset($mem['MinVoltage']) && isset($mem['MaxVoltage']) && (($minv = $mem['MinVoltage']) > 0) && (($maxv = $mem['MaxVoltage']) > 0) && ($minv < $maxv)) { $lv = 'L'; } else { $lv = ''; } if (isset($dr[2])) { $memtype = $dr[1].$lv.'-'.$speed.' '.$dr[2]; } else { $memtype = $dr[1].$lv.'-'.$speed; } } if (isset($mem['FormFactor'])) { switch ($mem['FormFactor']) { // case 0: $memtype .= ' Unknown'; break; // case 1: $memtype .= ' Other'; break; case 2: $memtype .= ' SIP'; break; case 3: $memtype .= ' DIP'; break; case 4: $memtype .= ' ZIP'; break; case 5: $memtype .= ' SOJ'; break; case 6: $memtype .= ' Proprietary'; break; case 7: $memtype .= ' SIMM'; break; case 8: $memtype .= ' DIMM'; break; case 9: $memtype .= ' TSOPO'; break; case 10: $memtype .= ' PGA'; break; case 11: $memtype .= ' RIM'; break; case 12: $memtype .= ' SODIMM'; break; case 13: $memtype .= ' SRIMM'; break; case 14: $memtype .= ' SMD'; break; case 15: $memtype .= ' SSMP'; break; case 16: $memtype .= ' QFP'; break; case 17: $memtype .= ' TQFP'; break; case 18: $memtype .= ' SOIC'; break; case 19: $memtype .= ' LCC'; break; case 20: $memtype .= ' PLCC'; break; case 21: $memtype .= ' BGA'; break; case 22: $memtype .= ' FPBGA'; break; case 23: $memtype .= ' LGA'; } } if (isset($mem['DataWidth']) && isset($mem['TotalWidth']) && (($dataw = $mem['DataWidth']) > 0) && (($totalw = $mem['TotalWidth']) > 0) && ($dataw < $totalw)) { $memtype .= ' ECC'; } if ($reg) { $memtype .= ' REG'; } if (($memtype = trim($memtype)) != '') { $dev->setProduct($memtype); } if (isset($mem['ConfiguredClockSpeed']) && (($clock = $mem['ConfiguredClockSpeed']) > 0)) { $dev->setSpeed($clock); } if (isset($mem['ConfiguredVoltage']) && (($voltage = $mem['ConfiguredVoltage']) > 0)) { $dev->setVoltage($voltage/1000); } if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && isset($mem['SerialNumber']) && !preg_match("/^SerNum\d+$/", $serial = $mem['SerialNumber']) && ($serial != '') && ($serial != 'None')) { $dev->setSerial($serial); } } $this->sys->setMemDevices($dev); } } } /** * get the information * * @see PSI_Interface_OS::build() * * @return void */ public function build() { $this->_distro(); // share getDistribution() if (substr($this->sys->getDistribution(), 0, 7)=="ReactOS") { $this->error->addWarning("The ReactOS version of phpSysInfo is a work in progress, some things currently don't work"); } if (!$this->blockname || $this->blockname==='vitals') { $this->_hostname(); $this->_users(); $this->_uptime(); $this->_loadavg(); $this->_processes(); } if (!$this->blockname || $this->blockname==='hardware') { $this->_machine(); $this->_cpuinfo(); $this->_virtualizer(); $this->_meminfo(); $this->_hardware(); } if (!$this->blockname || $this->blockname==='memory') { $this->_memory(); } if (!$this->blockname || $this->blockname==='filesystem') { $this->_filesystems(); } if (!$this->blockname || $this->blockname==='network') { $this->_network(); } } } phpsysinfo-3.4.4/includes/output/000077500000000000000000000000001467431054600171045ustar00rootroot00000000000000phpsysinfo-3.4.4/includes/output/class.Output.inc.php000066400000000000000000000030111467431054600227640ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.Output.inc.php 569 2012-04-16 06:08:18Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * basic output functions for all output formats * * @category PHP * @package PSI_Output * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ abstract class Output { /** * error object for logging errors * * @var PSI_Error */ protected $error; /** * call the parent constructor and check for needed extensions */ public function __construct() { $this->error = PSI_Error::singleton(); $this->_checkConfig(); CommonFunctions::checkForExtensions(); } /** * read the config file and check for existence * * @return void */ private function _checkConfig() { include_once PSI_APP_ROOT.'/read_config.php'; if ($this->error->errorsExist()) { $this->error->errorsAsXML(); } } } phpsysinfo-3.4.4/includes/output/class.Template.inc.php000066400000000000000000000041451467431054600232500ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.Output.inc.php 315 2009-09-02 15:48:31Z bigmichi1 $ * @link http://phpsysinfo.sourceforge.net */ /** * basic output functions for all output formats * * @category PHP * @package PSI_Output * @author Damien Roth * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Template { /** * Vars used in the template * * @var array */ private $_vars; /** * Template file * * @var string */ private $_file; /** * Constructor * * @param String $file the template file name */ public function __construct($file=null) { $this->_file = $file; $this->_vars = array(); } /** * Set a template variable. * * @param string $name variable name * @param string|array|Template $value variable value */ public function set($name, $value) { $this->_vars[$name] = is_object($value) ? $value->fetch() : $value; } /** * Open, parse, and return the template file. * * @param string $file * * @return string */ public function fetch($file=null) { if (!$file) { $file = $this->_file; } // Extract the vars to local namespace extract($this->_vars); // Start output buffering ob_start(); include(PSI_APP_ROOT.$file); // Get the contents of the buffer $contents = ob_get_contents(); // End buffering and discard ob_end_clean(); return $contents; } } phpsysinfo-3.4.4/includes/output/class.Webpage.inc.php000066400000000000000000000174311467431054600230510ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.Webpage.inc.php 661 2012-08-27 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * generate the dynamic webpage * * @category PHP * @package PSI_Web * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Webpage extends Output implements PSI_Interface_Output { /** * configured indexname * * @var string */ private $_indexname; /** * configured language * * @var string */ private $_language; /** * configured template * * @var string */ private $_template; /** * all available templates * * @var array */ private $_templates = array(); /** * configured bootstrap template * * @var string */ private $_bootstrap_template; /** * all available bootstrap templates * * @var array */ private $_bootstrap_templates = array(); /** * all available languages * * @var array */ private $_languages = array(); /** * configured show picklist language * * @var boolean */ private $_pick_language; /** * configured show picklist template * * @var boolean */ private $_pick_template; /** * check for all extensions that are needed, initialize needed vars and read phpsysinfo.ini * @param string $indexname */ public function __construct($indexname="dynamic") { $this->_indexname = $indexname; parent::__construct(); $this->_getTemplateList(); $this->_getLanguageList(); } /** * checking phpsysinfo.ini setting for template, if not supportet set phpsysinfo.css as default * checking phpsysinfo.ini setting for language, if not supported set en as default * * @return void */ private function _checkTemplateLanguage() { if (!defined("PSI_DEFAULT_TEMPLATE") || (($this->_template = strtolower(trim(PSI_DEFAULT_TEMPLATE))) == "") || !file_exists(PSI_APP_ROOT.'/templates/'.$this->_template.".css")) { $this->_template = 'phpsysinfo'; } if (!defined("PSI_DEFAULT_BOOTSTRAP_TEMPLATE") || (($this->_bootstrap_template = strtolower(trim(PSI_DEFAULT_BOOTSTRAP_TEMPLATE))) == "") || !file_exists(PSI_APP_ROOT.'/templates/'.$this->_bootstrap_template."_bootstrap.css")) { $this->_bootstrap_template = 'phpsysinfo'; } $this->_pick_template = !defined("PSI_SHOW_PICKLIST_TEMPLATE") || (PSI_SHOW_PICKLIST_TEMPLATE !== false); if (!defined("PSI_DEFAULT_LANG") || (($this->_language = strtolower(trim(PSI_DEFAULT_LANG))) == "") || !file_exists(PSI_APP_ROOT.'/language/'.$this->_language.".xml")) { $this->_language = 'en'; } $this->_pick_language = !defined("PSI_SHOW_PICKLIST_LANG") || (PSI_SHOW_PICKLIST_LANG !== false); } /** * get all available tamplates and store them in internal array * * @return void */ private function _getTemplateList() { $dirlist = CommonFunctions::gdc(PSI_APP_ROOT.'/templates/'); sort($dirlist); foreach ($dirlist as $file) { $tpl_ext = substr($file, strlen($file) - 4); $tpl_name = substr($file, 0, strlen($file) - 4); if ($tpl_ext === ".css") { if (preg_match("/(\S+)_bootstrap$/", $tpl_name, $ar_buf)) { array_push($this->_bootstrap_templates, $ar_buf[1]); } else { array_push($this->_templates, $tpl_name); } } } } /** * get all available translations and store them in internal array * * @return void */ private function _getLanguageList() { $dirlist = CommonFunctions::gdc(PSI_APP_ROOT.'/language/'); sort($dirlist); foreach ($dirlist as $file) { $lang_ext = strtolower(substr($file, strlen($file) - 4)); $lang_name = strtolower(substr($file, 0, strlen($file) - 4)); if ($lang_ext == ".xml") { array_push($this->_languages, $lang_name); } } } /** * render the page * * @return void */ public function run() { $this->_checkTemplateLanguage(); $tpl = new Template("/templates/html/index_".$this->_indexname.".html"); $tpl->set("template", $this->_template); $tpl->set("templates", $this->_templates); $tpl->set("bootstraptemplate", $this->_bootstrap_template); $tpl->set("bootstraptemplates", $this->_bootstrap_templates); $tpl->set("picktemplate", $this->_pick_template); $tpl->set("language", $this->_language); $tpl->set("languages", $this->_languages); $tpl->set("picklanguage", $this->_pick_language); $tpl->set("showCPUListExpanded", defined('PSI_SHOW_CPULIST_EXPANDED') ? (PSI_SHOW_CPULIST_EXPANDED ? 'true' : 'false') : 'true'); $tpl->set("showCPUInfoExpanded", defined('PSI_SHOW_CPUINFO_EXPANDED') ? (PSI_SHOW_CPUINFO_EXPANDED ? 'true' : 'false') : 'false'); $tpl->set("showNetworkInfosExpanded", defined('PSI_SHOW_NETWORK_INFOS_EXPANDED') ? (PSI_SHOW_NETWORK_INFOS_EXPANDED ? 'true' : 'false') : 'false'); $tpl->set("showMemoryInfosExpanded", defined('PSI_SHOW_MEMORY_INFOS_EXPANDED') ? (PSI_SHOW_MEMORY_INFOS_EXPANDED ? 'true' : 'false') : 'false'); $tpl->set("showNetworkActiveSpeed", defined('PSI_SHOW_NETWORK_ACTIVE_SPEED') ? (PSI_SHOW_NETWORK_ACTIVE_SPEED ? ((strtolower(PSI_SHOW_NETWORK_ACTIVE_SPEED) === 'bps') ? 'bps' :'true') : 'false') : 'false'); $tpl->set("showCPULoadCompact", defined('PSI_LOAD_BAR') ? ((strtolower(PSI_LOAD_BAR) === 'compact') ? 'true' :'false') : 'false'); $tpl->set("hideBootstrapLoader", defined('PSI_HIDE_BOOTSTRAP_LOADER') ? (PSI_HIDE_BOOTSTRAP_LOADER ? 'true' : 'false') : 'false'); $tpl->set("increaseWidth", defined('PSI_INCREASE_WIDTH') ? ((intval(PSI_INCREASE_WIDTH)>0) ? intval(PSI_INCREASE_WIDTH) : 0) : 0); $tpl->set("hideTotals", defined('PSI_HIDE_TOTALS') ? (PSI_HIDE_TOTALS ? 'true' : 'false') : 'false'); if (defined('PSI_BLOCKS')) { if (is_string(PSI_BLOCKS)) { if (preg_match(ARRAY_EXP, PSI_BLOCKS)) { $blocks = eval(strtolower(PSI_BLOCKS)); } else { $blocks = array(strtolower(PSI_BLOCKS)); } $blocklist = ''; $validblocks = array('vitals','hardware','memory','filesystem','network','voltage','current','temperature','fans','power','other','ups'); foreach ($blocks as $block) { if (in_array($block, $validblocks)) { if (empty($blocklist)) { $blocklist = $block; } else { $blocklist .= ','.$block; } } } if (!empty($blocklist)) { $tpl->set("blocks", $blocklist); } } elseif (PSI_BLOCKS) { $tpl->set("blocks", 'true'); } } else { $tpl->set("blocks", 'true'); } echo $tpl->fetch(); } } phpsysinfo-3.4.4/includes/output/class.WebpageXML.inc.php000066400000000000000000000300511467431054600234230ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.WebpageXML.inc.php 661 2012-08-27 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * class for xml output * * @category PHP * @package PSI_XML * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class WebpageXML extends Output implements PSI_Interface_Output { /** * xml object that holds the generated xml * * @var XML */ private $_xml; /** * complete xml * * @var boolean */ private $_completeXML = false; /** * name of the plugin * * @var string */ private $_pluginName = null; /** * name of the block * * @var string */ private $_blockName = null; /** * generate the output * * @return void */ private function _prepare() { if ($this->_pluginName === null) { if ((PSI_OS == 'Linux') && defined('PSI_SSH_HOSTNAME') && defined('PSI_SSH_USER') && defined('PSI_SSH_PASSWORD')) { $fgthost = preg_split("/:/", PSI_SSH_HOSTNAME, -1, PREG_SPLIT_NO_EMPTY); define('PSI_EMU_HOSTNAME', trim($fgthost[0])); if (isset($fgthost[1]) && (trim($fgthost[1] !== ''))) { define('PSI_EMU_PORT', trim($fgthost[1])); } else { define('PSI_EMU_PORT', 22); } define('PSI_EMU_USER', PSI_SSH_USER); define('PSI_EMU_PASSWORD', PSI_SSH_PASSWORD); if (defined('PSI_SSH_ADD_PATHS')) { define('PSI_EMU_ADD_PATHS', PSI_SSH_ADD_PATHS); } if (defined('PSI_SSH_ADD_OPTIONS')) { define('PSI_EMU_ADD_OPTIONS', PSI_SSH_ADD_OPTIONS); } if (!file_exists(PSI_APP_ROOT.'/includes/os/class.Linux.inc.php')) { $this->error->addError("file_exists(class.Linux.inc.php)", "Linux is not currently supported"); } } elseif (((PSI_OS == 'WINNT') || (PSI_OS == 'Linux')) && defined('PSI_WMI_HOSTNAME')) { define('PSI_EMU_HOSTNAME', PSI_WMI_HOSTNAME); if (defined('PSI_WMI_USER') && defined('PSI_WMI_PASSWORD')) { define('PSI_EMU_USER', PSI_WMI_USER); define('PSI_EMU_PASSWORD', PSI_WMI_PASSWORD); } else { define('PSI_EMU_USER', null); define('PSI_EMU_PASSWORD', null); } if (!file_exists(PSI_APP_ROOT.'/includes/os/class.WINNT.inc.php')) { $this->error->addError("file_exists(class.WINNT.inc.php)", "WINNT is not currently supported"); } } else { // Figure out which OS we are running on, and detect support if (!file_exists(PSI_APP_ROOT.'/includes/os/class.'.PSI_OS.'.inc.php')) { $this->error->addError("file_exists(class.".PSI_OS.".inc.php)", PSI_OS." is not currently supported"); } } if (!defined('PSI_MBINFO') && (!$this->_blockName || in_array($this->_blockName, array('mbinfo','voltage','current','temperature','fans','power','other')))) { // check if there is a valid sensor configuration in phpsysinfo.ini $foundsp = array(); if (defined('PSI_SENSOR_PROGRAM') && is_string(PSI_SENSOR_PROGRAM)) { if (preg_match(ARRAY_EXP, PSI_SENSOR_PROGRAM)) { $sensorprograms = eval(strtolower(PSI_SENSOR_PROGRAM)); } else { $sensorprograms = array(strtolower(PSI_SENSOR_PROGRAM)); } foreach ($sensorprograms as $sensorprogram) { if (!file_exists(PSI_APP_ROOT.'/includes/mb/class.'.$sensorprogram.'.inc.php')) { $this->error->addError("file_exists(class.".htmlspecialchars($sensorprogram).".inc.php)", "specified sensor program is not supported"); } else { $foundsp[] = $sensorprogram; } } } /** * motherboard information * * @var string serialized array */ define('PSI_MBINFO', serialize($foundsp)); } if (!defined('PSI_UPSINFO') && (!$this->_blockName || ($this->_blockName==='ups'))) { // check if there is a valid ups configuration in phpsysinfo.ini $foundup = array(); if (defined('PSI_UPS_PROGRAM') && is_string(PSI_UPS_PROGRAM)) { if (preg_match(ARRAY_EXP, PSI_UPS_PROGRAM)) { $upsprograms = eval(strtolower(PSI_UPS_PROGRAM)); } else { $upsprograms = array(strtolower(PSI_UPS_PROGRAM)); } foreach ($upsprograms as $upsprogram) { if (!file_exists(PSI_APP_ROOT.'/includes/ups/class.'.$upsprogram.'.inc.php')) { $this->error->addError("file_exists(class.".htmlspecialchars($upsprogram).".inc.php)", "specified UPS program is not supported"); } else { $foundup[] = $upsprogram; } } } /** * ups information * * @var string serialized array */ define('PSI_UPSINFO', serialize($foundup)); } // if there are errors stop executing the script until they are fixed if ($this->error->errorsExist()) { $this->error->errorsAsXML(); } // Create the XML $this->_xml = new XML($this->_completeXML, '', $this->_blockName); } else { if ((PSI_OS == 'WINNT') || (PSI_OS == 'Linux')) { $plugname = strtoupper(trim($this->_pluginName)); if ((PSI_OS == 'Linux') && defined('PSI_PLUGIN_'.$plugname.'_SSH_HOSTNAME') && defined('PSI_PLUGIN_'.$plugname.'_SSH_USER') && defined('PSI_PLUGIN_'.$plugname.'_SSH_PASSWORD')) { $fgthost = preg_split("/:/", constant('PSI_PLUGIN_'.$plugname.'_SSH_HOSTNAME'), -1, PREG_SPLIT_NO_EMPTY); define('PSI_EMU_HOSTNAME', trim($fgthost[0])); if (isset($fgthost[1]) && (trim($fgthost[1] !== ''))) { define('PSI_EMU_PORT', trim($fgthost[1])); } else { define('PSI_EMU_PORT', 22); } define('PSI_EMU_USER', constant('PSI_PLUGIN_'.$plugname.'_SSH_USER')); define('PSI_EMU_PASSWORD', constant('PSI_PLUGIN_'.$plugname.'_SSH_PASSWORD')); if (defined('PSI_PLUGIN_'.$plugname.'_SSH_ADD_PATHS')) { define('PSI_EMU_ADD_PATHS', constant('PSI_PLUGIN_'.$plugname.'_SSH_ADD_PATHS')); } if (defined('PSI_PLUGIN_'.$plugname.'_SSH_ADD_OPTIONS')) { define('PSI_EMU_ADD_OPTIONS', constant('PSI_PLUGIN_'.$plugname.'_SSH_ADD_OPTIONS')); } } elseif (defined('PSI_PLUGIN_'.$plugname.'_WMI_HOSTNAME')) { define('PSI_EMU_HOSTNAME', constant('PSI_PLUGIN_'.$plugname.'_WMI_HOSTNAME')); if (defined('PSI_PLUGIN_'.$plugname.'_WMI_USER') && defined('PSI_PLUGIN_'.$plugname.'_WMI_PASSWORD')) { define('PSI_EMU_USER', constant('PSI_PLUGIN_'.$plugname.'_WMI_USER')); define('PSI_EMU_PASSWORD', constant('PSI_PLUGIN_'.$plugname.'_WMI_PASSWORD')); } else { define('PSI_EMU_USER', null); define('PSI_EMU_PASSWORD', null); } } elseif ((PSI_OS == 'Linux') && defined('PSI_SSH_HOSTNAME') && defined('PSI_SSH_USER') && defined('PSI_SSH_PASSWORD')) { $fgthost = preg_split("/:/", PSI_SSH_HOSTNAME, -1, PREG_SPLIT_NO_EMPTY); define('PSI_EMU_HOSTNAME', trim($fgthost[0])); if (isset($fgthost[1]) && (trim($fgthost[1] !== ''))) { define('PSI_EMU_PORT', trim($fgthost[1])); } else { define('PSI_EMU_PORT', 22); } define('PSI_EMU_USER', PSI_SSH_USER); define('PSI_EMU_PASSWORD', PSI_SSH_PASSWORD); if (defined('PSI_SSH_ADD_PATHS')) { define('PSI_EMU_ADD_PATHS', PSI_SSH_ADD_PATHS); } if (defined('PSI_SSH_ADD_OPTIONS')) { define('PSI_EMU_ADD_OPTIONS', PSI_SSH_ADD_OPTIONS); } } elseif (defined('PSI_WMI_HOSTNAME')) { define('PSI_EMU_HOSTNAME', PSI_WMI_HOSTNAME); if (defined('PSI_WMI_USER') && defined('PSI_WMI_PASSWORD')) { define('PSI_EMU_USER', PSI_WMI_USER); define('PSI_EMU_PASSWORD', PSI_WMI_PASSWORD); } else { define('PSI_EMU_USER', null); define('PSI_EMU_PASSWORD', null); } } } // Create the XML $this->_xml = new XML(false, $this->_pluginName); } } /** * render the output * * @return void */ public function run() { header('Cache-Control: no-cache, must-revalidate'); header('Content-Type: text/xml'); $xml = $this->_xml->getXml(); echo $xml->asXML(); } /** * get XML as pure string * * @return string */ public function getXMLString() { $xml = $this->_xml->getXml(); return $xml->asXML(); } /** * get json string * * @return string */ public function getJsonString() { if (defined('PSI_JSON_ISSUE') && (PSI_JSON_ISSUE)) { return json_encode(simplexml_load_string(str_replace(">", ">\n", $this->getXMLString()))); // solving json_encode issue } else { return json_encode(simplexml_load_string($this->getXMLString())); } } /** * get array * * @return array */ public function getArray() { return json_decode($this->getJsonString()); } /** * set parameters for the XML generation process * * @param string $plugin name of the plugin, block or 'complete' for all plugins * * @return void */ public function __construct($plugin = "") { parent::__construct(); if (is_string($plugin) && ($plugin !== "")) { if (preg_match('/[^A-Za-z]/', $plugin)) { $this->_blockName = ' '; // mask wrong plugin name } elseif (($plugin = strtolower($plugin)) === "complete") { $this->_completeXML = true; } elseif (in_array($plugin, array('vitals','hardware','memory','filesystem','network','mbinfo','voltage','current','temperature','fans','power','other','ups'))) { $this->_blockName = $plugin; } elseif (in_array($plugin, CommonFunctions::getPlugins())) { $this->_pluginName = $plugin; } else { $this->_blockName = ' '; // disable all blocks } } $this->_prepare(); } } phpsysinfo-3.4.4/includes/output/class.WebpageXSLT.inc.php000066400000000000000000000032101467431054600235520ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.WebpageXSLT.inc.php 569 2012-04-16 06:08:18Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * generate a static webpage with xslt trasformation of the xml * * @category PHP * @package PSI_Web * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class WebpageXSLT extends WebpageXML implements PSI_Interface_Output { /** * call the parent constructor */ public function __construct() { parent::__construct(); } /** * generate the static page * * @return void */ public function run() { CommonFunctions::checkForExtensions(array('xsl')); $xmlfile = $this->getXMLString(); $xslfile = "phpsysinfo.xslt"; $domxml = new DOMDocument(); $domxml->loadXML($xmlfile); $domxsl = new DOMDocument(); $domxsl->load($xslfile); $xsltproc = new XSLTProcessor; $xsltproc->importStyleSheet($domxsl); header('Cache-Control: no-cache, must-revalidate'); echo $xsltproc->transformToXML($domxml); } } phpsysinfo-3.4.4/includes/plugin/000077500000000000000000000000001467431054600170425ustar00rootroot00000000000000phpsysinfo-3.4.4/includes/plugin/class.PSI_Plugin.inc.php000066400000000000000000000131371467431054600234050ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.PSI_Plugin.inc.php 661 2012-08-27 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * basic functions to get a plugin working in phpSysinfo * every plugin must implement this abstract class to be a valid plugin, main tasks * of this class are reading the configuration file and check for the required files * (*.js, lang/en.xml) to get everything working, if we have errors here we log them * to our global error object * * @category PHP * @package PSI_Plugin * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ abstract class PSI_Plugin implements PSI_Interface_Plugin { /** * name of the plugin (classname) * * @var string */ private $_plugin_name = ""; /** * full directory path of the plugin * * @var string */ private $_plugin_base = ""; /** * global object for error handling * * @var Error */ protected $global_error = ""; /** * xml tamplate with header * * @var SimpleXMLExtended */ protected $xml; /** * build the global Error object, read the configuration and check if all files are available * for a minimalistic function of the plugin * * @param string $plugin_name name of the plugin * @param string $enc target encoding * @return void */ public function __construct($plugin_name, $enc) { $this->global_error = PSI_Error::Singleton(); if (trim($plugin_name) != "") { $this->_plugin_name = $plugin_name; $this->_plugin_base = PSI_APP_ROOT."/plugins/".strtolower($this->_plugin_name)."/"; $this->_checkfiles(); $this->_getconfig(); } else { $this->global_error->addError("__construct()", "Parent constructor called without Plugin-Name!"); } $this->_createXml($enc); } /** * read the plugin configuration file, if we have one in the plugin directory * * @return void */ private function _getconfig() { if ((strtoupper($this->_plugin_name) !== 'DISKLOAD') && (!defined('PSI_PLUGIN_'.strtoupper($this->_plugin_name).'_ACCESS')) && (!defined('PSI_PLUGIN_'.strtoupper($this->_plugin_name).'_FILE')) && (!defined('PSI_PLUGIN_'.strtoupper($this->_plugin_name).'_SHOW_SERIAL'))) { $this->global_error->addError("phpsysinfo.ini", "Config for plugin ".$this->_plugin_name." not exist!"); } } /** * check if there is a default translation file availabe and also the required js file for * appending the content of the plugin to the main webpage * * @return void */ private function _checkfiles() { if (!file_exists($this->_plugin_base."js/".strtolower($this->_plugin_name).".js")) { $this->global_error->addError("file_exists(".$this->_plugin_base."js/".strtolower($this->_plugin_name).".js)", "JS-File for Plugin '".$this->_plugin_name."' is missing!"); } else { if (!is_readable($this->_plugin_base."js/".strtolower($this->_plugin_name).".js")) { $this->global_error->addError("is_readable(".$this->_plugin_base."js/".strtolower($this->_plugin_name).".js)", "JS-File for Plugin '".$this->_plugin_name."' is not readable but present!"); } } if (!file_exists($this->_plugin_base."lang/en.xml")) { $this->global_error->addError("file_exists(".$this->_plugin_base."lang/en.xml)", "At least an english translation must exist for the plugin!"); } else { if (!is_readable($this->_plugin_base."lang/en.xml")) { $this->global_error->addError("is_readable(".$this->_plugin_base."js/".$this->_plugin_name.".js)", "The english translation can't be read but is present!"); } } } /** * create the xml template where plugin information are added to * * @param string $enc target encoding * * @return void */ private function _createXml($enc) { $dom = new DOMDocument('1.0', 'UTF-8'); $root = $dom->createElement("Plugin_".$this->_plugin_name); $dom->appendChild($root); $this->xml = new SimpleXMLExtended(simplexml_import_dom($dom), $enc); $plugname = strtoupper($this->_plugin_name); if ((PSI_OS == 'Linux') && defined('PSI_PLUGIN_'.$plugname.'_SSH_HOSTNAME') && (!defined('PSI_SSH_HOSTNAME') || (PSI_SSH_HOSTNAME != constant('PSI_PLUGIN_'.strtoupper($this->_plugin_name).'_SSH_HOSTNAME')))) { $this->xml->addAttribute('Hostname', constant('PSI_PLUGIN_'.strtoupper($this->_plugin_name).'_SSH_HOSTNAME')); } elseif (((PSI_OS == 'WINNT') || (PSI_OS == 'Linux')) && defined('PSI_PLUGIN_'.$plugname.'_WMI_HOSTNAME') && (!defined('PSI_WMI_HOSTNAME') || (PSI_WMI_HOSTNAME != constant('PSI_PLUGIN_'.strtoupper($this->_plugin_name).'_WMI_HOSTNAME')))) { $this->xml->addAttribute('Hostname', constant('PSI_PLUGIN_'.strtoupper($this->_plugin_name).'_WMI_HOSTNAME')); } } } phpsysinfo-3.4.4/includes/to/000077500000000000000000000000001467431054600161665ustar00rootroot00000000000000phpsysinfo-3.4.4/includes/to/class.MBInfo.inc.php000066400000000000000000000124371467431054600216740ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.MBInfo.inc.php 253 2009-06-17 13:07:50Z bigmichi1 $ * @link http://phpsysinfo.sourceforge.net */ /** * MBInfo TO class * * @category PHP * @package PSI_TO * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class MBInfo { /** * array with SensorDevices for temperatures * * @see SensorDevice * * @var array */ private $_mbTemp = array(); /** * array with SensorDevices for fans * * @see SensorDevice * * @var array */ private $_mbFan = array(); /** * array with SensorDevices for voltages * * @see SensorDevice * * @var array */ private $_mbVolt = array(); /** * array with SensorDevices for power * * @see SensorDevice * * @var array */ private $_mbPower = array(); /** * array with SensorDevices for apmers * * @see SensorDevice * * @var array */ private $_mbCurrent = array(); /** * array with SensorDevices for other * * @see SensorDevice * * @var array */ private $_mbOther = array(); /** * Returns $_mbFan. * * @see System::$_mbFan * * @return array */ public function getMbFan() { if (defined('PSI_SORT_SENSORS_LIST') && PSI_SORT_SENSORS_LIST) { usort($this->_mbFan, array('CommonFunctions', 'name_natural_compare')); } return $this->_mbFan; } /** * Sets $_mbFan. * * @param SensorDevice $mbFan fan device * * @see System::$_mbFan * * @return void */ public function setMbFan($mbFan) { array_push($this->_mbFan, $mbFan); } /** * Returns $_mbTemp. * * @see System::$_mbTemp * * @return array */ public function getMbTemp() { if (defined('PSI_SORT_SENSORS_LIST') && PSI_SORT_SENSORS_LIST) { usort($this->_mbTemp, array('CommonFunctions', 'name_natural_compare')); } return $this->_mbTemp; } /** * Sets $_mbTemp. * * @param SensorDevice $mbTemp temp device * * @see System::$_mbTemp * * @return void */ public function setMbTemp($mbTemp) { array_push($this->_mbTemp, $mbTemp); } /** * Returns $_mbVolt. * * @see System::$_mbVolt * * @return array */ public function getMbVolt() { if (defined('PSI_SORT_SENSORS_LIST') && PSI_SORT_SENSORS_LIST) { usort($this->_mbVolt, array('CommonFunctions', 'name_natural_compare')); } return $this->_mbVolt; } /** * Sets $_mbVolt. * * @param SensorDevice $mbVolt voltage device * * @see System::$_mbVolt * * @return void */ public function setMbVolt($mbVolt) { array_push($this->_mbVolt, $mbVolt); } /** * Returns $_mbPower. * * @see System::$_mbPower * * @return array */ public function getMbPower() { if (defined('PSI_SORT_SENSORS_LIST') && PSI_SORT_SENSORS_LIST) { usort($this->_mbPower, array('CommonFunctions', 'name_natural_compare')); } return $this->_mbPower; } /** * Sets $_mbPower. * * @param SensorDevice $mbPower power device * * @see System::$_mbPower * * @return void */ public function setMbPower($mbPower) { array_push($this->_mbPower, $mbPower); } /** * Returns $_mbCurrent. * * @see System::$_mbCurrent * * @return array */ public function getMbCurrent() { if (defined('PSI_SORT_SENSORS_LIST') && PSI_SORT_SENSORS_LIST) { usort($this->_mbCurrent, array('CommonFunctions', 'name_natural_compare')); } return $this->_mbCurrent; } /** * Sets $_mbCurrent. * * @param SensorDevice $mbCurrent current device * * @see System::$_mbCurrent * * @return void */ public function setMbCurrent($mbCurrent) { array_push($this->_mbCurrent, $mbCurrent); } /** * Returns $_mbOther. * * @see System::$_mbOther * * @return array */ public function getMbOther() { if (defined('PSI_SORT_SENSORS_LIST') && PSI_SORT_SENSORS_LIST) { usort($this->_mbOther, array('CommonFunctions', 'name_natural_compare')); } return $this->_mbOther; } /** * Sets $_mbOther. * * @param SensorDevice $mbOther other device * * @see System::$_mbOther * * @return void */ public function setMbOther($mbOther) { array_push($this->_mbOther, $mbOther); } } phpsysinfo-3.4.4/includes/to/class.System.inc.php000066400000000000000000000613761467431054600220540ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.System.inc.php 255 2009-06-17 13:39:41Z bigmichi1 $ * @link http://phpsysinfo.sourceforge.net */ /** * System TO class * * @category PHP * @package PSI_TO * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class System { /** * name of the host where phpSysInfo runs * * @var string */ private $_hostname = "localhost"; /** * ip of the host where phpSysInfo runs * * @var string */ private $_ip = "127.0.0.1"; /** * detailed information about the kernel * * @var string */ private $_kernel = "Unknown"; /** * name of the distribution * * @var string */ private $_distribution = "Unknown"; /** * icon of the distribution (must be available in phpSysInfo) * * @var string */ private $_distributionIcon = "unknown.png"; /** * detailed Information about the machine name * * @var string */ private $_machine = ""; /** * time in sec how long the system is running * * @var int */ private $_uptime = 0; /** * count of users that are currently logged in * * @var int */ private $_users = 0; /** * load of the system * * @var string */ private $_load = ""; /** * load of the system in percent (all cpus, if more than one) * * @var int */ private $_loadPercent = null; /** * array with cpu devices * * @see CpuDevice * * @var array */ private $_cpus = array(); /** * array with network devices * * @see NetDevice * * @var array */ private $_netDevices = array(); /** * array with pci devices * * @see HWDevice * * @var array */ private $_pciDevices = array(); /** * array with ide devices * * @see HWDevice * * @var array */ private $_ideDevices = array(); /** * array with scsi devices * * @see HWDevice * * @var array */ private $_scsiDevices = array(); /** * array with usb devices * * @see HWDevice * * @var array */ private $_usbDevices = array(); /** * array with thunderbolt devices * * @see HWDevice * * @var array */ private $_tbDevices = array(); /** * array with I2C devices * * @see HWDevice * * @var array */ private $_i2cDevices = array(); /** * array with NVMe devices * * @see HWDevice * * @var array */ private $_nvmeDevices = array(); /** * array with Mem devices * * @see HWDevice * * @var array */ private $_memDevices = array(); /** * array with disk devices * * @see DiskDevice * * @var array */ private $_diskDevices = array(); /** * free memory in bytes * * @var int */ private $_memFree = 0; /** * total memory in bytes * * @var int */ private $_memTotal = 0; /** * used memory in bytes * * @var int */ private $_memUsed = 0; /** * used memory by applications in bytes * * @var int */ private $_memApplication = null; /** * used memory for buffers in bytes * * @var int */ private $_memBuffer = null; /** * used memory for cache in bytes * * @var int */ private $_memCache = null; /** * array with swap devices * * @see DiskDevice * * @var array */ private $_swapDevices = array(); /** * array of types of processes * * @var array */ private $_processes = array(); /** * array with Virtualizer information * * @var array */ private $_virtualizer = array(); /** * operating system type * * @var string */ private $_OS = ""; /** * remove duplicate Entries and Count * * @param array $arrDev list of HWDevices * * @see HWDevice * * @return array */ public static function removeDupsAndCount($arrDev) { $result = array(); foreach ($arrDev as $dev) { if (count($result) === 0) { array_push($result, $dev); } else { $found = false; foreach ($result as $tmp) { if ($dev->equals($tmp)) { $tmp->setCount($tmp->getCount() + 1); $found = true; break; } } if (!$found) { array_push($result, $dev); } } } return $result; } /** * return percent of used memory * * @see System::_memUsed * @see System::_memTotal * * @return int */ public function getMemPercentUsed() { if ($this->_memTotal > 0) { return round($this->_memUsed / $this->_memTotal * 100); } else { return 0; } } /** * return percent of used memory for applications * * @see System::_memApplication * @see System::_memTotal * * @return int */ public function getMemPercentApplication() { if ($this->_memApplication !== null) { if (($this->_memApplication > 0) && ($this->_memTotal > 0)) { return round($this->_memApplication / $this->_memTotal * 100); } else { return 0; } } else { return null; } } /** * return percent of used memory for cache * * @see System::_memCache * @see System::_memTotal * * @return int */ public function getMemPercentCache() { if ($this->_memCache !== null) { if (($this->_memCache > 0) && ($this->_memTotal > 0)) { if (($this->_memApplication !== null) && ($this->_memApplication > 0)) { return round(($this->_memCache + $this->_memApplication) / $this->_memTotal * 100) - $this->getMemPercentApplication(); } else { return round($this->_memCache / $this->_memTotal * 100); } } else { return 0; } } else { return null; } } /** * return percent of used memory for buffer * * @see System::_memBuffer * @see System::_memTotal * * @return int */ public function getMemPercentBuffer() { if ($this->_memBuffer !== null) { if (($this->_memBuffer > 0) && ($this->_memTotal > 0)) { if (($this->_memCache !== null) && ($this->_memCache > 0)) { if (($this->_memApplication !== null) && ($this->_memApplication > 0)) { return round(($this->_memBuffer + $this->_memApplication + $this->_memCache) / $this->_memTotal * 100) - $this->getMemPercentApplication() - $this->getMemPercentCache(); } else { return round(($this->_memBuffer + $this->_memCache) / $this->_memTotal * 100) - $this->getMemPercentCache(); } } elseif (($this->_memApplication !== null) && ($this->_memApplication > 0)) { return round(($this->_memBuffer + $this->_memApplication) / $this->_memTotal * 100) - $this->getMemPercentApplication(); } else { return round($this->_memBuffer / $this->_memTotal * 100); } } else { return 0; } } else { return null; } } /** * Returns total free swap space * * @see System::_swapDevices * @see DiskDevice::getFree() * * @return int */ public function getSwapFree() { if (count($this->_swapDevices) > 0) { $free = 0; foreach ($this->_swapDevices as $dev) { $free += $dev->getFree(); } return $free; } return null; } /** * Returns total swap space * * @see System::_swapDevices * @see DiskDevice::getTotal() * * @return int */ public function getSwapTotal() { if (count($this->_swapDevices) > 0) { $total = 0; foreach ($this->_swapDevices as $dev) { $total += $dev->getTotal(); } return $total; } else { return null; } } /** * Returns total used swap space * * @see System::_swapDevices * @see DiskDevice::getUsed() * * @return int */ public function getSwapUsed() { if (count($this->_swapDevices) > 0) { $used = 0; foreach ($this->_swapDevices as $dev) { $used += $dev->getUsed(); } return $used; } else { return null; } } /** * return percent of total swap space used * * @see System::getSwapUsed() * @see System::getSwapTotal() * * @return int */ public function getSwapPercentUsed() { if ($this->getSwapTotal() !== null) { if ($this->getSwapTotal() > 0) { return round($this->getSwapUsed() / $this->getSwapTotal() * 100); } else { return 0; } } else { return null; } } /** * Returns $_distribution. * * @see System::$_distribution * * @return String */ public function getDistribution() { return $this->_distribution; } /** * Sets $_distribution. * * @param String $distribution distributionname * * @see System::$_distribution * * @return void */ public function setDistribution($distribution) { $this->_distribution = $distribution; } /** * Returns $_distributionIcon. * * @see System::$_distributionIcon * * @return String */ public function getDistributionIcon() { return $this->_distributionIcon; } /** * Sets $_distributionIcon. * * @param String $distributionIcon distribution icon * * @see System::$_distributionIcon * * @return void */ public function setDistributionIcon($distributionIcon) { $this->_distributionIcon = $distributionIcon; } /** * Returns $_hostname. * * @see System::$_hostname * * @return String */ public function getHostname() { return $this->_hostname; } /** * Sets $_hostname. * * @param String $hostname hostname * * @see System::$_hostname * * @return void */ public function setHostname($hostname) { $this->_hostname = $hostname; } /** * Returns $_ip. * * @see System::$_ip * * @return String */ public function getIp() { return $this->_ip; } /** * Sets $_ip. * * @param String $ip IP * * @see System::$_ip * * @return void */ public function setIp($ip) { $this->_ip = $ip; } /** * Returns $_kernel. * * @see System::$_kernel * * @return String */ public function getKernel() { return $this->_kernel; } /** * Sets $_kernel. * * @param String $kernel kernelname * * @see System::$_kernel * * @return void */ public function setKernel($kernel) { $this->_kernel = $kernel; } /** * Returns $_load. * * @see System::$_load * * @return String */ public function getLoad() { return $this->_load; } /** * Sets $_load. * * @param String $load current system load * * @see System::$_load * * @return void */ public function setLoad($load) { $this->_load = $load; } /** * Returns $_loadPercent. * * @see System::$_loadPercent * * @return int */ public function getLoadPercent() { return $this->_loadPercent; } /** * Sets $_loadPercent. * * @param int $loadPercent load percent * * @see System::$_loadPercent * * @return void */ public function setLoadPercent($loadPercent) { $this->_loadPercent = $loadPercent; } /** * Returns $_machine. * * @see System::$_machine * * @return String */ public function getMachine() { return $this->_machine; } /** * Sets $_machine. * * @param string $machine machine * * @see System::$_machine * * @return void */ public function setMachine($machine) { $this->_machine = $machine; } /** * Returns $_uptime. * * @see System::$_uptime * * @return int */ public function getUptime() { return $this->_uptime; } /** * Sets $_uptime. * * @param integer $uptime uptime * * @see System::$_uptime * * @return void */ public function setUptime($uptime) { $this->_uptime = $uptime; } /** * Returns $_users. * * @see System::$_users * * @return int */ public function getUsers() { return $this->_users; } /** * Sets $_users. * * @param int $users user count * * @see System::$_users * * @return void */ public function setUsers($users) { $this->_users = $users; } /** * Returns $_cpus. * * @see System::$_cpus * * @return array */ public function getCpus() { return $this->_cpus; } /** * Sets $_cpus. * * @param CpuDevice $cpus cpu device * * @see System::$_cpus * @see CpuDevice * * @return void */ public function setCpus($cpus) { array_push($this->_cpus, $cpus); } /** * Returns $_netDevices. * * @see System::$_netDevices * * @return array */ public function getNetDevices() { if (defined('PSI_SORT_NETWORK_INTERFACES_LIST') && PSI_SORT_NETWORK_INTERFACES_LIST) { usort($this->_netDevices, array('CommonFunctions', 'name_natural_compare')); } return $this->_netDevices; } /** * Sets $_netDevices. * * @param NetDevice $netDevices network device * * @see System::$_netDevices * @see NetDevice * * @return void */ public function setNetDevices($netDevices) { array_push($this->_netDevices, $netDevices); } /** * Returns $_pciDevices. * * @see System::$_pciDevices * * @return array */ public function getPciDevices() { return $this->_pciDevices; } /** * Sets $_pciDevices. * * @param HWDevice $pciDevices pci device * * @see System::$_pciDevices * @see HWDevice * * @return void */ public function setPciDevices($pciDevices) { array_push($this->_pciDevices, $pciDevices); } /** * Returns $_ideDevices. * * @see System::$_ideDevices * * @return array */ public function getIdeDevices() { return $this->_ideDevices; } /** * Sets $_ideDevices. * * @param HWDevice $ideDevices ide device * * @see System::$_ideDevices * @see HWDevice * * @return void */ public function setIdeDevices($ideDevices) { array_push($this->_ideDevices, $ideDevices); } /** * Returns $_scsiDevices. * * @see System::$_scsiDevices * * @return array */ public function getScsiDevices() { return $this->_scsiDevices; } /** * Sets $_scsiDevices. * * @param HWDevice $scsiDevices scsi devices * * @see System::$_scsiDevices * @see HWDevice * * @return void */ public function setScsiDevices($scsiDevices) { array_push($this->_scsiDevices, $scsiDevices); } /** * Returns $_usbDevices. * * @see System::$_usbDevices * * @return array */ public function getUsbDevices() { return $this->_usbDevices; } /** * Sets $_usbDevices. * * @param HWDevice $usbDevices usb device * * @see System::$_usbDevices * @see HWDevice * * @return void */ public function setUsbDevices($usbDevices) { array_push($this->_usbDevices, $usbDevices); } /** * Returns $_tbDevices. * * @see System::$_tbDevices * * @return array */ public function getTbDevices() { return $this->_tbDevices; } /** * Sets $_tbDevices. * * @param HWDevice $tbDevices thunderbolt device * * @see System::$_tbDevices * @see HWDevice * * @return void */ public function setTbDevices($tbDevices) { array_push($this->_tbDevices, $tbDevices); } /** * Returns $_i2cDevices. * * @see System::$_i2cDevices * * @return array */ public function getI2cDevices() { return $this->_i2cDevices; } /** * Sets $_i2cDevices. * * @param HWDevice $i2cDevices I2C device * * @see System::$_i2cDevices * @see HWDevice * * @return void */ public function setI2cDevices($i2cDevices) { array_push($this->_i2cDevices, $i2cDevices); } /** * Returns $_nvmeDevices. * * @see System::$_nvmeDevices * * @return array */ public function getNvmeDevices() { return $this->_nvmeDevices; } /** * Sets $_nvmeDevices. * * @param HWDevice $nvmeDevices NVMe device * * @see System::$_nvmeDevices * @see HWDevice * * @return void */ public function setNvmeDevices($nvmeDevices) { array_push($this->_nvmeDevices, $nvmeDevices); } /** * Returns $_memDevices. * * @see System::$_memDevices * * @return array */ public function getMemDevices() { return $this->_memDevices; } /** * Sets $_memDevices. * * @param HWDevice $memDevices mem device * * @see System::$_memDevices * @see HWDevice * * @return void */ public function setMemDevices($memDevices) { array_push($this->_memDevices, $memDevices); } /** * Returns $_diskDevices. * * @see System::$_diskDevices * * @return array */ public function getDiskDevices() { return $this->_diskDevices; } /** * Sets $_diskDevices. * * @param DiskDevice $diskDevices disk device * * @see System::$_diskDevices * @see DiskDevice * * @return void */ public function setDiskDevices($diskDevices) { array_push($this->_diskDevices, $diskDevices); } /** * Returns $_memApplication. * * @see System::$_memApplication * * @return int */ public function getMemApplication() { return $this->_memApplication; } /** * Sets $_memApplication. * * @param int $memApplication application memory * * @see System::$_memApplication * * @return void */ public function setMemApplication($memApplication) { $this->_memApplication = $memApplication; } /** * Returns $_memBuffer. * * @see System::$_memBuffer * * @return int */ public function getMemBuffer() { return $this->_memBuffer; } /** * Sets $_memBuffer. * * @param int $memBuffer buffer memory * * @see System::$_memBuffer * * @return void */ public function setMemBuffer($memBuffer) { $this->_memBuffer = $memBuffer; } /** * Returns $_memCache. * * @see System::$_memCache * * @return int */ public function getMemCache() { return $this->_memCache; } /** * Sets $_memCache. * * @param int $memCache cache memory * * @see System::$_memCache * * @return void */ public function setMemCache($memCache) { $this->_memCache = $memCache; } /** * Returns $_memFree. * * @see System::$_memFree * * @return int */ public function getMemFree() { return $this->_memFree; } /** * Sets $_memFree. * * @param int $memFree free memory * * @see System::$_memFree * * @return void */ public function setMemFree($memFree) { $this->_memFree = $memFree; } /** * Returns $_memTotal. * * @see System::$_memTotal * * @return int */ public function getMemTotal() { return $this->_memTotal; } /** * Sets $_memTotal. * * @param int $memTotal total memory * * @see System::$_memTotal * * @return void */ public function setMemTotal($memTotal) { $this->_memTotal = $memTotal; } /** * Returns $_memUsed. * * @see System::$_memUsed * * @return int */ public function getMemUsed() { return $this->_memUsed; } /** * Sets $_memUsed. * * @param int $memUsed used memory * * @see System::$_memUsed * * @return void */ public function setMemUsed($memUsed) { $this->_memUsed = $memUsed; } /** * Returns $_swapDevices. * * @see System::$_swapDevices * * @return array */ public function getSwapDevices() { return $this->_swapDevices; } /** * Sets $_swapDevices. * * @param DiskDevice $swapDevices swap devices * * @see System::$_swapDevices * @see DiskDevice * * @return void */ public function setSwapDevices($swapDevices) { array_push($this->_swapDevices, $swapDevices); } /** * Returns $_processes. * * @see System::$_processes * * @return array */ public function getProcesses() { return $this->_processes; } /** * Sets $_proceses. * * @param $processes array of types of processes * * @see System::$_processes * * @return void */ public function setProcesses($processes) { $this->_processes = $processes; /* foreach ($processes as $proc_type=>$proc_count) { $this->_processes[$proc_type] = $proc_count; } */ } /** * Returns $_virtualizer. * * @see System::$_virtualizer * * @return array */ public function getVirtualizer() { return $this->_virtualizer; } /** * Sets $_virtualizer. * * @param String $virtualizer virtualizername * @param Bool|String $value true, false or virtualizername to replace * * @see System::$_virtualizer * * @return void */ public function setVirtualizer($virtualizer, $value = true) { if (!isset($this->_virtualizer[$virtualizer])) { if (is_bool($value)) { $this->_virtualizer[$virtualizer] = $value; } else { // replace the virtualizer with another $this->_virtualizer[$virtualizer] = true; $this->_virtualizer[$value] = false; } } } /** * Returns $_OS. * * @see System::$_OS * * @return string */ public function getOS() { return $this->_OS; } /** * Sets $_OS. * * @param $os operating system type * * @see System::$_OS * * @return void */ public function setOS($OS) { $this->_OS = $OS; } } phpsysinfo-3.4.4/includes/to/class.UPSInfo.inc.php000066400000000000000000000026521467431054600220430ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.UPSInfo.inc.php 329 2009-09-07 11:21:44Z bigmichi1 $ * @link http://phpsysinfo.sourceforge.net */ /** * MBInfo TO class * * @category PHP * @package PSI_TO * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class UPSInfo { /** * array with upsdivices * * @see UPSDevice * * @var array */ private $_upsDevices = array(); /** * Returns $_upsDevices. * * @see UPSInfo::$_upsDevices * * @return array */ public function getUpsDevices() { return $this->_upsDevices; } /** * Sets $_upsDevices. * * @param UPSDevice $upsDevices upsdevice * * @see UPSInfo::$_upsDevices * * @return void */ public function setUpsDevices($upsDevices) { array_push($this->_upsDevices, $upsDevices); } } phpsysinfo-3.4.4/includes/to/device/000077500000000000000000000000001467431054600174255ustar00rootroot00000000000000phpsysinfo-3.4.4/includes/to/device/class.CpuDevice.inc.php000066400000000000000000000157461467431054600236760ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.CpuDevice.inc.php 411 2010-12-28 22:32:52Z Jacky672 $ * @link http://phpsysinfo.sourceforge.net */ /** * CpuDevice TO class * * @category PHP * @package PSI_TO * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class CpuDevice { /** * model of the cpu * * @var string */ private $_model = ""; /** * cpu voltage * * @var Float */ private $_voltage = 0; /** * speed of the cpu in hertz * * @var int */ private $_cpuSpeed = 0; /** * max speed of the cpu in hertz * * @var int */ private $_cpuSpeedMax = 0; /** * min speed of the cpu in hertz * * @var int */ private $_cpuSpeedMin = 0; /** * cache size in bytes, if available * * @var int */ private $_cache = null; /** * virtualization, if available * * @var string */ private $_virt = null; /** * busspeed in hertz, if available * * @var int */ private $_busSpeed = null; /** * bogomips of the cpu, if available * * @var int */ private $_bogomips = null; /** * temperature of the cpu, if available * * @var int */ private $_temp = null; /** * vendorid, if available * * @var string */ private $_vendorid = null; /** * current load in percent of the cpu, if available * * @var int */ private $_load = null; /** * Returns $_model. * * @see Cpu::$_model * * @return String */ public function getModel() { return $this->_model; } /** * Sets $_model. * * @param String $model cpumodel * * @see Cpu::$_model * * @return void */ public function setModel($model) { $this->_model = $model; } /** * Returns $_voltage. * * @see Cpu::$_voltage * * @return Float */ public function getVoltage() { return $this->_voltage; } /** * Sets $_voltage. * * @param int $voltage voltage * * @see Cpu::$_voltage * * @return void */ public function setVoltage($voltage) { $this->_voltage = $voltage; } /** * Returns $_cpuSpeed. * * @see Cpu::$_cpuSpeed * * @return int */ public function getCpuSpeed() { return $this->_cpuSpeed; } /** * Sets $_cpuSpeed. * * @param int $cpuSpeed cpuspeed * * @see Cpu::$_cpuSpeed * * @return void */ public function setCpuSpeed($cpuSpeed) { $this->_cpuSpeed = $cpuSpeed; } /** * Returns $_cpuSpeedMax. * * @see Cpu::$_cpuSpeedMAx * * @return int */ public function getCpuSpeedMax() { return $this->_cpuSpeedMax; } /** * Sets $_cpuSpeedMax. * * @param int $cpuSpeedMax cpuspeedmax * * @see Cpu::$_cpuSpeedMax * * @return void */ public function setCpuSpeedMax($cpuSpeedMax) { $this->_cpuSpeedMax = $cpuSpeedMax; } /** * Returns $_cpuSpeedMin. * * @see Cpu::$_cpuSpeedMin * * @return int */ public function getCpuSpeedMin() { return $this->_cpuSpeedMin; } /** * Sets $_cpuSpeedMin. * * @param int $cpuSpeedMin cpuspeedmin * * @see Cpu::$_cpuSpeedMin * * @return void */ public function setCpuSpeedMin($cpuSpeedMin) { $this->_cpuSpeedMin = $cpuSpeedMin; } /** * Returns $_cache. * * @see Cpu::$_cache * * @return int */ public function getCache() { return $this->_cache; } /** * Sets $_cache. * * @param int $cache cache size * * @see Cpu::$_cache * * @return void */ public function setCache($cache) { $this->_cache = $cache; } /** * Returns $_virt. * * @see Cpu::$_virt * * @return String */ public function getVirt() { return $this->_virt; } /** * Sets $_virt. * * @param string $virt * * @see Cpu::$_virt * * @return void */ public function setVirt($virt) { $this->_virt = $virt; } /** * Returns $_busSpeed. * * @see Cpu::$_busSpeed * * @return int */ public function getBusSpeed() { return $this->_busSpeed; } /** * Sets $_busSpeed. * * @param int $busSpeed busspeed * * @see Cpu::$_busSpeed * * @return void */ public function setBusSpeed($busSpeed) { $this->_busSpeed = $busSpeed; } /** * Returns $_bogomips. * * @see Cpu::$_bogomips * * @return int */ public function getBogomips() { return $this->_bogomips; } /** * Sets $_bogomips. * * @param int $bogomips bogompis * * @see Cpu::$_bogomips * * @return void */ public function setBogomips($bogomips) { $this->_bogomips = $bogomips; } /** * Returns $_temp. * * @see Cpu::$_temp * * @return int */ /* public function getTemp() { return $this->_temp; } */ /** * Sets $_temp. * * @param int $temp temperature * * @see Cpu::$_temp * * @return void */ /* public function setTemp($temp) { $this->_temp = $temp; } */ /** * Returns $_vendorid. * * @see Cpu::$_vendorid * * @return String */ public function getVendorId() { return $this->_vendorid; } /** * Sets $_vendorid. * * @param string $vendorid * * @see Cpu::$_vendorid * * @return void */ public function setVendorId($vendorid) { $this->_vendorid = trim(preg_replace('/[\s!]/', '', $vendorid)); } /** * Returns $_load. * * @see CpuDevice::$_load * * @return int */ public function getLoad() { return $this->_load; } /** * Sets $_load. * * @param int $load load percent * * @see CpuDevice::$_load * * @return void */ public function setLoad($load) { $this->_load = $load; } } phpsysinfo-3.4.4/includes/to/device/class.DiskDevice.inc.php000066400000000000000000000137231467431054600240320ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.DiskDevice.inc.php 252 2009-06-17 13:06:44Z bigmichi1 $ * @link http://phpsysinfo.sourceforge.net */ /** * DiskDevice TO class * * @category PHP * @package PSI_TO * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class DiskDevice { /** * name of the disk device * * @var string */ private $_name = ""; /** * type of the filesystem on the disk device * * @var string */ private $_fsType = ""; /** * diskspace that is free in bytes * * @var int */ private $_free = 0; /** * diskspace that is used in bytes * * @var int */ private $_used = 0; /** * total diskspace * * @var int */ private $_total = 0; /** * mount point of the disk device if available * * @var string */ private $_mountPoint = null; /** * additional options of the device, like mount options * * @var string */ private $_options = null; /** * inodes usage in percent if available * * @var int */ private $_percentInodesUsed = null; /** * ignore mode * * @var int */ private $_ignore = 0; /** * Returns PercentUsed calculated when function is called from internal values * * @see DiskDevice::$_total * @see DiskDevice::$_used * * @return int */ public function getPercentUsed() { if ($this->_total > 0) { return 100 - min(floor($this->_free / $this->_total * 100), 100); } else { return 0; } } /** * Returns $_PercentInodesUsed. * * @see DiskDevice::$_PercentInodesUsed * * @return int */ public function getPercentInodesUsed() { return $this->_percentInodesUsed; } /** * Sets $_PercentInodesUsed. * * @param int $percentInodesUsed inodes percent * * @see DiskDevice::$_PercentInodesUsed * * @return void */ public function setPercentInodesUsed($percentInodesUsed) { $this->_percentInodesUsed = $percentInodesUsed; } /** * Returns $_free. * * @see DiskDevice::$_free * * @return int */ public function getFree() { return $this->_free; } /** * Sets $_free. * * @param int $free free bytes * * @see DiskDevice::$_free * * @return void */ public function setFree($free) { $this->_free = $free; } /** * Returns $_fsType. * * @see DiskDevice::$_fsType * * @return string */ public function getFsType() { return $this->_fsType; } /** * Sets $_fsType. * * @param String $fsType filesystemtype * * @see DiskDevice::$_fsType * * @return void */ public function setFsType($fsType) { $this->_fsType = $fsType; } /** * Returns $_mountPoint. * * @see DiskDevice::$_mountPoint * * @return string */ public function getMountPoint() { return $this->_mountPoint; } /** * Sets $_mountPoint. * * @param string $mountPoint mountpoint * * @see DiskDevice::$_mountPoint * * @return void */ public function setMountPoint($mountPoint) { $this->_mountPoint = $mountPoint; } /** * Returns $_name. * * @see DiskDevice::$_name * * @return string */ public function getName() { return $this->_name; } /** * Sets $_name. * * @param string $name device name * * @see DiskDevice::$_name * * @return void */ public function setName($name) { $this->_name = $name; } /** * Returns $_options. * * @see DiskDevice::$_options * * @return string */ public function getOptions() { return $this->_options; } /** * Sets $_options. * * @param string $options additional options * * @see DiskDevice::$_options * * @return void */ public function setOptions($options) { $this->_options = $options; } /** * Returns $_total. * * @see DiskDevice::$_total * * @return int */ public function getTotal() { return $this->_total; } /** * Sets $_total. * * @param int $total total bytes * * @see DiskDevice::$_total * * @return void */ public function setTotal($total) { $this->_total = $total; } /** * Returns $_used. * * @see DiskDevice::$_used * * @return int */ public function getUsed() { return $this->_used; } /** * Sets $_used. * * @param int $used used bytes * * @see DiskDevice::$_used * * @return void */ public function setUsed($used) { $this->_used = $used; } /** * Returns $_ignore. * * @see DiskDevice::$_ignore * * @return int */ public function getIgnore() { return $this->_ignore; } /** * Sets $_ignore. * * @see DiskDevice::$_ignore * * @return void */ public function setIgnore($ignore) { $this->_ignore = $ignore; } } phpsysinfo-3.4.4/includes/to/device/class.HWDevice.inc.php000066400000000000000000000134001467431054600234460ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.HWDevice.inc.php 255 2009-06-17 13:39:41Z bigmichi1 $ * @link http://phpsysinfo.sourceforge.net */ /** * HWDevice TO class * * @category PHP * @package PSI_TO * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class HWDevice { /** * name of the device * * @var string */ private $_name = ""; /** * capacity of the device, if not available it will be null * * @var int */ private $_capacity = null; /** * manufacturer of the device, if not available it will be null * * @var int */ private $_manufacturer = null; /** * product of the device, if not available it will be null * * @var int */ private $_product = null; /** * serial number of the device, if not available it will be null * * @var string */ private $_serial = null; /** * speed of the device, if not available it will be null * * @var Float */ private $_speed = null; /** * voltage of the device, if not available it will be null * * @var Float */ private $_voltage = null; /** * count of the device * * @var int */ private $_count = 1; /** * compare a given device with the internal one * * @param HWDevice $dev device that should be compared * * @return boolean */ public function equals(HWDevice $dev) { if ($dev->getName() === $this->_name && $dev->getCapacity() === $this->_capacity && $dev->getManufacturer() === $this->_manufacturer && $dev->getProduct() === $this->_product && $dev->getSerial() === $this->_serial && $dev->getSpeed() === $this->_speed) { return true; } else { return false; } } /** * Returns $_name. * * @see HWDevice::$_name * * @return String */ public function getName() { return $this->_name; } /** * Sets $_name. * * @param String $name device name * * @see HWDevice::$_name * * @return void */ public function setName($name) { $this->_name = $name; } /** * Returns $_manufacturer. * * @see HWDevice::$_manufacturer * * @return String */ public function getManufacturer() { return $this->_manufacturer; } /** * Sets $_manufacturer. * * @param String $manufacturer manufacturer name * * @see HWDevice::$_manufacturer * * @return void */ public function setManufacturer($manufacturer) { $this->_manufacturer = $manufacturer; } /** * Returns $_product. * * @see HWDevice::$_product * * @return String */ public function getProduct() { return $this->_product; } /** * Sets $_product. * * @param String $product product name * * @see HWDevice::$_product * * @return void */ public function setProduct($product) { $this->_product = $product; } /** * Returns $_serial. * * @see HWDevice::$_serial * * @return String */ public function getSerial() { return $this->_serial; } /** * Sets $_serial. * * @param String $serial serial number * * @see HWDevice::$_serial * * @return void */ public function setSerial($serial) { $this->_serial = $serial; } /** * Returns $_speed. * * @see HWDevice::$_speed * * @return Float */ public function getSpeed() { return $this->_speed; } /** * Sets $_speed. * * @param Float $speed speed * * @see HWDevice::$_speed * * @return void */ public function setSpeed($speed) { $this->_speed = $speed; } /** * Returns $_voltage. * * @see HWDevice::$_voltage * * @return Float */ public function getVoltage() { return $this->_voltage; } /** * Sets $_voltage. * * @param Float $voltage voltage * * @see HWDevice::$_voltage * * @return void */ public function setVoltage($voltage) { $this->_voltage = $voltage; } /** * Returns $_capacity. * * @see HWDevice::$_capacity * * @return int */ public function getCapacity() { return $this->_capacity; } /** * Sets $_capacity. * * @param int $capacity device capacity * * @see HWDevice::$_capacity * * @return void */ public function setCapacity($capacity) { $this->_capacity = $capacity; } /** * Returns $_count. * * @see HWDevice::$_count * * @return int */ public function getCount() { return $this->_count; } /** * Sets $_count. * * @param int $count device count * * @see HWDevice::$_count * * @return void */ public function setCount($count) { $this->_count = $count; } } phpsysinfo-3.4.4/includes/to/device/class.NetDevice.inc.php000066400000000000000000000125461467431054600236700ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.NetDevice.inc.php 547 2012-03-22 09:44:38Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * NetDevice TO class * * @category PHP * @package PSI_TO * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class NetDevice { /** * name of the device * * @var string */ private $_name = ""; /** * transmitted bytes * * @var int */ private $_txBytes = 0; /** * received bytes * * @var int */ private $_rxBytes = 0; /** * counted error packages * * @var int */ private $_errors = 0; /** * counted droped packages * * @var int */ private $_drops = 0; /** * string with info * * @var string */ private $_info = null; /** * string with bridge * * @var string */ private $_bridge = null; /** * transmitted bytes rate * * @var int */ private $_txRate = null; /** * received bytes rate * * @var int */ private $_rxRate = null; /** * Returns $_drops. * * @see NetDevice::$_drops * * @return int */ public function getDrops() { return $this->_drops; } /** * Sets $_drops. * * @param int $drops dropped packages * * @see NetDevice::$_drops * * @return void */ public function setDrops($drops) { $this->_drops = $drops; } /** * Returns $_errors. * * @see NetDevice::$_errors * * @return int */ public function getErrors() { return $this->_errors; } /** * Sets $_errors. * * @param int $errors error packages * * @see NetDevice::$_errors * * @return void */ public function setErrors($errors) { $this->_errors = $errors; } /** * Returns $_name. * * @see NetDevice::$_name * * @return String */ public function getName() { return $this->_name; } /** * Sets $_name. * * @param String $name device name * * @see NetDevice::$_name * * @return void */ public function setName($name) { $this->_name = $name; } /** * Returns $_rxBytes. * * @see NetDevice::$_rxBytes * * @return int */ public function getRxBytes() { return $this->_rxBytes; } /** * Sets $_rxBytes. * * @param int $rxBytes received bytes * * @see NetDevice::$_rxBytes * * @return void */ public function setRxBytes($rxBytes) { $this->_rxBytes = $rxBytes; } /** * Returns $_txBytes. * * @see NetDevice::$_txBytes * * @return int */ public function getTxBytes() { return $this->_txBytes; } /** * Sets $_txBytes. * * @param int $txBytes transmitted bytes * * @see NetDevice::$_txBytes * * @return void */ public function setTxBytes($txBytes) { $this->_txBytes = $txBytes; } /** * Returns $_info. * * @see NetDevice::$_info * * @return String */ public function getInfo() { return $this->_info; } /** * Sets $_info. * * @param String $info info string * * @see NetDevice::$_info * * @return void */ public function setInfo($info) { $this->_info = $info; } /** * Returns $_bridge. * * @see NetDevice::$_bridge * * @return String */ public function getBridge() { return $this->_bridge; } /** * Sets $_bridge. * * @param String $bridge bridge string * * @see NetDevice::$_bridge * * @return void */ public function setBridge($bridge) { $this->_bridge = $bridge; } /** * Returns $_rxRate. * * @see NetDevice::$_rxRate * * @return int */ public function getRxRate() { return $this->_rxRate; } /** * Sets $_rxRate. * * @param int $rxRate received bytes rate * * @see NetDevice::$_rxRate * * @return void */ public function setRxRate($rxRate) { $this->_rxRate = $rxRate; } /** * Returns $_txRate. * * @see NetDevice::$_txRate * * @return int */ public function getTxRate() { return $this->_txRate; } /** * Sets $_txRate. * * @param int $txRate transmitted bytes rate * * @see NetDevice::$_txRate * * @return void */ public function setTxRate($txRate) { $this->_txRate = $txRate; } } phpsysinfo-3.4.4/includes/to/device/class.SensorDevice.inc.php000066400000000000000000000073471467431054600244160ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.SensorDevice.inc.php 592 2012-07-03 10:55:51Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * SensorDevice TO class * * @category PHP * @package PSI_TO * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class SensorDevice { /** * name of the sensor * * @var string */ private $_name = ""; /** * current value of the sensor * * @var int */ private $_value = 0; /** * maximum value of the sensor * * @var int */ private $_max = null; /** * minimum value of the sensor * * @var int */ private $_min = null; /** * event of the sensor * * @var string */ private $_event = ""; /** * unit of values of the sensor * * @var string */ private $_unit = ""; /** * Returns $_max. * * @see Sensor::$_max * * @return int */ public function getMax() { return $this->_max; } /** * Sets $_max. * * @param int $max maximum value * * @see Sensor::$_max * * @return void */ public function setMax($max) { $this->_max = $max; } /** * Returns $_min. * * @see Sensor::$_min * * @return int */ public function getMin() { return $this->_min; } /** * Sets $_min. * * @param int $min minimum value * * @see Sensor::$_min * * @return void */ public function setMin($min) { $this->_min = $min; } /** * Returns $_name. * * @see Sensor::$_name * * @return String */ public function getName() { return $this->_name; } /** * Sets $_name. * * @param String $name sensor name * * @see Sensor::$_name * * @return void */ public function setName($name) { $this->_name = $name; } /** * Returns $_value. * * @see Sensor::$_value * * @return int */ public function getValue() { return $this->_value; } /** * Sets $_value. * * @param int $value current value * * @see Sensor::$_value * * @return void */ public function setValue($value) { $this->_value = $value; } /** * Returns $_event. * * @see Sensor::$_event * * @return String */ public function getEvent() { return $this->_event; } /** * Sets $_event. * * @param String $event sensor event * * @see Sensor::$_event * * @return void */ public function setEvent($event) { $this->_event = $event; } /** * Returns $_unit. * * @see Sensor::$_unit * * @return String */ public function getUnit() { return $this->_unit; } /** * Sets $_unit. * * @param String $unit sensor unit * * @see Sensor::$_unit * * @return void */ public function setUnit($unit) { $this->_unit = $unit; } } phpsysinfo-3.4.4/includes/to/device/class.UPSDevice.inc.php000066400000000000000000000241331467431054600236040ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.UPSDevice.inc.php 262 2009-06-22 10:48:33Z bigmichi1 $ * @link http://phpsysinfo.sourceforge.net */ /** * UPSDevice TO class * * @category PHP * @package PSI_TO * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class UPSDevice { /** * name of the ups * * @var string */ private $_name = ""; /** * model of the ups * * @var string */ private $_model = ""; /** * mode of the ups * * @var string */ private $_mode = ""; /** * last start time * * @var string */ private $_startTime = ""; /** * status of the ups * * @var string */ private $_status = ""; /** * temperature of the ups * * @var string */ private $_temperatur = null; /** * outages count * * @var int */ private $_outages = null; /** * date of last outtage * * @var string */ private $_lastOutage = null; /** * date of last outage finish * * @var string */ private $_lastOutageFinish = null; /** * line volt * * @var float */ private $_lineVoltage = null; /** * line freq * * @var int */ private $_lineFrequency = null; /** * current load of the ups in percent * * @var float */ private $_load = null; /** * battery installation date * * @var string */ private $_batteryDate = null; /** * current battery volt * * @var float */ private $_batteryVoltage = null; /** * current charge in percent of the battery * * @var float */ private $_batterCharge = null; /** * time left * * @var string */ private $_timeLeft = null; /** * beeper enabled or disabled * * @var string */ private $_beeperStatus = null; /** * Returns $_batterCharge. * * @see UPSDevice::$_batterCharge * * @return float */ public function getBatterCharge() { return $this->_batterCharge; } /** * Sets $_batterCharge. * * @param float $batterCharge battery charge * * @see UPSDevice::$_batterCharge * * @return void */ public function setBatterCharge($batterCharge) { $this->_batterCharge = $batterCharge; } /** * Returns $_batteryDate. * * @see UPSDevice::$_batteryDate * * @return String */ public function getBatteryDate() { return $this->_batteryDate; } /** * Sets $_batteryDate. * * @param object $batteryDate battery date * * @see UPSDevice::$_batteryDate * * @return void */ public function setBatteryDate($batteryDate) { $this->_batteryDate = $batteryDate; } /** * Returns $_batteryVoltage. * * @see UPSDevice::$_batteryVoltage * * @return float */ public function getBatteryVoltage() { return $this->_batteryVoltage; } /** * Sets $_batteryVoltage. * * @param float $batteryVoltage battery volt * * @see UPSDevice::$_batteryVoltage * * @return void */ public function setBatteryVoltage($batteryVoltage) { $this->_batteryVoltage = $batteryVoltage; } /** * Returns $_lastOutage. * * @see UPSDevice::$_lastOutage * * @return String */ public function getLastOutage() { return $this->_lastOutage; } /** * Sets $_lastOutage. * * @param String $lastOutage last Outage * * @see UPSDevice::$lastOutage * * @return void */ public function setLastOutage($lastOutage) { $this->_lastOutage = $lastOutage; } /** * Returns $_lastOutageFinish. * * @see UPSDevice::$_lastOutageFinish * * @return String */ public function getLastOutageFinish() { return $this->_lastOutageFinish; } /** * Sets $_lastOutageFinish. * * @param String $lastOutageFinish last outage finish * * @see UPSDevice::$_lastOutageFinish * * @return void */ public function setLastOutageFinish($lastOutageFinish) { $this->_lastOutageFinish = $lastOutageFinish; } /** * Returns $_lineVoltage. * * @see UPSDevice::$_lineVoltage * * @return float */ public function getLineVoltage() { return $this->_lineVoltage; } /** * Sets $_lineVoltage. * * @param float $lineVoltage line voltage * * @see UPSDevice::$_lineVoltage * * @return void */ public function setLineVoltage($lineVoltage) { $this->_lineVoltage = $lineVoltage; } /** * Returns $_lineFrequency. * * @see UPSDevice::$_lineFrequency * * @return int */ public function getLineFrequency() { return $this->_lineFrequency; } /** * Sets $_lineFrequency. * * @param int $lineFrequency line frequency * * @see UPSDevice::$_lineFrequency * * @return void */ public function setLineFrequency($lineFrequency) { $this->_lineFrequency = $lineFrequency; } /** * Returns $_load. * * @see UPSDevice::$_load * * @return float */ public function getLoad() { return $this->_load; } /** * Sets $_load. * * @param float $load current load * * @see UPSDevice::$_load * * @return void */ public function setLoad($load) { $this->_load = $load; } /** * Returns $_mode. * * @see UPSDevice::$_mode * * @return String */ public function getMode() { return $this->_mode; } /** * Sets $_mode. * * @param String $mode mode * * @see UPSDevice::$_mode * * @return void */ public function setMode($mode) { $this->_mode = $mode; } /** * Returns $_model. * * @see UPSDevice::$_model * * @return String */ public function getModel() { return $this->_model; } /** * Sets $_model. * * @param String $model model * * @see UPSDevice::$_model * * @return void */ public function setModel($model) { $this->_model = $model; } /** * Returns $_name. * * @see UPSDevice::$_name * * @return String */ public function getName() { return $this->_name; } /** * Sets $_name. * * @param String $name name * * @see UPSDevice::$_name * * @return void */ public function setName($name) { $this->_name = $name; } /** * Returns $_outages. * * @see UPSDevice::$_outages * * @return int */ public function getOutages() { return $this->_outages; } /** * Sets $_outages. * * @param int $outages outages count * * @see UPSDevice::$_outages * * @return void */ public function setOutages($outages) { $this->_outages = $outages; } /** * Returns $_startTime. * * @see UPSDevice::$_startTime * * @return String */ public function getStartTime() { return $this->_startTime; } /** * Sets $_startTime. * * @param String $startTime startTime * * @see UPSDevice::$_startTime * * @return void */ public function setStartTime($startTime) { $this->_startTime = $startTime; } /** * Returns $_status. * * @see UPSDevice::$_status * * @return String */ public function getStatus() { return $this->_status; } /** * Sets $_status. * * @param String $status status * * @see UPSDevice::$_status * * @return void */ public function setStatus($status) { $this->_status = $status; } /** * Returns $_temperatur. * * @see UPSDevice::$_temperatur * * @return string */ public function getTemperatur() { return $this->_temperatur; } /** * Sets $_temperatur. * * @param string $temperatur temperature * * @see UPSDevice::$_temperatur * * @return void */ public function setTemperatur($temperatur) { $this->_temperatur = $temperatur; } /** * Returns $_timeLeft. * * @see UPSDevice::$_timeLeft * * @return String */ public function getTimeLeft() { return $this->_timeLeft; } /** * Sets $_timeLeft. * * @param String $timeLeft time left * * @see UPSDevice::$_timeLeft * * @return void */ public function setTimeLeft($timeLeft) { $this->_timeLeft = $timeLeft; } /** * Returns $_beeperStatus. * * @see UPSDevice::$_beeperStatus * * @return String */ public function getBeeperStatus() { return $this->_beeperStatus; } /** * Sets $_beeperStatus. * * @param String $beeperStatus beeper status * * @see UPSDevice::$_beeperStatus * * @return void */ public function setBeeperStatus($beeperStatus) { $this->_beeperStatus = $beeperStatus; } } phpsysinfo-3.4.4/includes/ups/000077500000000000000000000000001467431054600163535ustar00rootroot00000000000000phpsysinfo-3.4.4/includes/ups/class.apcupsd.inc.php000066400000000000000000000144531467431054600224060ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.apcupsd.inc.php 661 2012-08-27 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * getting ups information from apcupsd program * * @category PHP * @package PSI_UPS * @author Michael Cramer * @author Artem Volk * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Apcupsd extends UPS { /** * internal storage for all gathered data * * @var array */ private $_output = array(); /** * get all information from all configured ups in phpsysinfo.ini and store output in internal array */ public function __construct() { parent::__construct(); if (!defined('PSI_UPS_APCUPSD_ACCESS')) { define('PSI_UPS_APCUPSD_ACCESS', false); } switch (strtolower(PSI_UPS_APCUPSD_ACCESS)) { case 'data': if (defined('PSI_UPS_APCUPSD_LIST') && is_string(PSI_UPS_APCUPSD_LIST)) { if (preg_match(ARRAY_EXP, PSI_UPS_APCUPSD_LIST)) { $upss = eval(PSI_UPS_APCUPSD_LIST); } else { $upss = array(PSI_UPS_APCUPSD_LIST); } } else { $upss = array('UPS'); } $un = 0; foreach ($upss as $ups) { $temp = ""; CommonFunctions::rftsdata("upsapcupsd{$un}.tmp", $temp); if (! empty($temp)) { $this->_output[] = $temp; } $un++; } break; default: if (defined('PSI_UPS_APCUPSD_LIST') && is_string(PSI_UPS_APCUPSD_LIST)) { if (preg_match(ARRAY_EXP, PSI_UPS_APCUPSD_LIST)) { $upses = eval(PSI_UPS_APCUPSD_LIST); } else { $upses = array(PSI_UPS_APCUPSD_LIST); } foreach ($upses as $ups) { $temp = ""; CommonFunctions::executeProgram('apcaccess', 'status '.trim($ups), $temp); if (! empty($temp)) { $this->_output[] = $temp; } } } else { //use default if address and port not defined if (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT')) { CommonFunctions::executeProgram('apcaccess', 'status', $temp); } else { CommonFunctions::executeProgram('apcaccess', 'status '.PSI_EMU_HOSTNAME, $temp); } if (! empty($temp)) { $this->_output[] = $temp; } } } } /** * parse the input and store data in resultset for xml generation * * @return void */ private function _info() { foreach ($this->_output as $ups) { $dev = new UPSDevice(); // General info if (preg_match('/^UPSNAME\s*:\s*(.*)$/m', $ups, $data)) { $dev->setName(trim($data[1])); } if (preg_match('/^MODEL\s*:\s*(.*)$/m', $ups, $data)) { $model = trim($data[1]); if (preg_match('/^APCMODEL\s*:\s*(.*)$/m', $ups, $data)) { $dev->setModel($model.' ('.trim($data[1]).')'); } else { $dev->setModel($model); } } if (preg_match('/^UPSMODE\s*:\s*(.*)$/m', $ups, $data)) { $dev->setMode(trim($data[1])); } if (preg_match('/^STARTTIME\s*:\s*(.*)$/m', $ups, $data)) { $dev->setStartTime(trim($data[1])); } if (preg_match('/^STATUS\s*:\s*(.*)$/m', $ups, $data)) { $dev->setStatus(trim($data[1])); } if (preg_match('/^ITEMP\s*:\s*(.*)$/m', $ups, $data)) { $temperatur = trim($data[1]); if (($temperatur !== "-273.1 C") && ($temperatur !== "-273.1 C Internal")) { $dev->setTemperatur($temperatur); } } // Outages if (preg_match('/^NUMXFERS\s*:\s*(.*)$/m', $ups, $data)) { $dev->setOutages(trim($data[1])); } if (preg_match('/^LASTXFER\s*:\s*(.*)$/m', $ups, $data)) { $dev->setLastOutage(trim($data[1])); } if (preg_match('/^XOFFBATT\s*:\s*(.*)$/m', $ups, $data)) { $dev->setLastOutageFinish(trim($data[1])); } // Line if (preg_match('/^LINEV\s*:\s*(\d*\.\d*)(.*)$/m', $ups, $data)) { $dev->setLineVoltage(trim($data[1])); } if (preg_match('/^LINEFREQ\s*:\s*(\d*\.\d*)(.*)$/m', $ups, $data)) { $dev->setLineFrequency(trim($data[1])); } if (preg_match('/^LOADPCT\s*:\s*(\d*\.\d*)(.*)$/m', $ups, $data)) { $dev->setLoad(trim($data[1])); } // Battery if (preg_match('/^BATTDATE\s*:\s*(.*)$/m', $ups, $data)) { $dev->setBatteryDate(trim($data[1])); } if (preg_match('/^BATTV\s*:\s*(\d*\.\d*)(.*)$/m', $ups, $data)) { $dev->setBatteryVoltage(trim($data[1])); } if (preg_match('/^BCHARGE\s*:\s*(\d*\.\d*)(.*)$/m', $ups, $data)) { $dev->setBatterCharge(trim($data[1])); } if (preg_match('/^TIMELEFT\s*:\s*(\d*\.\d*)(.*)$/m', $ups, $data)) { $dev->setTimeLeft(trim($data[1])); } $this->upsinfo->setUpsDevices($dev); } } /** * get the information * * @see PSI_Interface_UPS::build() * * @return void */ public function build() { $this->_info(); } } phpsysinfo-3.4.4/includes/ups/class.nut.inc.php000066400000000000000000000145311467431054600215520ustar00rootroot00000000000000 * @author Anders Häggström * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.nut.inc.php 661 2012-08-27 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * getting ups information from upsc program * * @category PHP * @package PSI_UPS * @author Artem Volk * @author Anders Häggström * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Nut extends UPS { /** * internal storage for all gathered data * * @var array */ private $_output = array(); /** * get all information from all configured ups and store output in internal array */ public function __construct() { parent::__construct(); if (!defined('PSI_UPS_NUT_ACCESS')) { define('PSI_UPS_NUT_ACCESS', false); } switch (strtolower(PSI_UPS_NUT_ACCESS)) { case 'data': if (defined('PSI_UPS_NUT_LIST') && is_string(PSI_UPS_NUT_LIST)) { if (preg_match(ARRAY_EXP, PSI_UPS_NUT_LIST)) { $upss = eval(PSI_UPS_NUT_LIST); } else { $upss = array(PSI_UPS_NUT_LIST); } } else { $upss = array('UPS'); } $un = 0; foreach ($upss as $ups) { $temp = ""; CommonFunctions::rftsdata("upsnut{$un}.tmp", $temp); if (! empty($temp)) { $this->_output[$ups] = $temp; } $un++; } break; default: if (defined('PSI_UPS_NUT_LIST') && is_string(PSI_UPS_NUT_LIST)) { if (preg_match(ARRAY_EXP, PSI_UPS_NUT_LIST)) { $upses = eval(PSI_UPS_NUT_LIST); } else { $upses = array(PSI_UPS_NUT_LIST); } foreach ($upses as $ups) { CommonFunctions::executeProgram('upsc', '-l '.trim($ups), $output, PSI_DEBUG); $ups_names = preg_split("/\n/", $output, -1, PREG_SPLIT_NO_EMPTY); foreach ($ups_names as $ups_name) { $upsname = trim($ups_name).'@'.trim($ups); $temp = ""; CommonFunctions::executeProgram('upsc', $upsname, $temp, PSI_DEBUG); if (! empty($temp)) { $this->_output[$upsname] = $temp; } } } } else { //use default if address and port not defined if (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT')) { CommonFunctions::executeProgram('upsc', '-l', $output, PSI_DEBUG); } else { CommonFunctions::executeProgram('upsc', '-l '.PSI_EMU_HOSTNAME, $output, PSI_DEBUG); } $ups_names = preg_split("/\n/", $output, -1, PREG_SPLIT_NO_EMPTY); foreach ($ups_names as $ups_name) { $temp = ""; CommonFunctions::executeProgram('upsc', trim($ups_name), $temp, PSI_DEBUG); if (! empty($temp)) { $this->_output[trim($ups_name)] = $temp; } } } } } /** * parse the input and store data in resultset for xml generation * * @return void */ private function _info() { if (! empty($this->_output)) { foreach ($this->_output as $name => $value) { $temp = preg_split("/\n/", $value, -1, PREG_SPLIT_NO_EMPTY); $ups_data = array(); foreach ($temp as $valueTemp) { $line = preg_split('/: /', $valueTemp, 2); $ups_data[$line[0]] = isset($line[1]) ? trim($line[1]) : ''; } $dev = new UPSDevice(); //General $dev->setName($name); if (isset($ups_data['ups.model'])) { $dev->setModel($ups_data['ups.model']); } if (isset($ups_data['driver.name'])) { $dev->setMode($ups_data['driver.name']); } if (isset($ups_data['ups.status'])) { $dev->setStatus($ups_data['ups.status']); } if (isset($ups_data['ups.beeper.status'])) { $dev->setBeeperStatus($ups_data['ups.beeper.status']); } //Line if (isset($ups_data['input.voltage'])) { $dev->setLineVoltage($ups_data['input.voltage']); } if (isset($ups_data['input.frequency'])) { $dev->setLineFrequency($ups_data['input.frequency']); } if (isset($ups_data['ups.load'])) { $dev->setLoad($ups_data['ups.load']); } //Battery if (isset($ups_data['battery.voltage'])) { $dev->setBatteryVoltage($ups_data['battery.voltage']); } if (isset($ups_data['battery.charge'])) { $dev->setBatterCharge($ups_data['battery.charge']); } if (isset($ups_data['battery.runtime'])) { $dev->setTimeLeft(round($ups_data['battery.runtime']/60, 2)); } //Temperature if (isset($ups_data['ups.temperature'])) { $dev->setTemperatur($ups_data['ups.temperature']); } $this->upsinfo->setUpsDevices($dev); } } } /** * get the information * * @see PSI_Interface_UPS::build() * * @return void */ public function build() { $this->_info(); } } phpsysinfo-3.4.4/includes/ups/class.pmset.inc.php000066400000000000000000000066741467431054600221050ustar00rootroot00000000000000 * @copyright 2014 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.nut.inc.php 661 2012-08-27 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * getting ups information from pmset program * * @category PHP * @package PSI_UPS * @author Robert Pelletier * @copyright 2014 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Pmset extends UPS { /** * internal storage for all gathered data * * @var array */ private $_output = array(); /** * get all information from all configured ups and store output in internal array */ public function __construct() { parent::__construct(); if (defined('PSI_UPS_PMSET_ACCESS') && (strtolower(trim(PSI_UPS_PMSET_ACCESS))==='data')) { if (CommonFunctions::rftsdata('upspmset.tmp', $temp)) { $this->_output[] = $temp; } } elseif (PSI_OS == 'Darwin') { if (CommonFunctions::executeProgram('pmset', '-g batt', $temp) && !empty($temp)) { $this->_output[] = $temp; } } } /** * parse the input and store data in resultset for xml generation * * @return void */ private function _info() { if (empty($this->_output)) { return; } $model = array(); $percCharge = array(); $lines = explode(PHP_EOL, implode($this->_output)); if (count($lines)>1) { if (strpos($lines[1], 'InternalBattery') === false) { $dev = new UPSDevice(); $dev->setName('UPS'); $percCharge = explode(';', $lines[1]); $model = explode('FW:', $lines[1]); if ($model !== false) { $dev->setModel(substr(trim($model[0]), 1)); } if ($percCharge !== false) { if (preg_match("/\s(\d+)\%$/", trim($percCharge[0]), $tmpbuf)) { if ($tmpbuf[1]>100) { $dev->setBatterCharge(100); } else { $dev->setBatterCharge($tmpbuf[1]); } } $percCharge[1]=trim($percCharge[1]); if (preg_match("/^(.+) present:/", $percCharge[1], $tmpbuf)) { $dev->setStatus(trim($tmpbuf[1])); } else { $dev->setStatus($percCharge[1]); } if (isset($percCharge[2]) && preg_match("/\s(\d+):(\d+)\s/", $percCharge[2], $tmpbuf)) { $dev->setTimeLeft($tmpbuf[1]*60+$tmpbuf[2]); } } $dev->setMode("pmset"); $this->upsinfo->setUpsDevices($dev); } } } /** * get the information * * @see PSI_Interface_UPS::build() * * @return void */ public function build() { $this->_info(); } } phpsysinfo-3.4.4/includes/ups/class.powersoftplus.inc.php000066400000000000000000000100201467431054600236650ustar00rootroot00000000000000 * @copyright 2014 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.powersoftplus.inc.php 661 2014-06-13 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * getting ups information from powersoftplus program * * @category PHP * @package PSI_UPS * @author Mieczyslaw Nalewaj * @copyright 2014 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class PowerSoftPlus extends UPS { /** * internal storage for all gathered data * * @var array */ private $_output = array(); /** * get all information from all configured ups in phpsysinfo.ini and store output in internal array */ public function __construct() { parent::__construct(); if (defined('PSI_UPS_POWERSOFTPLUS_ACCESS') && (strtolower(trim(PSI_UPS_POWERSOFTPLUS_ACCESS))==='data')) { CommonFunctions::rftsdata('upspowersoftplus.tmp', $temp); if (! empty($temp)) { $this->_output[] = $temp; } } elseif (PSI_OS == 'Linux') { CommonFunctions::executeProgram('powersoftplus', '-p', $temp); if (! empty($temp)) { $this->_output[] = $temp; } } } /** * parse the input and store data in resultset for xml generation * * @return void */ private function _info() { foreach ($this->_output as $ups) { $dev = new UPSDevice(); // General info $dev->setName("EVER"); $dev->setMode("PowerSoftPlus"); $maxpwr = 0; $load = null; if (preg_match('/^Identifier: UPS Model\s*:\s*(.*)$/m', $ups, $data)) { $dev->setModel(trim($data[1])); if (preg_match('/\s(\d*)[^\d]*$/', trim($data[1]), $number)) { $maxpwr=$number[1]*0.65; } } if (preg_match('/^Current UPS state\s*:\s*(.*)$/m', $ups, $data)) { $dev->setStatus(trim($data[1])); } if (preg_match('/^Output load\s*:\s*(.*)\s\[\%\]\r?$/m', $ups, $data)) { $load = trim($data[1]); } //wrong Output load issue if (($load == 0) && ($maxpwr != 0) && preg_match('/^Effective power\s*:\s*(.*)\s\[W\]\r?$/m', $ups, $data)) { $load = 100.0*trim($data[1])/$maxpwr; } if ($load != null) { $dev->setLoad($load); } // Battery if (preg_match('/^Battery voltage\s*:\s*(.*)\s\[Volt\]\r?$/m', $ups, $data)) { $dev->setBatteryVoltage(trim($data[1])); } if (preg_match('/^Battery state\s*:\s*(.*)$/m', $ups, $data)) { if (preg_match('/^At full capacity$/', trim($data[1]))) { $dev->setBatterCharge(100); } elseif (preg_match('/^(Discharged)|(Depleted)$/', trim($data[1]))) { $dev->setBatterCharge(0); } } // Line if (preg_match('/^Input voltage\s*:\s*(.*)\s\[Volt\]\r?$/m', $ups, $data)) { $dev->setLineVoltage(trim($data[1])); } if (preg_match('/^Input frequency\s*:\s*(.*)\s\[Hz\]\r?$/m', $ups, $data)) { $dev->setLineFrequency(trim($data[1])); } $this->upsinfo->setUpsDevices($dev); } } /** * get the information * * @see PSI_Interface_UPS::build() * * @return void */ public function build() { $this->_info(); } } phpsysinfo-3.4.4/includes/ups/class.snmpups.inc.php000066400000000000000000000334661467431054600224610ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.apcupsd.inc.php 661 2012-08-27 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * getting ups information from SNMPups program * * @category PHP * @package PSI_UPS * @author Michael Cramer * @author Artem Volk * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class SNMPups extends UPS { /** * internal storage for all gathered data * * @var array */ private $_output = array(); /** * get all information from all configured ups in phpsysinfo.ini and store output in internal array */ public function __construct() { parent::__construct(); if (!defined('PSI_UPS_SNMPUPS_ACCESS')) { define('PSI_UPS_SNMPUPS_ACCESS', 'php-snmp'); } switch (strtolower(PSI_UPS_SNMPUPS_ACCESS)) { case 'data': if (defined('PSI_UPS_SNMPUPS_LIST') && is_string(PSI_UPS_SNMPUPS_LIST)) { if (preg_match(ARRAY_EXP, PSI_UPS_SNMPUPS_LIST)) { $upss = eval(PSI_UPS_SNMPUPS_LIST); } else { $upss = array(PSI_UPS_SNMPUPS_LIST); } } else { $upss = array('UPS'); } $un = 0; foreach ($upss as $ups) { $temp = ""; CommonFunctions::rftsdata("upssnmpups{$un}.tmp", $temp); if (! empty($temp)) { $this->_output[] = $temp; } $un++; } break; case 'command': if (defined('PSI_UPS_SNMPUPS_LIST') && is_string(PSI_UPS_SNMPUPS_LIST)) { if (preg_match(ARRAY_EXP, PSI_UPS_SNMPUPS_LIST)) { $upss = eval(PSI_UPS_SNMPUPS_LIST); } else { $upss = array(PSI_UPS_SNMPUPS_LIST); } foreach ($upss as $ups) { $buffer = ""; CommonFunctions::executeProgram("snmpwalk", "-Ona -c public -v 1 -t ".PSI_SNMP_TIMEOUT_INT." -r ".PSI_SNMP_RETRY_INT." ".$ups." .1.3.6.1.4.1.318.1.1.1.1", $buffer, PSI_DEBUG); if (strlen($buffer) > 0) { $this->_output[$ups] = $buffer; $buffer = ""; CommonFunctions::executeProgram("snmpwalk", "-Ona -c public -v 1 -t ".PSI_SNMP_TIMEOUT_INT." -r ".PSI_SNMP_RETRY_INT." ".$ups." .1.3.6.1.4.1.318.1.1.1.2", $buffer, PSI_DEBUG); if (strlen($buffer) > 0) { $this->_output[$ups] .= "\n".$buffer; } $buffer = ""; CommonFunctions::executeProgram("snmpwalk", "-Ona -c public -v 1 -t ".PSI_SNMP_TIMEOUT_INT." -r ".PSI_SNMP_RETRY_INT." ".$ups." .1.3.6.1.4.1.318.1.1.1.3", $buffer, PSI_DEBUG); if (strlen($buffer) > 0) { $this->_output[$ups] .= "\n".$buffer; } $buffer = ""; CommonFunctions::executeProgram("snmpwalk", "-Ona -c public -v 1 -t ".PSI_SNMP_TIMEOUT_INT." -r ".PSI_SNMP_RETRY_INT." ".$ups." .1.3.6.1.4.1.318.1.1.1.4", $buffer, PSI_DEBUG); if (strlen($buffer) > 0) { $this->_output[$ups] .= "\n".$buffer; } } } } break; case 'php-snmp': if (!extension_loaded("snmp")) { $this->error->addError("Requirements error", "SNMPups plugin requires the snmp extension to php in order to work properly"); break; } snmp_set_valueretrieval(SNMP_VALUE_LIBRARY); snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC); if (defined('PSI_UPS_SNMPUPS_LIST') && is_string(PSI_UPS_SNMPUPS_LIST)) { if (preg_match(ARRAY_EXP, PSI_UPS_SNMPUPS_LIST)) { $upss = eval(PSI_UPS_SNMPUPS_LIST); } else { $upss = array(PSI_UPS_SNMPUPS_LIST); } foreach ($upss as $ups) { if (! PSI_DEBUG) { restore_error_handler(); /* default error handler */ $old_err_rep = error_reporting(); error_reporting(E_ERROR); /* fatal errors only */ } $bufferarr=snmprealwalk($ups, "public", ".1.3.6.1.4.1.318.1.1.1.1", 1000000 * PSI_SNMP_TIMEOUT_INT, PSI_SNMP_RETRY_INT); if (! PSI_DEBUG) { error_reporting($old_err_rep); /* restore error level */ set_error_handler('errorHandlerPsi'); /* restore error handler */ } if (! empty($bufferarr)) { $buffer=""; foreach ($bufferarr as $id=>$string) { $buffer .= $id." = ".$string."\n"; } if (! PSI_DEBUG) { restore_error_handler(); /* default error handler */ $old_err_rep = error_reporting(); error_reporting(E_ERROR); /* fatal errors only */ } $bufferarr2=snmprealwalk($ups, "public", ".1.3.6.1.4.1.318.1.1.1.2", 1000000 * PSI_SNMP_TIMEOUT_INT, PSI_SNMP_RETRY_INT); $bufferarr3=snmprealwalk($ups, "public", ".1.3.6.1.4.1.318.1.1.1.3", 1000000 * PSI_SNMP_TIMEOUT_INT, PSI_SNMP_RETRY_INT); $bufferarr4=snmprealwalk($ups, "public", ".1.3.6.1.4.1.318.1.1.1.4", 1000000 * PSI_SNMP_TIMEOUT_INT, PSI_SNMP_RETRY_INT); if (! PSI_DEBUG) { error_reporting($old_err_rep); /* restore error level */ set_error_handler('errorHandlerPsi'); /* restore error handler */ } if (! empty($bufferarr2)) { foreach ($bufferarr2 as $id=>$string) { $buffer .= $id." = ".$string."\n"; } } if (! empty($bufferarr3)) { foreach ($bufferarr3 as $id=>$string) { $buffer .= $id." = ".$string."\n"; } } if (! empty($bufferarr4)) { foreach ($bufferarr4 as $id=>$string) { $buffer .= $id." = ".$string."\n"; } } if (strlen(trim($buffer)) > 0) { $this->_output[$ups] = $buffer; } } } } break; default: $this->error->addError("switch(PSI_UPS_SNMPUPS_ACCESS)", "Bad SNMPups configuration in phpsysinfo.ini"); } } /** * parse the input and store data in resultset for xml generation * * @return void */ private function _info() { if (empty($this->_output)) { return; } foreach ($this->_output as $result) { $dev = new UPSDevice(); $status = ""; $status2 = ""; $status3 = ""; $dev->setMode("SNMP"); if (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.1\.1\.2\.0 = STRING:\s(.*)/m', $result, $data)) { $dev->setName(trim($data[1], "\" \r\t")); } if (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.1\.1\.1\.0 = STRING:\s(.*)/m', $result, $data)) { $dev->setModel(trim($data[1], "\" \r\t")); } if (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.4\.1\.1\.0 = INTEGER:\s(.*)/m', $result, $data)) { switch (trim($data[1])) { case 1: $status = "Unknown"; break; case 2: $status = "On Line"; break; case 3: $status = "On Battery"; break; case 4: $status = "On Smart Boost"; break; case 5: $status = "Timed Sleeping"; break; case 6: $status = "Software Bypass"; break; case 7: $status = "Off"; break; case 8: $status = "Rebooting"; break; case 9: $status = "Switched Bypass"; break; case 10:$status = "Hardware Failure Bypass"; break; case 11:$status = "Sleeping Until Power Returns"; break; case 12:$status = "On Smart Trim"; break; default: $status = "Unknown state (".trim($data[1]).")"; } } if (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.2\.1\.1\.0 = INTEGER:\s(.*)/m', $result, $data)) { $batstat = ""; switch (trim($data[1])) { case 1: $batstat = "Battery Unknown"; break; case 2: break; case 3: $batstat = "Battery Low"; break; default: $batstat = "Battery Unknown (".trim($data[1]).")"; } if ($batstat !== "") { if ($status !== "") { $status .= ", ".$batstat; } else { $status = $batstat; } } } if (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.2\.2\.4\.0 = INTEGER:\s(.*)/m', $result, $data)) { $batstat = ""; switch (trim($data[1])) { case 1: break; case 2: $batstat = "Replace Battery"; break; default: $batstat = "Replace Battery (".trim($data[1]).")"; } if ($batstat !== "") { if ($status !== "") { $status .= ", ".$batstat; } else { $status = $batstat; } } } if ($status !== "") { $dev->setStatus(trim($status)); } if (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.3\.3\.1\.0 = Gauge32:\s(.*)/m', $result, $data)) { $dev->setLineVoltage(trim($data[1])/10); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.3\.2\.1\.0 = Gauge32:\s(.*)/m', $result, $data)) { $dev->setLineVoltage(trim($data[1])); } if (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.4\.3\.3\.0 = Gauge32:\s(.*)/m', $result, $data)) { $dev->setLoad(trim($data[1])/10); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.4\.2\.3\.0 = Gauge32:\s(.*)/m', $result, $data)) { $dev->setLoad(trim($data[1])); } if (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.2\.3\.4\.0 = INTEGER:\s(.*)/m', $result, $data)) { $dev->setBatteryVoltage(trim($data[1])/10); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.2\.2\.8\.0 = INTEGER:\s(.*)/m', $result, $data)) { $dev->setBatteryVoltage(trim($data[1])); } if (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.2\.3\.1\.0 = Gauge32:\s(.*)/m', $result, $data)) { $dev->setBatterCharge(trim($data[1])/10); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.2\.2\.1\.0 = Gauge32:\s(.*)/m', $result, $data)) { $dev->setBatterCharge(trim($data[1])); } if (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.2\.2\.3\.0 = Timeticks:\s\((\d*)\)/m', $result, $data)) { $dev->setTimeLeft(trim($data[1])/6000); } if (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.2\.3\.2\.0 = Gauge32:\s(.*)/m', $result, $data)) { $dev->setTemperatur(trim($data[1])/10); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.2\.2\.2\.0 = Gauge32:\s(.*)/m', $result, $data)) { $dev->setTemperatur(trim($data[1])); } if (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.2\.1\.3\.0 = STRING:\s(.*)/m', $result, $data)) { $dev->setBatteryDate(trim($data[1], "\" \r\t")); } if (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.3\.3\.4\.0 = Gauge32:\s(.*)/m', $result, $data)) { $dev->setLineFrequency(trim($data[1])/10); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.318\.1\.1\.1\.3\.2\.4\.0 = Gauge32:\s(.*)/m', $result, $data)) { $dev->setLineFrequency(trim($data[1])); } $this->upsinfo->setUpsDevices($dev); } } /** * get the information * * @see PSI_Interface_UPS::build() * * @return void */ public function build() { $this->_info(); } } phpsysinfo-3.4.4/includes/ups/class.ups.inc.php000066400000000000000000000027771467431054600215640ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.ups.inc.php 661 2012-08-27 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * Basic UPS functions for all UPS classes * * @category PHP * @package PSI_UPS * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ abstract class UPS implements PSI_Interface_UPS { /** * object for error handling * * @var PSI_Error */ public $error; /** * main object for ups information * * @var UPSInfo */ protected $upsinfo; /** * build the global Error object */ public function __construct() { $this->error = PSI_Error::singleton(); $this->upsinfo = new UPSInfo(); } /** * build and return the ups information * * @see PSI_Interface_UPS::getUPSInfo() * * @return UPSInfo */ final public function getUPSInfo() { $this->build(); return $this->upsinfo; } } phpsysinfo-3.4.4/includes/xml/000077500000000000000000000000001467431054600163445ustar00rootroot00000000000000phpsysinfo-3.4.4/includes/xml/class.SimpleXMLExtended.inc.php000066400000000000000000000211171467431054600242260ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.SimpleXMLExtended.inc.php 610 2012-07-11 19:12:12Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * class extends the SimpleXML element for including some special functions, like encoding stuff and cdata support * * @category PHP * @package PSI_XML * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class SimpleXMLExtended { /** * store the encoding that is used for conversation to utf8 * * @var string base encoding */ private $_encoding = null; /** * SimpleXMLElement to which every call is delegated * * @var SimpleXMLElement delegated SimpleXMLElement */ private $_SimpleXmlElement = null; /** * _CP437toUTF8Table for code page conversion for CP437 * * @var array _CP437toUTF8Table array */ private static $_CP437toUTF8Table = array( "\xC3\x87","\xC3\xBC","\xC3\xA9","\xC3\xA2", "\xC3\xA4","\xC3\xA0","\xC3\xA5","\xC3\xA7", "\xC3\xAA","\xC3\xAB","\xC3\xA8","\xC3\xAF", "\xC3\xAE","\xC3\xAC","\xC3\x84","\xC3\x85", "\xC3\x89","\xC3\xA6","\xC3\x86","\xC3\xB4", "\xC3\xB6","\xC3\xB2","\xC3\xBB","\xC3\xB9", "\xC3\xBF","\xC3\x96","\xC3\x9C","\xC3\xA2", "\xC2\xA3","\xC3\xA5","\xE2\x82\xA7","\xC6\x92", "\xC3\xA1","\xC3\xAD","\xC3\xB3","\xC3\xBA", "\xC3\xB1","\xC3\x91","\xC2\xAA","\xC2\xBA", "\xC2\xBF","\xE2\x8C\x90","\xC2\xAC","\xC2\xBD", "\xC2\xBC","\xC2\xA1","\xC2\xAB","\xC2\xBB", "\xE2\x96\x91","\xE2\x96\x92","\xE2\x96\x93","\xE2\x94\x82", "\xE2\x94\xA4","\xE2\x95\xA1","\xE2\x95\xA2","\xE2\x95\x96", "\xE2\x95\x95","\xE2\x95\xA3","\xE2\x95\x91","\xE2\x95\x97", "\xE2\x95\x9D","\xE2\x95\x9C","\xE2\x95\x9B","\xE2\x94\x90", "\xE2\x94\x94","\xE2\x94\xB4","\xE2\x94\xAC","\xE2\x94\x9C", "\xE2\x94\x80","\xE2\x94\xBC","\xE2\x95\x9E","\xE2\x95\x9F", "\xE2\x95\x9A","\xE2\x95\x94","\xE2\x95\xA9","\xE2\x95\xA6", "\xE2\x95\xA0","\xE2\x95\x90","\xE2\x95\xAC","\xE2\x95\xA7", "\xE2\x95\xA8","\xE2\x95\xA4","\xE2\x95\xA5","\xE2\x95\x99", "\xE2\x95\x98","\xE2\x95\x92","\xE2\x95\x93","\xE2\x95\xAB", "\xE2\x95\xAA","\xE2\x94\x98","\xE2\x94\x8C","\xE2\x96\x88", "\xE2\x96\x84","\xE2\x96\x8C","\xE2\x96\x90","\xE2\x96\x80", "\xCE\xB1","\xC3\x9F","\xCE\x93","\xCF\x80", "\xCE\xA3","\xCF\x83","\xC2\xB5","\xCF\x84", "\xCE\xA6","\xCE\x98","\xCE\xA9","\xCE\xB4", "\xE2\x88\x9E","\xCF\x86","\xCE\xB5","\xE2\x88\xA9", "\xE2\x89\xA1","\xC2\xB1","\xE2\x89\xA5","\xE2\x89\xA4", "\xE2\x8C\xA0","\xE2\x8C\xA1","\xC3\xB7","\xE2\x89\x88", "\xC2\xB0","\xE2\x88\x99","\xC2\xB7","\xE2\x88\x9A", "\xE2\x81\xBF","\xC2\xB2","\xE2\x96\xA0","\xC2\xA0"); /** * create a new extended SimpleXMLElement and set encoding if specified * * @param SimpleXMLElement $xml base xml element * @param String $encoding base encoding that should be used for conversation to utf8 * * @return void */ public function __construct($xml, $encoding = null) { if ($encoding != null) { $this->_encoding = $encoding; } $this->_SimpleXmlElement = $xml; } /** * insert a child element with or without a value, also doing conversation of name and if value is set to utf8 * * @param String $name name of the child element * @param String $value a value that should be insert to the child * * @return SimpleXMLExtended extended child SimpleXMLElement */ public function addChild($name, $value = null) { $nameUtf8 = $this->_toUTF8($name); if ($value == null) { return new SimpleXMLExtended($this->_SimpleXmlElement->addChild($nameUtf8), $this->_encoding); } else { $valueUtf8 = htmlspecialchars($this->_toUTF8($value), ENT_COMPAT, "UTF-8"); return new SimpleXMLExtended($this->_SimpleXmlElement->addChild($nameUtf8, $valueUtf8), $this->_encoding); } } /** * insert a child with cdata section * * @param String $name name of the child element * @param String $cdata data for CDATA section * * @return SimpleXMLExtended extended child SimpleXMLElement */ public function addCData($name, $cdata) { $nameUtf8 = $this->_toUTF8($name); $node = $this->_SimpleXmlElement->addChild($nameUtf8); $domnode = dom_import_simplexml($node); $no = $domnode->ownerDocument; $domnode->appendChild($no->createCDATASection($cdata)); return new SimpleXMLExtended($node, $this->_encoding); } /** * add a attribute to a child and convert name and value to utf8 * * @param String $name name of the attribute * @param String $value value of the attribute * * @return void */ public function addAttribute($name, $value) { $nameUtf8 = $this->_toUTF8($name); $valueUtf8 = htmlspecialchars($this->_toUTF8($value), ENT_COMPAT, "UTF-8"); if (($valueUtf8 === "") && (version_compare("5.2.2", PHP_VERSION, ">"))) { $this->_SimpleXmlElement->addAttribute($nameUtf8, "\0"); // Fixing bug #41175 (addAttribute() fails to add an attribute with an empty value) } else { $this->_SimpleXmlElement->addAttribute($nameUtf8, $valueUtf8); } } /** * append a xml-tree to another xml-tree * * @param SimpleXMLElement $new_child child that should be appended * * @return void */ public function combinexml(SimpleXMLElement $new_child) { $node1 = dom_import_simplexml($this->_SimpleXmlElement); $dom_sxe = dom_import_simplexml($new_child); $node2 = $node1->ownerDocument->importNode($dom_sxe, true); $node1->appendChild($node2); } /** * convert a string into an UTF-8 string * * @param String $str string to convert * * @return String UTF-8 string */ private function _toUTF8($str) { $str = trim(preg_replace('/[\x00-\x09\x0b-\x1F]/', ' ', strval($str))); //remove nonprintable characters if ($this->_encoding != null) { if (strcasecmp($this->_encoding, "UTF-8") == 0) { return $str; } elseif (strcasecmp($this->_encoding, "CP437") == 0) { $strr = ""; if (($strl = strlen($str)) > 0) for ($i = 0; $i < $strl; $i++) { $strc = substr($str, $i, 1); if ($strc < 128) $strr.=$strc; else $strr.=self::$_CP437toUTF8Table[$strc-128]; } return $strr; } else { if (preg_match("/^windows-\d+ \((.+)\)$/", $this->_encoding, $buf)) { $encoding = $buf[1]; } else { $encoding = $this->_encoding; } $enclist = mb_list_encodings(); if (in_array($encoding, $enclist)) { return mb_convert_encoding($str, 'UTF-8', $encoding); } elseif (function_exists("iconv")) { if (($iconvout=iconv($encoding, 'UTF-8', $str))!==false) { return $iconvout; } else { return mb_convert_encoding($str, 'UTF-8'); } } elseif (function_exists("libiconv") && (($iconvout=libiconv($encoding, 'UTF-8', $str))!==false)) { return $iconvout; } else { return mb_convert_encoding($str, 'UTF-8'); } } } else { if (function_exists('mb_convert_encoding')) { return mb_convert_encoding($str, 'UTF-8'); } else { return $str; } } } /** * Returns the SimpleXmlElement * * @return SimpleXmlElement entire xml as SimpleXmlElement */ public function getSimpleXmlElement() { return $this->_SimpleXmlElement; } } phpsysinfo-3.4.4/includes/xml/class.XML.inc.php000066400000000000000000001331551467431054600214010ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: class.XML.inc.php 699 2012-09-15 11:57:13Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * class for generation of the xml * * @category PHP * @package PSI_XML * @author Michael Cramer * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class XML { /** * Sysinfo object where the information retrieval methods are included * * @var PSI_Interface_OS */ private $_sysinfo; /** * @var System */ private $_sys = null; /** * xml object with the xml content * * @var SimpleXMLExtended */ private $_xml; /** * object for error handling * * @var PSI_Error */ private $_errors; /** * array with all enabled plugins (name) * * @var array */ private $_plugins; /** * plugin name if pluginrequest * * @var string */ private $_plugin = ''; /** * generate the entire xml with all plugins or only a part of the xml (main or plugin) * * @var boolean */ private $_complete_request = false; /** * doing some initial tasks * - generate the xml structure with the right header elements * - get the error object for error output * - get a instance of the sysinfo object * * @param boolean $complete generate xml with all plugins or not * @param string $pluginname name of the plugin * * @return void */ public function __construct($complete = false, $pluginname = "", $blockname = false) { $this->_errors = PSI_Error::singleton(); $this->_plugin = $pluginname; if ($complete) { $this->_complete_request = true; } else { $this->_complete_request = false; } if (defined('PSI_EMU_PORT')) { $os = 'SSH'; } elseif (defined('PSI_EMU_HOSTNAME')) { $os = 'WINNT'; } else { $os = PSI_OS; } $this->_sysinfo = new $os($blockname); $this->_plugins = CommonFunctions::getPlugins(); $this->_xmlbody(); } /** * generate common information * * @return void */ private function _buildVitals() { $vitals = $this->_xml->addChild('Vitals'); $vitals->addAttribute('Hostname', $this->_sys->getHostname()); $vitals->addAttribute('IPAddr', $this->_sys->getIp()); $vitals->addAttribute('Kernel', $this->_sys->getKernel()); $vitals->addAttribute('Distro', $this->_sys->getDistribution()); $vitals->addAttribute('Distroicon', $this->_sys->getDistributionIcon()); $vitals->addAttribute('Uptime', $this->_sys->getUptime()); $vitals->addAttribute('Users', $this->_sys->getUsers()); $vitals->addAttribute('LoadAvg', $this->_sys->getLoad()); if ($this->_sys->getLoadPercent() !== null) { $vitals->addAttribute('CPULoad', $this->_sys->getLoadPercent()); } if ($this->_sysinfo->getLanguage() !== null) { $vitals->addAttribute('SysLang', $this->_sysinfo->getLanguage()); } if ($this->_sysinfo->getEncoding() !== null) { $vitals->addAttribute('CodePage', $this->_sysinfo->getEncoding()); } //processes if (($procss = $this->_sys->getProcesses()) !== null) { if (isset($procss['*']) && (($procall = $procss['*']) > 0)) { $vitals->addAttribute('Processes', $procall); if (!isset($procss[' ']) || !($procss[' '] > 0)) { // not unknown $procsum = 0; if (isset($procss['R']) && (($proctmp = $procss['R']) > 0)) { $vitals->addAttribute('ProcessesRunning', $proctmp); $procsum += $proctmp; } if (isset($procss['S']) && (($proctmp = $procss['S']) > 0)) { $vitals->addAttribute('ProcessesSleeping', $proctmp); $procsum += $proctmp; } if (isset($procss['T']) && (($proctmp = $procss['T']) > 0)) { $vitals->addAttribute('ProcessesStopped', $proctmp); $procsum += $proctmp; } if (isset($procss['Z']) && (($proctmp = $procss['Z']) > 0)) { $vitals->addAttribute('ProcessesZombie', $proctmp); $procsum += $proctmp; } if (isset($procss['D']) && (($proctmp = $procss['D']) > 0)) { $vitals->addAttribute('ProcessesWaiting', $proctmp); $procsum += $proctmp; } if (($proctmp = $procall - $procsum) > 0) { $vitals->addAttribute('ProcessesOther', $proctmp); } } } } if (($os = $this->_sys->getOS()) == 'Android') { $vitals->addAttribute('OS', 'Linux'); } elseif ($os == 'GNU') { $vitals->addAttribute('OS', 'Hurd'); } else { $vitals->addAttribute('OS', $os); } } /** * generate the network information * * @return void */ private function _buildNetwork() { $hideDevices = array(); $network = $this->_xml->addChild('Network'); if (defined('PSI_HIDE_NETWORK_INTERFACE')) { if (is_string(PSI_HIDE_NETWORK_INTERFACE)) { if (preg_match(ARRAY_EXP, PSI_HIDE_NETWORK_INTERFACE)) { $hideDevices = eval(PSI_HIDE_NETWORK_INTERFACE); } else { $hideDevices = array(PSI_HIDE_NETWORK_INTERFACE); } } elseif (PSI_HIDE_NETWORK_INTERFACE === true) { return; } } foreach ($this->_sys->getNetDevices() as $dev) { if (defined('PSI_HIDE_NETWORK_INTERFACE_REGEX') && PSI_HIDE_NETWORK_INTERFACE_REGEX) { $hide = false; foreach ($hideDevices as $hidedev) { if (preg_match('/^'.$hidedev.'$/', trim($dev->getName()))) { $hide = true; break; } } } else { $hide =in_array(trim($dev->getName()), $hideDevices); } if (!$hide) { $device = $network->addChild('NetDevice'); $device->addAttribute('Name', $dev->getName()); $rxbytes = $dev->getRxBytes(); $txbytes = $dev->getTxBytes(); $device->addAttribute('RxBytes', $rxbytes); $device->addAttribute('TxBytes', $txbytes); if (defined('PSI_SHOW_NETWORK_ACTIVE_SPEED') && PSI_SHOW_NETWORK_ACTIVE_SPEED) { if (($rxbytes == 0) && ($txbytes == 0)) { $rxrate = $dev->getRxRate(); $txrate = $dev->getTxRate(); if (($rxrate !== null) || ($txrate !== null)) { if ($rxrate !== null) { $device->addAttribute('RxRate', $rxrate); } else { $device->addAttribute('RxRate', 0); } if ($txrate !== null) { $device->addAttribute('TxRate', $txrate); } else { $device->addAttribute('TxRate', 0); } } } } $device->addAttribute('Err', $dev->getErrors()); $device->addAttribute('Drops', $dev->getDrops()); if (defined('PSI_SHOW_NETWORK_BRIDGE') && PSI_SHOW_NETWORK_BRIDGE && $dev->getBridge()) { $device->addAttribute('Bridge', $dev->getBridge()); } if (defined('PSI_SHOW_NETWORK_INFOS') && PSI_SHOW_NETWORK_INFOS && $dev->getInfo()) { $device->addAttribute('Info', $dev->getInfo()); } } } } /** * generate the hardware information * * @return void */ private function _buildHardware() { $hardware = $this->_xml->addChild('Hardware'); if (($machine = $this->_sys->getMachine()) != "") { $machine = trim(preg_replace("/\s+/", " ", preg_replace("/^\s*[\/,]*/", "", preg_replace("/\/\s+,/", "/,", $machine)))); // remove leading slash or comma and unnecessary spaces if (preg_match('/, BIOS .*$/', $machine, $mbuf, PREG_OFFSET_CAPTURE)) { $comapos = $mbuf[0][1]; $endstr = $mbuf[0][0]; $offset = 0; while (($offset < $comapos) && (($slashpos = strpos($machine, "/", $offset)) !== false) && ($slashpos < $comapos)) { $len1 = $comapos - $slashpos - 1; $str1 = substr($machine, $slashpos + 1, $len1); $begstr = substr($machine, 0, $slashpos); if ($len1 > 0) { // no empty $str2 = substr($begstr, -$len1 - 1); } else { $str2 = " "; } if ((" ".$str1 === $str2) || ($str1 === $begstr)) { // duplicates $machine = $begstr.$endstr; break; } $offset = $slashpos + 1; } } if ($machine != "") { $hardware->addAttribute('Name', $machine); } } if (defined('PSI_SHOW_VIRTUALIZER_INFO') && PSI_SHOW_VIRTUALIZER_INFO) { $virt = $this->_sys->getVirtualizer(); $virtstring = ""; foreach ($virt as $virtkey=>$virtvalue) if ($virtvalue) { if ($virtstring !== "") { $virtstring .= ", "; } if ($virtkey === 'microsoft') { if (!isset($virt["wsl"]) || !$virt["wsl"]) { $virtstring .= 'hyper-v'; } } elseif ($virtkey === 'kvm') { $virtstring .= 'qemu-kvm'; } elseif ($virtkey === 'oracle') { $virtstring .= 'virtualbox'; } elseif ($virtkey === 'zvm') { $virtstring .= 'z/vm'; } elseif ($virtkey === 'sre') { $virtstring .= 'lmhs sre'; } else { $virtstring .= $virtkey; } } if ($virtstring !== "") { $hardware->addAttribute('Virtualizer', $virtstring); } } $cpu = null; $vendortab = null; foreach ($this->_sys->getCpus() as $oneCpu) { if ($cpu === null) $cpu = $hardware->addChild('CPU'); $tmp = $cpu->addChild('CpuCore'); $tmp->addAttribute('Model', $oneCpu->getModel()); if ($oneCpu->getVoltage() > 0) { $tmp->addAttribute('Voltage', $oneCpu->getVoltage()); } if ($oneCpu->getCpuSpeed() > 0) { $tmp->addAttribute('CpuSpeed', $oneCpu->getCpuSpeed()); } elseif ($oneCpu->getCpuSpeed() == -1) { $tmp->addAttribute('CpuSpeed', 0); // core stopped } if ($oneCpu->getCpuSpeedMax() > 0) { $tmp->addAttribute('CpuSpeedMax', $oneCpu->getCpuSpeedMax()); } if ($oneCpu->getCpuSpeedMin() > 0) { $tmp->addAttribute('CpuSpeedMin', $oneCpu->getCpuSpeedMin()); } /* if ($oneCpu->getTemp() !== null) { $tmp->addAttribute('CpuTemp', $oneCpu->getTemp()); } */ if ($oneCpu->getBusSpeed() !== null) { $tmp->addAttribute('BusSpeed', $oneCpu->getBusSpeed()); } if ($oneCpu->getCache() !== null) { $tmp->addAttribute('Cache', $oneCpu->getCache()); } if ($oneCpu->getVirt() !== null) { $tmp->addAttribute('Virt', $oneCpu->getVirt()); } if ($oneCpu->getVendorId() !== null) { if ($vendortab === null) $vendortab = @parse_ini_file(PSI_APP_ROOT."/data/cpus.ini", true); $shortvendorid = $oneCpu->getVendorId(); if ($vendortab && ($shortvendorid != "") && isset($vendortab['manufacturer'][$shortvendorid])) { $tmp->addAttribute('Manufacturer', $vendortab['manufacturer'][$shortvendorid]); } } if ($oneCpu->getBogomips() !== null) { $tmp->addAttribute('Bogomips', $oneCpu->getBogomips()); } if ($oneCpu->getLoad() !== null) { $tmp->addAttribute('Load', $oneCpu->getLoad()); } } $mem = null; foreach (System::removeDupsAndCount($this->_sys->getMemDevices()) as $dev) { if ($mem === null) $mem = $hardware->addChild('MEM'); $tmp = $mem->addChild('Chip'); $tmp->addAttribute('Name', $dev->getName()); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if ($dev->getCapacity() !== null) { $tmp->addAttribute('Capacity', $dev->getCapacity()); } if ($dev->getManufacturer() !== null) { $tmp->addAttribute('Manufacturer', $dev->getManufacturer()); } if ($dev->getProduct() !== null) { $tmp->addAttribute('Product', $dev->getProduct()); } if ($dev->getSpeed() !== null) { $tmp->addAttribute('Speed', $dev->getSpeed()); } if ($dev->getVoltage() !== null) { $tmp->addAttribute('Voltage', $dev->getVoltage()); } if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && ($dev->getSerial() !== null)) { $tmp->addAttribute('Serial', $dev->getSerial()); } } if ($dev->getCount() > 1) { $tmp->addAttribute('Count', $dev->getCount()); } } $pci = null; foreach (System::removeDupsAndCount($this->_sys->getPciDevices()) as $dev) { if ($pci === null) $pci = $hardware->addChild('PCI'); $tmp = $pci->addChild('Device'); $tmp->addAttribute('Name', $dev->getName()); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if ($dev->getManufacturer() !== null) { $tmp->addAttribute('Manufacturer', $dev->getManufacturer()); } if ($dev->getProduct() !== null) { $tmp->addAttribute('Product', $dev->getProduct()); } } if ($dev->getCount() > 1) { $tmp->addAttribute('Count', $dev->getCount()); } } $ide = null; foreach (System::removeDupsAndCount($this->_sys->getIdeDevices()) as $dev) { if ($ide === null) $ide = $hardware->addChild('IDE'); $tmp = $ide->addChild('Device'); $tmp->addAttribute('Name', $dev->getName()); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if ($dev->getCapacity() !== null) { $tmp->addAttribute('Capacity', $dev->getCapacity()); } if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && ($dev->getSerial() !== null)) { $tmp->addAttribute('Serial', $dev->getSerial()); } } if ($dev->getCount() > 1) { $tmp->addAttribute('Count', $dev->getCount()); } } $scsi = null; foreach (System::removeDupsAndCount($this->_sys->getScsiDevices()) as $dev) { if ($scsi === null) $scsi = $hardware->addChild('SCSI'); $tmp = $scsi->addChild('Device'); $tmp->addAttribute('Name', $dev->getName()); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if ($dev->getCapacity() !== null) { $tmp->addAttribute('Capacity', $dev->getCapacity()); } if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && ($dev->getSerial() !== null)) { $tmp->addAttribute('Serial', $dev->getSerial()); } } if ($dev->getCount() > 1) { $tmp->addAttribute('Count', $dev->getCount()); } } $nvme = null; foreach (System::removeDupsAndCount($this->_sys->getNvmeDevices()) as $dev) { if ($nvme === null) $nvme = $hardware->addChild('NVMe'); $tmp = $nvme->addChild('Device'); $tmp->addAttribute('Name', $dev->getName()); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if ($dev->getCapacity() !== null) { $tmp->addAttribute('Capacity', $dev->getCapacity()); } if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && ($dev->getSerial() !== null)) { $tmp->addAttribute('Serial', $dev->getSerial()); } } if ($dev->getCount() > 1) { $tmp->addAttribute('Count', $dev->getCount()); } } $usb = null; foreach (System::removeDupsAndCount($this->_sys->getUsbDevices()) as $dev) { if ($usb === null) $usb = $hardware->addChild('USB'); $tmp = $usb->addChild('Device'); $tmp->addAttribute('Name', $dev->getName()); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if ($dev->getManufacturer() !== null) { $tmp->addAttribute('Manufacturer', $dev->getManufacturer()); } if ($dev->getProduct() !== null) { $tmp->addAttribute('Product', $dev->getProduct()); } if ($dev->getSpeed() !== null) { $tmp->addAttribute('Speed', $dev->getSpeed()); } if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL && ($dev->getSerial() !== null)) { $tmp->addAttribute('Serial', $dev->getSerial()); } } if ($dev->getCount() > 1) { $tmp->addAttribute('Count', $dev->getCount()); } } $tb = null; foreach (System::removeDupsAndCount($this->_sys->getTbDevices()) as $dev) { if ($tb === null) $tb = $hardware->addChild('TB'); $tmp = $tb->addChild('Device'); $tmp->addAttribute('Name', $dev->getName()); if ($dev->getCount() > 1) { $tmp->addAttribute('Count', $dev->getCount()); } } $i2c = null; foreach (System::removeDupsAndCount($this->_sys->getI2cDevices()) as $dev) { if ($i2c === null) $i2c = $hardware->addChild('I2C'); $tmp = $i2c->addChild('Device'); $tmp->addAttribute('Name', $dev->getName()); if ($dev->getCount() > 1) { $tmp->addAttribute('Count', $dev->getCount()); } } } /** * generate the memory information * * @return void */ private function _buildMemory() { $memory = $this->_xml->addChild('Memory'); $memory->addAttribute('Free', $this->_sys->getMemFree()); $memory->addAttribute('Used', $this->_sys->getMemUsed()); $memory->addAttribute('Total', $this->_sys->getMemTotal()); $memory->addAttribute('Percent', $this->_sys->getMemPercentUsed()); if (($this->_sys->getMemApplication() !== null) || ($this->_sys->getMemBuffer() !== null) || ($this->_sys->getMemCache() !== null)) { $details = $memory->addChild('Details'); if ($this->_sys->getMemApplication() !== null) { $details->addAttribute('App', $this->_sys->getMemApplication()); $details->addAttribute('AppPercent', $this->_sys->getMemPercentApplication()); } if ($this->_sys->getMemBuffer() !== null) { $details->addAttribute('Buffers', $this->_sys->getMemBuffer()); $details->addAttribute('BuffersPercent', $this->_sys->getMemPercentBuffer()); } if ($this->_sys->getMemCache() !== null) { $details->addAttribute('Cached', $this->_sys->getMemCache()); $details->addAttribute('CachedPercent', $this->_sys->getMemPercentCache()); } } if (count($this->_sys->getSwapDevices()) > 0) { $swap = $memory->addChild('Swap'); $swap->addAttribute('Free', $this->_sys->getSwapFree()); $swap->addAttribute('Used', $this->_sys->getSwapUsed()); $swap->addAttribute('Total', $this->_sys->getSwapTotal()); $swap->addAttribute('Percent', $this->_sys->getSwapPercentUsed()); $i = 1; foreach ($this->_sys->getSwapDevices() as $dev) { $swapMount = $swap->addChild('Mount'); $this->_fillDevice($swapMount, $dev, $i++); } } } /** * fill a xml element with atrributes from a disk device * * @param SimpleXmlExtended $mount Xml-Element * @param DiskDevice $dev DiskDevice * @param int $i counter * * @return void */ private function _fillDevice(SimpleXMLExtended $mount, DiskDevice $dev, $i) { $mount->addAttribute('MountPointID', $i); if ($dev->getFsType()!=="") { $mount->addAttribute('FSType', $dev->getFsType()); } $mount->addAttribute('Name', $dev->getName()); $mount->addAttribute('Free', sprintf("%.0f", $dev->getFree())); $mount->addAttribute('Used', sprintf("%.0f", $dev->getUsed())); $mount->addAttribute('Total', sprintf("%.0f", $dev->getTotal())); $percentUsed = $dev->getPercentUsed(); $mount->addAttribute('Percent', $percentUsed); if ($dev->getPercentInodesUsed() !== null) { $mount->addAttribute('Inodes', $dev->getPercentInodesUsed()); } if ($dev->getIgnore() > 0) $mount->addAttribute('Ignore', $dev->getIgnore()); if (PSI_SHOW_MOUNT_OPTION) { if ($dev->getOptions() !== null) { $mount->addAttribute('MountOptions', preg_replace("/,/", ", ", $dev->getOptions())); } } if (PSI_SHOW_MOUNT_POINT && ($dev->getMountPoint() !== null)) { $mount->addAttribute('MountPoint', $dev->getMountPoint()); } } /** * generate the filesysteminformation * * @return void */ private function _buildFilesystems() { $hideMounts = $hideFstypes = $hideDisks = $ignoreFree = $ignoreTotal = $ignoreUsage = $ignoreThreshold = array(); if (defined('PSI_HIDE_MOUNTS') && is_string(PSI_HIDE_MOUNTS)) { if (preg_match(ARRAY_EXP, PSI_HIDE_MOUNTS)) { $hideMounts = eval(PSI_HIDE_MOUNTS); } else { $hideMounts = array(PSI_HIDE_MOUNTS); } } if (defined('PSI_HIDE_FS_TYPES') && is_string(PSI_HIDE_FS_TYPES)) { if (preg_match(ARRAY_EXP, PSI_HIDE_FS_TYPES)) { $hideFstypes = eval(PSI_HIDE_FS_TYPES); } else { $hideFstypes = array(PSI_HIDE_FS_TYPES); } } if (defined('PSI_HIDE_DISKS')) { if (is_string(PSI_HIDE_DISKS)) { if (preg_match(ARRAY_EXP, PSI_HIDE_DISKS)) { $hideDisks = eval(PSI_HIDE_DISKS); } else { $hideDisks = array(PSI_HIDE_DISKS); } } elseif (PSI_HIDE_DISKS === true) { return; } } if (defined('PSI_IGNORE_FREE') && is_string(PSI_IGNORE_FREE)) { if (preg_match(ARRAY_EXP, PSI_IGNORE_FREE)) { $ignoreFree = eval(PSI_IGNORE_FREE); } else { $ignoreFree = array(PSI_IGNORE_FREE); } } if (defined('PSI_IGNORE_TOTAL') && is_string(PSI_IGNORE_TOTAL)) { if (preg_match(ARRAY_EXP, PSI_IGNORE_TOTAL)) { $ignoreTotal = eval(PSI_IGNORE_TOTAL); } else { $ignoreTotal = array(PSI_IGNORE_TOTAL); } } if (defined('PSI_IGNORE_USAGE') && is_string(PSI_IGNORE_USAGE)) { if (preg_match(ARRAY_EXP, PSI_IGNORE_USAGE)) { $ignoreUsage = eval(PSI_IGNORE_USAGE); } else { $ignoreUsage = array(PSI_IGNORE_USAGE); } } if (defined('PSI_IGNORE_THRESHOLD_FS_TYPES') && is_string(PSI_IGNORE_THRESHOLD_FS_TYPES)) { if (preg_match(ARRAY_EXP, PSI_IGNORE_THRESHOLD_FS_TYPES)) { $ignoreThreshold = eval(PSI_IGNORE_THRESHOLD_FS_TYPES); } else { $ignoreThreshold = array(PSI_IGNORE_THRESHOLD_FS_TYPES); } } $fs = $this->_xml->addChild('FileSystem'); $i = 1; foreach ($this->_sys->getDiskDevices() as $disk) { if (!in_array($disk->getMountPoint(), $hideMounts, true) && !in_array($disk->getFsType(), $hideFstypes, true) && !in_array($disk->getName(), $hideDisks, true)) { $mount = $fs->addChild('Mount'); if (in_array($disk->getFsType(), $ignoreThreshold, true)) { $disk->setIgnore(4); } elseif (in_array($disk->getMountPoint(), $ignoreUsage, true)) { $disk->setIgnore(3); } elseif (in_array($disk->getMountPoint(), $ignoreTotal, true)) { $disk->setIgnore(2); } elseif (in_array($disk->getMountPoint(), $ignoreFree, true)) { $disk->setIgnore(1); } $this->_fillDevice($mount, $disk, $i++); } } } /** * generate the motherboard information * * @return void */ private function _buildMbinfo() { $mbinfo = $this->_xml->addChild('MBInfo'); $temp = $fan = $volt = $power = $current = $other = null; $hideSensors = array(); if (sizeof(unserialize(PSI_MBINFO))>0) { if (defined('PSI_HIDE_SENSORS') && is_string(PSI_HIDE_SENSORS)) { if (preg_match(ARRAY_EXP, PSI_HIDE_SENSORS)) { $hideSensors = eval(PSI_HIDE_SENSORS); } else { $hideSensors = array(PSI_HIDE_SENSORS); } } foreach (unserialize(PSI_MBINFO) as $mbinfoclass) { $mbinfo_data = new $mbinfoclass(); $mbinfo_detail = $mbinfo_data->getMBInfo(); if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='temperature' || $this->_sysinfo->getBlockName()==='mbinfo') foreach ($mbinfo_detail->getMbTemp() as $dev) { $mbinfo_name = $dev->getName(); if (!in_array($mbinfo_name, $hideSensors, true)) { if ($temp == null) { $temp = $mbinfo->addChild('Temperature'); } $item = $temp->addChild('Item'); $item->addAttribute('Label', $mbinfo_name); $item->addAttribute('Value', $dev->getValue()); $alarm = false; if ($dev->getMax() !== null) { $item->addAttribute('Max', $dev->getMax()); $alarm = true; } if (defined('PSI_SENSOR_EVENTS') && PSI_SENSOR_EVENTS && ($dev->getEvent() !== "") && (((strtolower($dev->getEvent())) !== "alarm") || $alarm || ($dev->getValue() == 0))) { $item->addAttribute('Event', ucfirst(strtolower($dev->getEvent()))); } } } if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='fans' || $this->_sysinfo->getBlockName()==='mbinfo') foreach ($mbinfo_detail->getMbFan() as $dev) { $mbinfo_name = $dev->getName(); if (!in_array($mbinfo_name, $hideSensors, true)) { if ($fan == null) { $fan = $mbinfo->addChild('Fans'); } $item = $fan->addChild('Item'); $item->addAttribute('Label', $mbinfo_name); $item->addAttribute('Value', $dev->getValue()); $alarm = false; if ($dev->getMin() !== null) { $item->addAttribute('Min', $dev->getMin()); $alarm = true; } if ($dev->getUnit() !== "") { $item->addAttribute('Unit', $dev->getUnit()); } if (defined('PSI_SENSOR_EVENTS') && PSI_SENSOR_EVENTS && ($dev->getEvent() !== "") && (((strtolower($dev->getEvent())) !== "alarm") || $alarm || ($dev->getValue() == 0))) { $item->addAttribute('Event', ucfirst(strtolower($dev->getEvent()))); } } } if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='voltage' || $this->_sysinfo->getBlockName()==='mbinfo') foreach ($mbinfo_detail->getMbVolt() as $dev) { $mbinfo_name = $dev->getName(); if (!in_array($mbinfo_name, $hideSensors, true)) { if ($volt == null) { $volt = $mbinfo->addChild('Voltage'); } $item = $volt->addChild('Item'); $item->addAttribute('Label', $mbinfo_name); $item->addAttribute('Value', $dev->getValue()); $alarm = false; if (($dev->getMin() === null) || ($dev->getMin() != 0) || ($dev->getMax() === null) || ($dev->getMax() != 0)) { if ($dev->getMin() !== null) { $item->addAttribute('Min', $dev->getMin()); $alarm = true; } if ($dev->getMax() !== null) { $item->addAttribute('Max', $dev->getMax()); $alarm = true; } } if (defined('PSI_SENSOR_EVENTS') && PSI_SENSOR_EVENTS && ($dev->getEvent() !== "") && (((strtolower($dev->getEvent())) !== "alarm") || $alarm || ($dev->getValue() == 0))) { $item->addAttribute('Event', ucfirst(strtolower($dev->getEvent()))); } } } if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='power' || $this->_sysinfo->getBlockName()==='mbinfo') foreach ($mbinfo_detail->getMbPower() as $dev) { $mbinfo_name = $dev->getName(); if (!in_array($mbinfo_name, $hideSensors, true)) { if ($power == null) { $power = $mbinfo->addChild('Power'); } $item = $power->addChild('Item'); $item->addAttribute('Label', $mbinfo_name); $item->addAttribute('Value', $dev->getValue()); $alarm = false; if ($dev->getMax() !== null) { $item->addAttribute('Max', $dev->getMax()); $alarm = true; } if (defined('PSI_SENSOR_EVENTS') && PSI_SENSOR_EVENTS && ($dev->getEvent() !== "") && (((strtolower($dev->getEvent())) !== "alarm") || $alarm || ($dev->getValue() == 0))) { $item->addAttribute('Event', ucfirst(strtolower($dev->getEvent()))); } } } if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='current' || $this->_sysinfo->getBlockName()==='mbinfo') foreach ($mbinfo_detail->getMbCurrent() as $dev) { $mbinfo_name = $dev->getName(); if (!in_array($mbinfo_name, $hideSensors, true)) { if ($current == null) { $current = $mbinfo->addChild('Current'); } $item = $current->addChild('Item'); $item->addAttribute('Label', $mbinfo_name); $item->addAttribute('Value', $dev->getValue()); $alarm = false; if (($dev->getMin() === null) || ($dev->getMin() != 0) || ($dev->getMax() === null) || ($dev->getMax() != 0)) { if ($dev->getMin() !== null) { $item->addAttribute('Min', $dev->getMin()); $alarm = true; } if ($dev->getMax() !== null) { $item->addAttribute('Max', $dev->getMax()); $alarm = true; } } if (defined('PSI_SENSOR_EVENTS') && PSI_SENSOR_EVENTS && ($dev->getEvent() !== "") && (((strtolower($dev->getEvent())) !== "alarm") || $alarm || ($dev->getValue() == 0))) { $item->addAttribute('Event', ucfirst(strtolower($dev->getEvent()))); } } } if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='other' || $this->_sysinfo->getBlockName()==='mbinfo') foreach ($mbinfo_detail->getMbOther() as $dev) { $mbinfo_name = $dev->getName(); if (!in_array($mbinfo_name, $hideSensors, true)) { if ($other == null) { $other = $mbinfo->addChild('Other'); } $item = $other->addChild('Item'); $item->addAttribute('Label', $mbinfo_name); $item->addAttribute('Value', $dev->getValue()); if ($dev->getUnit() !== "") { $item->addAttribute('Unit', $dev->getUnit()); } if (defined('PSI_SENSOR_EVENTS') && PSI_SENSOR_EVENTS && $dev->getEvent() !== "") { $item->addAttribute('Event', ucfirst(strtolower($dev->getEvent()))); } } } } } } /** * generate the ups information * * @return void */ private function _buildUpsinfo() { $upsinfo = $this->_xml->addChild('UPSInfo'); if (!defined('PSI_EMU_HOSTNAME') && defined('PSI_UPS_APCUPSD_CGI_ENABLE') && PSI_UPS_APCUPSD_CGI_ENABLE) { $upsinfo->addAttribute('ApcupsdCgiLinks', true); } if (sizeof(unserialize(PSI_UPSINFO))>0) { foreach (unserialize(PSI_UPSINFO) as $upsinfoclass) { $upsinfo_data = new $upsinfoclass(); $upsinfo_detail = $upsinfo_data->getUPSInfo(); foreach ($upsinfo_detail->getUpsDevices() as $ups) { $item = $upsinfo->addChild('UPS'); $item->addAttribute('Name', $ups->getName()); if ($ups->getModel() !== "") { $item->addAttribute('Model', $ups->getModel()); } if ($ups->getMode() !== "") { $item->addAttribute('Mode', $ups->getMode()); } if ($ups->getStartTime() !== "") { $item->addAttribute('StartTime', $ups->getStartTime()); } $item->addAttribute('Status', $ups->getStatus()); if ($ups->getBeeperStatus() !== null) { $item->addAttribute('BeeperStatus', $ups->getBeeperStatus()); } if ($ups->getTemperatur() !== null) { $item->addAttribute('Temperature', $ups->getTemperatur()); } if ($ups->getOutages() !== null) { $item->addAttribute('OutagesCount', $ups->getOutages()); } if ($ups->getLastOutage() !== null) { $item->addAttribute('LastOutage', $ups->getLastOutage()); } if ($ups->getLastOutageFinish() !== null) { $item->addAttribute('LastOutageFinish', $ups->getLastOutageFinish()); } if ($ups->getLineVoltage() !== null) { $item->addAttribute('LineVoltage', $ups->getLineVoltage()); } if ($ups->getLineFrequency() !== null) { $item->addAttribute('LineFrequency', $ups->getLineFrequency()); } if ($ups->getLoad() !== null) { $item->addAttribute('LoadPercent', $ups->getLoad()); } if ($ups->getBatteryDate() !== null) { $item->addAttribute('BatteryDate', $ups->getBatteryDate()); } if ($ups->getBatteryVoltage() !== null) { $item->addAttribute('BatteryVoltage', $ups->getBatteryVoltage()); } if ($ups->getBatterCharge() !== null) { $item->addAttribute('BatteryChargePercent', $ups->getBatterCharge()); } if ($ups->getTimeLeft() !== null) { $item->addAttribute('TimeLeftMinutes', $ups->getTimeLeft()); } } } } } /** * generate the xml document * * @return void */ private function _buildXml() { if (($this->_plugin == '') || $this->_complete_request) { if ($this->_sys === null) { if (PSI_DEBUG) { // unstable version check if (!is_numeric(substr(PSI_VERSION, -1))) { $this->_errors->addWarning("This is an unstable version of phpSysInfo, some things may not work correctly"); } // Safe mode check $safe_mode = @ini_get("safe_mode") ? true : false; if ($safe_mode) { $this->_errors->addError("WARN", "PhpSysInfo requires to set off 'safe_mode' in 'php.ini'"); } // Include path check $include_path = @ini_get("include_path"); if ($include_path && ($include_path!="")) { $include_path = preg_replace("/(:)|(;)/", "\n", $include_path); if (preg_match("/^\.$/m", $include_path)) { $include_path = "."; } } if ($include_path != ".") { $this->_errors->addError("WARN", "PhpSysInfo requires '.' inside the 'include_path' in php.ini"); } // popen mode check if (defined("PSI_MODE_POPEN") && PSI_MODE_POPEN) { $this->_errors->addError("WARN", "Installed version of PHP does not support proc_open() function, popen() is used"); } } $this->_sys = $this->_sysinfo->getSys(); } if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='vitals') $this->_buildVitals(); if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='network') $this->_buildNetwork(); if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='hardware') $this->_buildHardware(); if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='memory') $this->_buildMemory(); if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='filesystem') $this->_buildFilesystems(); if (!$this->_sysinfo->getBlockName() || in_array($this->_sysinfo->getBlockName(), array('mbinfo','voltage','current','temperature','fans','power','other'))) $this->_buildMbinfo(); if (!$this->_sysinfo->getBlockName() || $this->_sysinfo->getBlockName()==='ups') $this->_buildUpsinfo(); } if (!$this->_sysinfo->getBlockName()) $this->_buildPlugins(); $this->_xml->combinexml($this->_errors->errorsAddToXML($this->_sysinfo->getEncoding())); } /** * get the xml object * * @return SimpleXmlElement */ public function getXml() { $this->_buildXml(); return $this->_xml->getSimpleXmlElement(); } /** * include xml-trees of the plugins to the main xml * * @return void */ private function _buildPlugins() { $pluginroot = $this->_xml->addChild("Plugins"); if ((($this->_plugin != '') || $this->_complete_request) && count($this->_plugins) > 0) { $plugins = array(); if ($this->_complete_request) { $plugins = $this->_plugins; } if (($this->_plugin != '')) { $plugins = array($this->_plugin); } foreach ($plugins as $plugin) { if (!$this->_complete_request || (!defined('PSI_PLUGIN_'.strtoupper($plugin).'_SSH_HOSTNAME') && !defined('PSI_PLUGIN_'.strtoupper($plugin).'_WMI_HOSTNAME')) || (defined('PSI_SSH_HOSTNAME') && (PSI_SSH_HOSTNAME == constant('PSI_PLUGIN_'.strtoupper($plugin).'_SSH_HOSTNAME'))) || (defined('PSI_WMI_HOSTNAME') && (PSI_WMI_HOSTNAME == constant('PSI_PLUGIN_'.strtoupper($plugin).'_WMI_HOSTNAME')))) { $object = new $plugin($this->_sysinfo->getEncoding()); $object->execute(); $oxml = $object->xml(); if (sizeof($oxml) > 0) { $pluginroot->combinexml($oxml); } } } } } /** * build the xml structure where the content can be inserted * * @return void */ private function _xmlbody() { $dom = new DOMDocument('1.0', 'UTF-8'); $root = $dom->createElement("tns:phpsysinfo"); $root->setAttribute('xmlns:tns', 'http://phpsysinfo.sourceforge.net/'); $root->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); $root->setAttribute('xsi:schemaLocation', 'http://phpsysinfo.sourceforge.net/ phpsysinfo3.xsd'); $dom->appendChild($root); $this->_xml = new SimpleXMLExtended(simplexml_import_dom($dom), $this->_sysinfo->getEncoding()); $generation = $this->_xml->addChild('Generation'); $generation->addAttribute('version', PSI_VERSION_STRING); $generation->addAttribute('timestamp', time()); $options = $this->_xml->addChild('Options'); $options->addAttribute('tempFormat', defined('PSI_TEMP_FORMAT') ? strtolower(PSI_TEMP_FORMAT) : 'c'); $options->addAttribute('byteFormat', defined('PSI_BYTE_FORMAT') ? strtolower(PSI_BYTE_FORMAT) : 'auto_binary'); $options->addAttribute('datetimeFormat', defined('PSI_DATETIME_FORMAT') ? strtolower(PSI_DATETIME_FORMAT) : 'utc'); if (defined('PSI_REFRESH')) { $options->addAttribute('refresh', max(intval(PSI_REFRESH), 0)); } else { $options->addAttribute('refresh', 60000); } if (defined('PSI_FS_USAGE_THRESHOLD')) { if ((($fsut = intval(PSI_FS_USAGE_THRESHOLD)) >= 1) && ($fsut <= 99)) { $options->addAttribute('threshold', $fsut); } } else { $options->addAttribute('threshold', 90); } if (count($this->_plugins) > 0) { if (($this->_plugin != '')) { $plug = $this->_xml->addChild('UsedPlugins'); $plug->addChild('Plugin')->addAttribute('name', $this->_plugin); } elseif ($this->_complete_request) { $plug = $this->_xml->addChild('UsedPlugins'); foreach ($this->_plugins as $plugin) { $plug->addChild('Plugin')->addAttribute('name', $plugin); } /* } else { $plug = $this->_xml->addChild('UnusedPlugins'); foreach ($this->_plugins as $plugin) { $plug->addChild('Plugin')->addAttribute('name', $plugin); } */ } } } } phpsysinfo-3.4.4/index.php000066400000000000000000000050441467431054600155610ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: index.php 687 2012-09-06 20:54:49Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * define the application root path on the webserver * @var string */ define('PSI_APP_ROOT', dirname(__FILE__)); if (version_compare("5.1.3", PHP_VERSION, ">")) { die("PHP 5.1.3 or greater is required!!!"); } if (!extension_loaded("pcre")) { die("phpSysInfo requires the pcre extension to php in order to work properly."); } require_once PSI_APP_ROOT.'/includes/autoloader.inc.php'; // Load configuration require_once PSI_APP_ROOT.'/read_config.php'; if (!defined('PSI_CONFIG_FILE') || !defined('PSI_DEBUG')) { $tpl = new Template("/templates/html/error_config.html"); echo $tpl->fetch(); die(); } // redirect to page with and without javascript $display = strtolower(isset($_GET['disp']) ? $_GET['disp'] : PSI_DEFAULT_DISPLAY_MODE); switch ($display) { case "static": $webpage = new WebpageXSLT(); $webpage->run(); break; case "dynamic": $webpage = new Webpage(); $webpage->run(); break; case "xml": $webpage = new WebpageXML("complete"); $webpage->run(); break; case "json": $webpage = new WebpageXML("complete"); $json = $webpage->getJsonString(); header('Cache-Control: no-cache, must-revalidate'); header('Content-Type: application/json'); echo $json; break; case "bootstrap": /* $tpl = new Template("/templates/html/index_bootstrap.html"); echo $tpl->fetch(); */ $webpage = new Webpage("bootstrap"); $webpage->run(); break; case "auto": $tpl = new Template("/templates/html/index_all.html"); echo $tpl->fetch(); break; default: $defaultdisplay = strtolower(PSI_DEFAULT_DISPLAY_MODE); switch ($defaultdisplay) { case "static": $webpage = new WebpageXSLT(); $webpage->run(); break; case "dynamic": $webpage = new Webpage(); $webpage->run(); break; case "bootstrap": $webpage = new Webpage("bootstrap"); $webpage->run(); break; default: $tpl = new Template("/templates/html/index_all.html"); echo $tpl->fetch(); } } phpsysinfo-3.4.4/js.php000066400000000000000000000053041467431054600150650ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: js.php 661 2012-08-27 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ /** * application root path * * @var string */ define('PSI_APP_ROOT', dirname(__FILE__)); require_once PSI_APP_ROOT.'/includes/autoloader.inc.php'; require_once PSI_APP_ROOT.'/read_config.php'; $file = isset($_GET['name']) ? basename(htmlspecialchars($_GET['name'])) : null; $plugin = isset($_GET['plugin']) ? basename(htmlspecialchars($_GET['plugin'])) : null; $script = null; if ($file != null && $plugin == null) { if (strtolower(substr($file, 0, 6)) == 'jquery') { $script = PSI_APP_ROOT.'/js/jQuery/'.$file; } elseif (strtolower(substr($file, 0, 10)) == 'phpsysinfo') { $script = PSI_APP_ROOT.'/js/phpSysInfo/'.$file; } else { $script = PSI_APP_ROOT.'/js/vendor/'.$file; } } elseif ($file == null && $plugin != null) { $script = PSI_APP_ROOT.'/plugins/'.strtolower($plugin).'/js/'.strtolower($plugin); } elseif ($file != null && $plugin != null) { $script = PSI_APP_ROOT.'/plugins/'.strtolower($plugin).'/js/'.strtolower($file); } if ($script != null) { $scriptjs = $script.'.js'; $scriptmin = $script.'.min.js'; $compression = false; header('content-type: application/x-javascript'); if ((!defined("PSI_DEBUG") || (PSI_DEBUG !== true)) && defined("PSI_JS_COMPRESSION")) { $compression = strtolower(PSI_JS_COMPRESSION); } switch ($compression) { case "normal": if (file_exists($scriptmin) && is_readable($scriptmin)) { echo file_get_contents($scriptmin); } elseif (file_exists($scriptjs) && is_readable($scriptjs)) { $packer = new JavaScriptPacker(file_get_contents($scriptjs)); echo $packer->pack(); } break; case "none": if (file_exists($scriptjs) && is_readable($scriptjs)) { $packer = new JavaScriptPacker(file_get_contents($scriptjs), 0); echo $packer->pack(); } elseif (file_exists($scriptmin) && is_readable($scriptmin)) { echo file_get_contents($scriptmin); } break; default: if (file_exists($scriptjs) && is_readable($scriptjs)) { echo file_get_contents($scriptjs); } elseif (file_exists($scriptmin) && is_readable($scriptmin)) { echo file_get_contents($scriptmin); } } } phpsysinfo-3.4.4/js/000077500000000000000000000000001467431054600143525ustar00rootroot00000000000000phpsysinfo-3.4.4/js/jQuery/000077500000000000000000000000001467431054600156315ustar00rootroot00000000000000phpsysinfo-3.4.4/js/jQuery/README000066400000000000000000000052051467431054600165130ustar00rootroot00000000000000versions, links and simple description of used jquery files =========================================================== jquery.js --------- VERSION : v1.12.4-ff3fix-ff2fix-CVE_2015_9251fix-CVE_2019_11358fix-CVE_2020_11022fix-CVE_2020_11023fix URL : http://jquery.com/ DESC : jQuery is a fast, concise, JavaScript Library that simplifies how you traverse HTML documents, handle events, perform animations, and add Ajax interactions to your web pages. USED : used for the entire userinterface jquery.dataTables.js -------------------- VERSION : 1.8.2+jquery1.9fix+parseJSONfix2+bindfix+samesitefix+noeval URL : http://plugins.jquery.com/project/DataTables DESC : dataTables is a jQuery plugin for turning a standard HTML table with THEAD and TBODY tags into a sortable table without page refreshes. USED : provide tablesorting for the filesystem table jquery.nyroModal.js ------------------- VERSION : 1.6.2+jquery1.8fix+bindfix+ff2fix URL : http://plugins.jquery.com/project/nyroModal DESC : nyroModal is a high customizable modal window plugin. USED : provide a modal dialog, that is shown when errors are found during execution of the php parsers, or lets say in this way: if there are error elements in the xml file jquery.timer.js ---------------- VERSION : 0.1 URL : http://plugins.jquery.com/project/Timer; https://github.com/sloat/timer DESC : provides a cleaner way to handle intervals USED : automatic reloading of the entire page jquery.jgrowl.js ---------------- VERSION : 1.2.6+jquery1.9fix+jquery3fix+bindfix URL : http://plugins.jquery.com/project/jGrowl DESC : jGrowl is a jQuery plugin that raises unobtrusive messages within the browser, similar to the way that OS X's Growl Framework works USED : show alert and error message jquery.treeTable.js ------------------- VERSION : 2009-06-22+statefix+spanfix+altfix+undefinedfix+ie6cachefix+multilinefix+divfix URL : http://plugins.jquery.com/project/jQTreeTable; http://www.hanpau.com/index.php?page=jqtreetable DESC : Take a plain html table, wrap the rows you want collapsing/expanding in a tbody tag with an id of treetable, map each row to it's parent row, set some options, and let jQTreeTable take it from there. USED : Hardware, Memory, UPS blocks jquery.ifixpng.js ------------------- VERSION : 2.1 (23/04/2008)+jquery1.9fix URL : http://jquery.khurshid.com DESC : Designed to fix that problem by applying appropriate filters to user specified elements, while keeping all element tags intact. USED : used for the entire userinterface $Id: README 702 2012-09-21 16:52:32Z namiltd $ phpsysinfo-3.4.4/js/jQuery/README_bootstrap000066400000000000000000000015341467431054600206110ustar00rootroot00000000000000versions, links and simple description of used jquery files =========================================================== jquery.js --------- VERSION : v1.12.4-ff3fix-ff2fix-CVE_2015_9251fix-CVE_2019_11358fix-CVE_2020_11022fix-CVE_2020_11023fix URL : http://jquery.com/ DESC : jQuery is a fast, concise, JavaScript Library that simplifies how you traverse HTML documents, handle events, perform animations, and add Ajax interactions to your web pages. USED : used for the entire userinterface jquery.treegrid.js ------------------- VERSION : 0.3.0 URL : http://plugins.jquery.com/treegrid/; http://maxazan.github.io/jquery-treegrid/ DESC : TreeGrid is a lightweight and flexible jQuery plugin to create a tree grid component that renders hierarchical, nested and flat data in a table. USED : Hardware, Memory, UPS blocks phpsysinfo-3.4.4/js/jQuery/jquery.dataTables.js000066400000000000000000007022351467431054600215620ustar00rootroot00000000000000/* * File: jquery.dataTables.js * Version: 1.8.2+jquery1.9fix+parseJSONfix2+bindfix+samesitefix+noeval * Description: Paginate, search and sort HTML tables * Author: Allan Jardine (www.sprymedia.co.uk) * Created: 28/3/2008 * Language: Javascript * License: GPL v2 or BSD 3 point style * Project: Mtaala * Contact: allan.jardine@sprymedia.co.uk * * Copyright 2008-2011 Allan Jardine, all rights reserved. * * This source file is free software, under either the GPL v2 license or a * BSD style license, as supplied with this software. * * This source file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. * * For details please refer to: http://www.datatables.net */ /* * When considering jsLint, we need to allow eval() as it it is used for reading cookies */ /*jslint evil: true, undef: true, browser: true */ /*globals $, jQuery,_fnExternApiFunc,_fnInitialise,_fnInitComplete,_fnLanguageProcess,_fnAddColumn,_fnColumnOptions,_fnAddData,_fnCreateTr,_fnGatherData,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnServerParams,_fnAddOptionsHtml,_fnFeatureHtmlTable,_fnScrollDraw,_fnAdjustColumnSizing,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnBuildSearchArray,_fnBuildSearchRow,_fnFilterCreateSearch,_fnDataToSearch,_fnSort,_fnSortAttachListener,_fnSortingClasses,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnFeatureHtmlLength,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnNodeToDataIndex,_fnVisbleColumns,_fnCalculateEnd,_fnConvertToWidth,_fnCalculateColumnWidths,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnArrayCmp,_fnDetectType,_fnSettingsFromNode,_fnGetDataMaster,_fnGetTrNodes,_fnGetTdNodes,_fnEscapeRegex,_fnDeleteIndex,_fnReOrderIndex,_fnColumnOrdering,_fnLog,_fnClearTable,_fnSaveState,_fnLoadState,_fnCreateCookie,_fnReadCookie,_fnDetectHeader,_fnGetUniqueThs,_fnScrollBarWidth,_fnApplyToChildren,_fnMap,_fnGetRowData,_fnGetCellData,_fnSetCellData,_fnGetObjectDataFn,_fnSetObjectDataFn*/ (function($, window, document) { /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Section - DataTables variables * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * Variable: dataTableSettings * Purpose: Store the settings for each dataTables instance * Scope: jQuery.fn */ $.fn.dataTableSettings = []; var _aoSettings = $.fn.dataTableSettings; /* Short reference for fast internal lookup */ /* * Variable: dataTableExt * Purpose: Container for customisable parts of DataTables * Scope: jQuery.fn */ $.fn.dataTableExt = {}; var _oExt = $.fn.dataTableExt; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Section - DataTables extensible objects * * The _oExt object is used to provide an area where user defined plugins can be * added to DataTables. The following properties of the object are used: * oApi - Plug-in API functions * aTypes - Auto-detection of types * oSort - Sorting functions used by DataTables (based on the type) * oPagination - Pagination functions for different input styles * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * Variable: sVersion * Purpose: Version string for plug-ins to check compatibility * Scope: jQuery.fn.dataTableExt * Notes: Allowed format is a.b.c.d.e where: * a:int, b:int, c:int, d:string(dev|beta), e:int. d and e are optional */ _oExt.sVersion = "1.8.2"; /* * Variable: sErrMode * Purpose: How should DataTables report an error. Can take the value 'alert' or 'throw' * Scope: jQuery.fn.dataTableExt */ _oExt.sErrMode = "alert"; /* * Variable: iApiIndex * Purpose: Index for what 'this' index API functions should use * Scope: jQuery.fn.dataTableExt */ _oExt.iApiIndex = 0; /* * Variable: oApi * Purpose: Container for plugin API functions * Scope: jQuery.fn.dataTableExt */ _oExt.oApi = { }; /* * Variable: aFiltering * Purpose: Container for plugin filtering functions * Scope: jQuery.fn.dataTableExt */ _oExt.afnFiltering = [ ]; /* * Variable: aoFeatures * Purpose: Container for plugin function functions * Scope: jQuery.fn.dataTableExt * Notes: Array of objects with the following parameters: * fnInit: Function for initialisation of Feature. Takes oSettings and returns node * cFeature: Character that will be matched in sDom - case sensitive * sFeature: Feature name - just for completeness :-) */ _oExt.aoFeatures = [ ]; /* * Variable: ofnSearch * Purpose: Container for custom filtering functions * Scope: jQuery.fn.dataTableExt * Notes: This is an object (the name should match the type) for custom filtering function, * which can be used for live DOM checking or formatted text filtering */ _oExt.ofnSearch = { }; /* * Variable: afnSortData * Purpose: Container for custom sorting data source functions * Scope: jQuery.fn.dataTableExt * Notes: Array (associative) of functions which is run prior to a column of this * 'SortDataType' being sorted upon. * Function input parameters: * object:oSettings- DataTables settings object * int:iColumn - Target column number * Return value: Array of data which exactly matched the full data set size for the column to * be sorted upon */ _oExt.afnSortData = [ ]; /* * Variable: oStdClasses * Purpose: Storage for the various classes that DataTables uses * Scope: jQuery.fn.dataTableExt */ _oExt.oStdClasses = { /* Two buttons buttons */ "sPagePrevEnabled": "paginate_enabled_previous", "sPagePrevDisabled": "paginate_disabled_previous", "sPageNextEnabled": "paginate_enabled_next", "sPageNextDisabled": "paginate_disabled_next", "sPageJUINext": "", "sPageJUIPrev": "", /* Full numbers paging buttons */ "sPageButton": "paginate_button", "sPageButtonActive": "paginate_active", "sPageButtonStaticDisabled": "paginate_button paginate_button_disabled", "sPageFirst": "first", "sPagePrevious": "previous", "sPageNext": "next", "sPageLast": "last", /* Striping classes */ "sStripeOdd": "odd", "sStripeEven": "even", /* Empty row */ "sRowEmpty": "dataTables_empty", /* Features */ "sWrapper": "dataTables_wrapper", "sFilter": "dataTables_filter", "sInfo": "dataTables_info", "sPaging": "dataTables_paginate paging_", /* Note that the type is postfixed */ "sLength": "dataTables_length", "sProcessing": "dataTables_processing", /* Sorting */ "sSortAsc": "sorting_asc", "sSortDesc": "sorting_desc", "sSortable": "sorting", /* Sortable in both directions */ "sSortableAsc": "sorting_asc_disabled", "sSortableDesc": "sorting_desc_disabled", "sSortableNone": "sorting_disabled", "sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */ "sSortJUIAsc": "", "sSortJUIDesc": "", "sSortJUI": "", "sSortJUIAscAllowed": "", "sSortJUIDescAllowed": "", "sSortJUIWrapper": "", "sSortIcon": "", /* Scrolling */ "sScrollWrapper": "dataTables_scroll", "sScrollHead": "dataTables_scrollHead", "sScrollHeadInner": "dataTables_scrollHeadInner", "sScrollBody": "dataTables_scrollBody", "sScrollFoot": "dataTables_scrollFoot", "sScrollFootInner": "dataTables_scrollFootInner", /* Misc */ "sFooterTH": "" }; /* * Variable: oJUIClasses * Purpose: Storage for the various classes that DataTables uses - jQuery UI suitable * Scope: jQuery.fn.dataTableExt */ _oExt.oJUIClasses = { /* Two buttons buttons */ "sPagePrevEnabled": "fg-button ui-button ui-state-default ui-corner-left", "sPagePrevDisabled": "fg-button ui-button ui-state-default ui-corner-left ui-state-disabled", "sPageNextEnabled": "fg-button ui-button ui-state-default ui-corner-right", "sPageNextDisabled": "fg-button ui-button ui-state-default ui-corner-right ui-state-disabled", "sPageJUINext": "ui-icon ui-icon-circle-arrow-e", "sPageJUIPrev": "ui-icon ui-icon-circle-arrow-w", /* Full numbers paging buttons */ "sPageButton": "fg-button ui-button ui-state-default", "sPageButtonActive": "fg-button ui-button ui-state-default ui-state-disabled", "sPageButtonStaticDisabled": "fg-button ui-button ui-state-default ui-state-disabled", "sPageFirst": "first ui-corner-tl ui-corner-bl", "sPagePrevious": "previous", "sPageNext": "next", "sPageLast": "last ui-corner-tr ui-corner-br", /* Striping classes */ "sStripeOdd": "odd", "sStripeEven": "even", /* Empty row */ "sRowEmpty": "dataTables_empty", /* Features */ "sWrapper": "dataTables_wrapper", "sFilter": "dataTables_filter", "sInfo": "dataTables_info", "sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+ "ui-buttonset-multi paging_", /* Note that the type is postfixed */ "sLength": "dataTables_length", "sProcessing": "dataTables_processing", /* Sorting */ "sSortAsc": "ui-state-default", "sSortDesc": "ui-state-default", "sSortable": "ui-state-default", "sSortableAsc": "ui-state-default", "sSortableDesc": "ui-state-default", "sSortableNone": "ui-state-default", "sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */ "sSortJUIAsc": "css_right ui-icon ui-icon-triangle-1-n", "sSortJUIDesc": "css_right ui-icon ui-icon-triangle-1-s", "sSortJUI": "css_right ui-icon ui-icon-carat-2-n-s", "sSortJUIAscAllowed": "css_right ui-icon ui-icon-carat-1-n", "sSortJUIDescAllowed": "css_right ui-icon ui-icon-carat-1-s", "sSortJUIWrapper": "DataTables_sort_wrapper", "sSortIcon": "DataTables_sort_icon", /* Scrolling */ "sScrollWrapper": "dataTables_scroll", "sScrollHead": "dataTables_scrollHead ui-state-default", "sScrollHeadInner": "dataTables_scrollHeadInner", "sScrollBody": "dataTables_scrollBody", "sScrollFoot": "dataTables_scrollFoot ui-state-default", "sScrollFootInner": "dataTables_scrollFootInner", /* Misc */ "sFooterTH": "ui-state-default" }; /* * Variable: oPagination * Purpose: Container for the various type of pagination that dataTables supports * Scope: jQuery.fn.dataTableExt */ _oExt.oPagination = { /* * Variable: two_button * Purpose: Standard two button (forward/back) pagination * Scope: jQuery.fn.dataTableExt.oPagination */ "two_button": { /* * Function: oPagination.two_button.fnInit * Purpose: Initialise dom elements required for pagination with forward/back buttons only * Returns: - * Inputs: object:oSettings - dataTables settings object * node:nPaging - the DIV which contains this pagination control * function:fnCallbackDraw - draw function which must be called on update */ "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) { var nPrevious, nNext, nPreviousInner, nNextInner; /* Store the next and previous elements in the oSettings object as they can be very * usful for automation - particularly testing */ if ( !oSettings.bJUI ) { nPrevious = document.createElement( 'div' ); nNext = document.createElement( 'div' ); } else { nPrevious = document.createElement( 'a' ); nNext = document.createElement( 'a' ); nNextInner = document.createElement('span'); nNextInner.className = oSettings.oClasses.sPageJUINext; nNext.appendChild( nNextInner ); nPreviousInner = document.createElement('span'); nPreviousInner.className = oSettings.oClasses.sPageJUIPrev; nPrevious.appendChild( nPreviousInner ); } nPrevious.className = oSettings.oClasses.sPagePrevDisabled; nNext.className = oSettings.oClasses.sPageNextDisabled; nPrevious.title = oSettings.oLanguage.oPaginate.sPrevious; nNext.title = oSettings.oLanguage.oPaginate.sNext; nPaging.appendChild( nPrevious ); nPaging.appendChild( nNext ); $(nPrevious).on( 'click.DT', function() { if ( oSettings.oApi._fnPageChange( oSettings, "previous" ) ) { /* Only draw when the page has actually changed */ fnCallbackDraw( oSettings ); } } ); $(nNext).on( 'click.DT', function() { if ( oSettings.oApi._fnPageChange( oSettings, "next" ) ) { fnCallbackDraw( oSettings ); } } ); /* Take the brutal approach to cancelling text selection */ $(nPrevious).on( 'selectstart.DT', function () { return false; } ); $(nNext).on( 'selectstart.DT', function () { return false; } ); /* ID the first elements only */ if ( oSettings.sTableId !== '' && typeof oSettings.aanFeatures.p == "undefined" ) { nPaging.setAttribute( 'id', oSettings.sTableId+'_paginate' ); nPrevious.setAttribute( 'id', oSettings.sTableId+'_previous' ); nNext.setAttribute( 'id', oSettings.sTableId+'_next' ); } }, /* * Function: oPagination.two_button.fnUpdate * Purpose: Update the two button pagination at the end of the draw * Returns: - * Inputs: object:oSettings - dataTables settings object * function:fnCallbackDraw - draw function to call on page change */ "fnUpdate": function ( oSettings, fnCallbackDraw ) { if ( !oSettings.aanFeatures.p ) { return; } /* Loop over each instance of the pager */ var an = oSettings.aanFeatures.p; for ( var i=0, iLen=an.length ; i= (iPages - iPageCountHalf)) { iStartButton = iPages - iPageCount + 1; iEndButton = iPages; } else { iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1; iEndButton = iStartButton + iPageCount - 1; } } } /* Build the dynamic list */ for ( i=iStartButton ; i<=iEndButton ; i++ ) { if ( iCurrentPage != i ) { sList += ''+i+''; } else { sList += ''+i+''; } } /* Loop over each instance of the pager */ var an = oSettings.aanFeatures.p; var anButtons, anStatic, nPaginateList; var fnClick = function(e) { /* Use the information in the element to jump to the required page */ var iTarget = (this.innerHTML * 1) - 1; oSettings._iDisplayStart = iTarget * oSettings._iDisplayLength; fnCallbackDraw( oSettings ); e.preventDefault(); }; var fnFalse = function () { return false; }; for ( i=0, iLen=an.length ; i y) ? 1 : 0)); }, "string-desc": function ( a, b ) { if ( typeof a != 'string' ) { a = ''; } if ( typeof b != 'string' ) { b = ''; } var x = a.toLowerCase(); var y = b.toLowerCase(); return ((x < y) ? 1 : ((x > y) ? -1 : 0)); }, /* * html sorting (ignore html tags) */ "html-asc": function ( a, b ) { var x = a.replace( /<.*?>/g, "" ).toLowerCase(); var y = b.replace( /<.*?>/g, "" ).toLowerCase(); return ((x < y) ? -1 : ((x > y) ? 1 : 0)); }, "html-desc": function ( a, b ) { var x = a.replace( /<.*?>/g, "" ).toLowerCase(); var y = b.replace( /<.*?>/g, "" ).toLowerCase(); return ((x < y) ? 1 : ((x > y) ? -1 : 0)); }, /* * date sorting */ "date-asc": function ( a, b ) { var x = Date.parse( a ); var y = Date.parse( b ); if ( isNaN(x) || x==="" ) { x = Date.parse( "01/01/1970 00:00:00" ); } if ( isNaN(y) || y==="" ) { y = Date.parse( "01/01/1970 00:00:00" ); } return x - y; }, "date-desc": function ( a, b ) { var x = Date.parse( a ); var y = Date.parse( b ); if ( isNaN(x) || x==="" ) { x = Date.parse( "01/01/1970 00:00:00" ); } if ( isNaN(y) || y==="" ) { y = Date.parse( "01/01/1970 00:00:00" ); } return y - x; }, /* * numerical sorting */ "numeric-asc": function ( a, b ) { var x = (a=="-" || a==="") ? 0 : a*1; var y = (b=="-" || b==="") ? 0 : b*1; return x - y; }, "numeric-desc": function ( a, b ) { var x = (a=="-" || a==="") ? 0 : a*1; var y = (b=="-" || b==="") ? 0 : b*1; return y - x; } }; /* * Variable: aTypes * Purpose: Container for the various type of type detection that dataTables supports * Scope: jQuery.fn.dataTableExt * Notes: The functions in this array are expected to parse a string to see if it is a data * type that it recognises. If so then the function should return the name of the type (a * corresponding sort function should be defined!), if the type is not recognised then the * function should return null such that the parser and move on to check the next type. * Note that ordering is important in this array - the functions are processed linearly, * starting at index 0. * Note that the input for these functions is always a string! It cannot be any other data * type */ _oExt.aTypes = [ /* * Function: - * Purpose: Check to see if a string is numeric * Returns: string:'numeric' or null * Inputs: mixed:sText - string to check */ function ( sData ) { /* Allow zero length strings as a number */ if ( typeof sData == 'number' ) { return 'numeric'; } else if ( typeof sData != 'string' ) { return null; } var sValidFirstChars = "0123456789-"; var sValidChars = "0123456789."; var Char; var bDecimal = false; /* Check for a valid first char (no period and allow negatives) */ Char = sData.charAt(0); if (sValidFirstChars.indexOf(Char) == -1) { return null; } /* Check all the other characters are valid */ for ( var i=1 ; i') != -1 ) { return 'html'; } return null; } ]; /* * Function: fnVersionCheck * Purpose: Check a version string against this version of DataTables. Useful for plug-ins * Returns: bool:true -this version of DataTables is greater or equal to the required version * false -this version of DataTales is not suitable * Inputs: string:sVersion - the version to check against. May be in the following formats: * "a", "a.b" or "a.b.c" * Notes: This function will only check the first three parts of a version string. It is * assumed that beta and dev versions will meet the requirements. This might change in future */ _oExt.fnVersionCheck = function( sVersion ) { /* This is cheap, but very effective */ var fnZPad = function (Zpad, count) { while(Zpad.length < count) { Zpad += '0'; } return Zpad; }; var aThis = _oExt.sVersion.split('.'); var aThat = sVersion.split('.'); var sThis = '', sThat = ''; for ( var i=0, iLen=aThat.length ; i= parseInt(sThat, 10); }; /* * Variable: _oExternConfig * Purpose: Store information for DataTables to access globally about other instances * Scope: jQuery.fn.dataTableExt */ _oExt._oExternConfig = { /* int:iNextUnique - next unique number for an instance */ "iNextUnique": 0 }; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Section - DataTables prototype * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * Function: dataTable * Purpose: DataTables information * Returns: - * Inputs: object:oInit - initialisation options for the table */ $.fn.dataTable = function( oInit ) { /* * Function: classSettings * Purpose: Settings container function for all 'class' properties which are required * by dataTables * Returns: - * Inputs: - */ function classSettings () { this.fnRecordsTotal = function () { if ( this.oFeatures.bServerSide ) { return parseInt(this._iRecordsTotal, 10); } else { return this.aiDisplayMaster.length; } }; this.fnRecordsDisplay = function () { if ( this.oFeatures.bServerSide ) { return parseInt(this._iRecordsDisplay, 10); } else { return this.aiDisplay.length; } }; this.fnDisplayEnd = function () { if ( this.oFeatures.bServerSide ) { if ( this.oFeatures.bPaginate === false || this._iDisplayLength == -1 ) { return this._iDisplayStart+this.aiDisplay.length; } else { return Math.min( this._iDisplayStart+this._iDisplayLength, this._iRecordsDisplay ); } } else { return this._iDisplayEnd; } }; /* * Variable: oInstance * Purpose: The DataTables object for this table * Scope: jQuery.dataTable.classSettings */ this.oInstance = null; /* * Variable: sInstance * Purpose: Unique idendifier for each instance of the DataTables object * Scope: jQuery.dataTable.classSettings */ this.sInstance = null; /* * Variable: oFeatures * Purpose: Indicate the enablement of key dataTable features * Scope: jQuery.dataTable.classSettings */ this.oFeatures = { "bPaginate": true, "bLengthChange": true, "bFilter": true, "bSort": true, "bInfo": true, "bAutoWidth": true, "bProcessing": false, "bSortClasses": true, "bStateSave": false, "bServerSide": false, "bDeferRender": false }; /* * Variable: oScroll * Purpose: Container for scrolling options * Scope: jQuery.dataTable.classSettings */ this.oScroll = { "sX": "", "sXInner": "", "sY": "", "bCollapse": false, "bInfinite": false, "iLoadGap": 100, "iBarWidth": 0, "bAutoCss": true }; /* * Variable: aanFeatures * Purpose: Array referencing the nodes which are used for the features * Scope: jQuery.dataTable.classSettings * Notes: The parameters of this object match what is allowed by sDom - i.e. * 'l' - Length changing * 'f' - Filtering input * 't' - The table! * 'i' - Information * 'p' - Pagination * 'r' - pRocessing */ this.aanFeatures = []; /* * Variable: oLanguage * Purpose: Store the language strings used by dataTables * Scope: jQuery.dataTable.classSettings * Notes: The words in the format _VAR_ are variables which are dynamically replaced * by javascript */ this.oLanguage = { "sProcessing": "Processing...", "sLengthMenu": "Show _MENU_ entries", "sZeroRecords": "No matching records found", "sEmptyTable": "No data available in table", "sLoadingRecords": "Loading...", "sInfo": "Showing _START_ to _END_ of _TOTAL_ entries", "sInfoEmpty": "Showing 0 to 0 of 0 entries", "sInfoFiltered": "(filtered from _MAX_ total entries)", "sInfoPostFix": "", "sInfoThousands": ",", "sSearch": "Search:", "sUrl": "", "oPaginate": { "sFirst": "First", "sPrevious": "Previous", "sNext": "Next", "sLast": "Last" }, "fnInfoCallback": null }; /* * Variable: aoData * Purpose: Store data information * Scope: jQuery.dataTable.classSettings * Notes: This is an array of objects with the following parameters: * int: _iId - internal id for tracking * array: _aData - internal data - used for sorting / filtering etc * node: nTr - display node * array node: _anHidden - hidden TD nodes * string: _sRowStripe */ this.aoData = []; /* * Variable: aiDisplay * Purpose: Array of indexes which are in the current display (after filtering etc) * Scope: jQuery.dataTable.classSettings */ this.aiDisplay = []; /* * Variable: aiDisplayMaster * Purpose: Array of indexes for display - no filtering * Scope: jQuery.dataTable.classSettings */ this.aiDisplayMaster = []; /* * Variable: aoColumns * Purpose: Store information about each column that is in use * Scope: jQuery.dataTable.classSettings */ this.aoColumns = []; /* * Variable: aoHeader * Purpose: Store information about the table's header * Scope: jQuery.dataTable.classSettings */ this.aoHeader = []; /* * Variable: aoFooter * Purpose: Store information about the table's footer * Scope: jQuery.dataTable.classSettings */ this.aoFooter = []; /* * Variable: iNextId * Purpose: Store the next unique id to be used for a new row * Scope: jQuery.dataTable.classSettings */ this.iNextId = 0; /* * Variable: asDataSearch * Purpose: Search data array for regular expression searching * Scope: jQuery.dataTable.classSettings */ this.asDataSearch = []; /* * Variable: oPreviousSearch * Purpose: Store the previous search incase we want to force a re-search * or compare the old search to a new one * Scope: jQuery.dataTable.classSettings */ this.oPreviousSearch = { "sSearch": "", "bRegex": false, "bSmart": true }; /* * Variable: aoPreSearchCols * Purpose: Store the previous search for each column * Scope: jQuery.dataTable.classSettings */ this.aoPreSearchCols = []; /* * Variable: aaSorting * Purpose: Sorting information * Scope: jQuery.dataTable.classSettings * Notes: Index 0 - column number * Index 1 - current sorting direction * Index 2 - index of asSorting for this column */ this.aaSorting = [ [0, 'asc', 0] ]; /* * Variable: aaSortingFixed * Purpose: Sorting information that is always applied * Scope: jQuery.dataTable.classSettings */ this.aaSortingFixed = null; /* * Variable: asStripeClasses * Purpose: Classes to use for the striping of a table * Scope: jQuery.dataTable.classSettings */ this.asStripeClasses = []; /* * Variable: asDestroyStripes * Purpose: If restoring a table - we should restore its striping classes as well * Scope: jQuery.dataTable.classSettings */ this.asDestroyStripes = []; /* * Variable: sDestroyWidth * Purpose: If restoring a table - we should restore its width * Scope: jQuery.dataTable.classSettings */ this.sDestroyWidth = 0; /* * Variable: fnRowCallback * Purpose: Call this function every time a row is inserted (draw) * Scope: jQuery.dataTable.classSettings */ this.fnRowCallback = null; /* * Variable: fnHeaderCallback * Purpose: Callback function for the header on each draw * Scope: jQuery.dataTable.classSettings */ this.fnHeaderCallback = null; /* * Variable: fnFooterCallback * Purpose: Callback function for the footer on each draw * Scope: jQuery.dataTable.classSettings */ this.fnFooterCallback = null; /* * Variable: aoDrawCallback * Purpose: Array of callback functions for draw callback functions * Scope: jQuery.dataTable.classSettings * Notes: Each array element is an object with the following parameters: * function:fn - function to call * string:sName - name callback (feature). useful for arranging array */ this.aoDrawCallback = []; /* * Variable: fnPreDrawCallback * Purpose: Callback function for just before the table is redrawn. A return of false * will be used to cancel the draw. * Scope: jQuery.dataTable.classSettings */ this.fnPreDrawCallback = null; /* * Variable: fnInitComplete * Purpose: Callback function for when the table has been initialised * Scope: jQuery.dataTable.classSettings */ this.fnInitComplete = null; /* * Variable: sTableId * Purpose: Cache the table ID for quick access * Scope: jQuery.dataTable.classSettings */ this.sTableId = ""; /* * Variable: nTable * Purpose: Cache the table node for quick access * Scope: jQuery.dataTable.classSettings */ this.nTable = null; /* * Variable: nTHead * Purpose: Permanent ref to the thead element * Scope: jQuery.dataTable.classSettings */ this.nTHead = null; /* * Variable: nTFoot * Purpose: Permanent ref to the tfoot element - if it exists * Scope: jQuery.dataTable.classSettings */ this.nTFoot = null; /* * Variable: nTBody * Purpose: Permanent ref to the tbody element * Scope: jQuery.dataTable.classSettings */ this.nTBody = null; /* * Variable: nTableWrapper * Purpose: Cache the wrapper node (contains all DataTables controlled elements) * Scope: jQuery.dataTable.classSettings */ this.nTableWrapper = null; /* * Variable: bDeferLoading * Purpose: Indicate if when using server-side processing the loading of data * should be deferred until the second draw * Scope: jQuery.dataTable.classSettings */ this.bDeferLoading = false; /* * Variable: bInitialised * Purpose: Indicate if all required information has been read in * Scope: jQuery.dataTable.classSettings */ this.bInitialised = false; /* * Variable: aoOpenRows * Purpose: Information about open rows * Scope: jQuery.dataTable.classSettings * Notes: Has the parameters 'nTr' and 'nParent' */ this.aoOpenRows = []; /* * Variable: sDom * Purpose: Dictate the positioning that the created elements will take * Scope: jQuery.dataTable.classSettings * Notes: * The following options are allowed: * 'l' - Length changing * 'f' - Filtering input * 't' - The table! * 'i' - Information * 'p' - Pagination * 'r' - pRocessing * The following constants are allowed: * 'H' - jQueryUI theme "header" classes * 'F' - jQueryUI theme "footer" classes * The following syntax is expected: * '<' and '>' - div elements * '<"class" and '>' - div with a class * Examples: * '<"wrapper"flipt>', 'ip>' */ this.sDom = 'lfrtip'; /* * Variable: sPaginationType * Purpose: Note which type of sorting should be used * Scope: jQuery.dataTable.classSettings */ this.sPaginationType = "two_button"; /* * Variable: iCookieDuration * Purpose: The cookie duration (for bStateSave) in seconds - default 2 hours * Scope: jQuery.dataTable.classSettings */ this.iCookieDuration = 60 * 60 * 2; /* * Variable: sCookiePrefix * Purpose: The cookie name prefix * Scope: jQuery.dataTable.classSettings */ this.sCookiePrefix = "SpryMedia_DataTables_"; /* * Variable: fnCookieCallback * Purpose: Callback function for cookie creation * Scope: jQuery.dataTable.classSettings */ this.fnCookieCallback = null; /* * Variable: aoStateSave * Purpose: Array of callback functions for state saving * Scope: jQuery.dataTable.classSettings * Notes: Each array element is an object with the following parameters: * function:fn - function to call. Takes two parameters, oSettings and the JSON string to * save that has been thus far created. Returns a JSON string to be inserted into a * json object (i.e. '"param": [ 0, 1, 2]') * string:sName - name of callback */ this.aoStateSave = []; /* * Variable: aoStateLoad * Purpose: Array of callback functions for state loading * Scope: jQuery.dataTable.classSettings * Notes: Each array element is an object with the following parameters: * function:fn - function to call. Takes two parameters, oSettings and the object stored. * May return false to cancel state loading. * string:sName - name of callback */ this.aoStateLoad = []; /* * Variable: oLoadedState * Purpose: State that was loaded from the cookie. Useful for back reference * Scope: jQuery.dataTable.classSettings */ this.oLoadedState = null; /* * Variable: sAjaxSource * Purpose: Source url for AJAX data for the table * Scope: jQuery.dataTable.classSettings */ this.sAjaxSource = null; /* * Variable: sAjaxDataProp * Purpose: Property from a given object from which to read the table data from. This can * be an empty string (when not server-side processing), in which case it is * assumed an an array is given directly. * Scope: jQuery.dataTable.classSettings */ this.sAjaxDataProp = 'aaData'; /* * Variable: bAjaxDataGet * Purpose: Note if draw should be blocked while getting data * Scope: jQuery.dataTable.classSettings */ this.bAjaxDataGet = true; /* * Variable: jqXHR * Purpose: The last jQuery XHR object that was used for server-side data gathering. * This can be used for working with the XHR information in one of the callbacks * Scope: jQuery.dataTable.classSettings */ this.jqXHR = null; /* * Variable: fnServerData * Purpose: Function to get the server-side data - can be overruled by the developer * Scope: jQuery.dataTable.classSettings */ this.fnServerData = function ( url, data, callback, settings ) { settings.jqXHR = $.ajax( { "url": url, "data": data, "success": function (json) { $(settings.oInstance).trigger('xhr', settings); callback( json ); }, "dataType": "json", "cache": false, "error": function (xhr, error, thrown) { if ( error == "parsererror" ) { alert( "DataTables warning: JSON data from server could not be parsed. "+ "This is caused by a JSON formatting error." ); } } } ); }; /* * Variable: aoServerParams * Purpose: Functions which are called prior to sending an Ajax request so extra parameters * can easily be sent to the server * Scope: jQuery.dataTable.classSettings * Notes: Each array element is an object with the following parameters: * function:fn - function to call * string:sName - name callback - useful for knowing where it came from (plugin etc) */ this.aoServerParams = []; /* * Variable: fnFormatNumber * Purpose: Format numbers for display * Scope: jQuery.dataTable.classSettings */ this.fnFormatNumber = function ( iIn ) { if ( iIn < 1000 ) { /* A small optimisation for what is likely to be the vast majority of use cases */ return iIn; } else { var s=(iIn+""), a=s.split(""), out="", iLen=s.length; for ( var i=0 ; i

').addClass( (o && o.position) ? o.position : $.jGrowl.defaults.position ).appendTo('body'); // Create a notification on the container. $('#jGrowl').jGrowl(m,o); }; /** Raise jGrowl Notification on a jGrowl Container **/ $.fn.jGrowl = function( m , o ) { if ( $.isFunction(this.each) ) { var args = arguments; return this.each(function() { var self = this; /** Create a jGrowl Instance on the Container if it does not exist **/ if ( $(this).data('jGrowl.instance') == undefined ) { $(this).data('jGrowl.instance', $.extend( new $.fn.jGrowl(), { notifications: [], element: null, interval: null } )); $(this).data('jGrowl.instance').startup( this ); } /** Optionally call jGrowl instance methods, or just raise a normal notification **/ if ( $.isFunction($(this).data('jGrowl.instance')[m]) ) { $(this).data('jGrowl.instance')[m].apply( $(this).data('jGrowl.instance') , $.makeArray(args).slice(1) ); } else { $(this).data('jGrowl.instance').create( m , o ); } }); }; }; $.extend( $.fn.jGrowl.prototype , { /** Default JGrowl Settings **/ defaults: { pool: 0, header: '', group: '', sticky: false, position: 'top-right', glue: 'after', theme: 'default', themeState: 'highlight', corners: '10px', check: 250, life: 3000, closeDuration: 'normal', openDuration: 'normal', easing: 'swing', closer: true, closeTemplate: '×', closerTemplate: '
[ close all ]
', log: function(e,m,o) {}, beforeOpen: function(e,m,o) {}, afterOpen: function(e,m,o) {}, open: function(e,m,o) {}, beforeClose: function(e,m,o) {}, close: function(e,m,o) {}, animateOpen: { opacity: 'show' }, animateClose: { opacity: 'hide' } }, notifications: [], /** jGrowl Container Node **/ element: null, /** Interval Function **/ interval: null, /** Create a Notification **/ create: function( message , o ) { var o = $.extend({}, this.defaults, o); /* To keep backward compatibility with 1.24 and earlier, honor 'speed' if the user has set it */ if (typeof o.speed !== 'undefined') { o.openDuration = o.speed; o.closeDuration = o.speed; } this.notifications.push({ message: message , options: o }); o.log.apply( this.element , [this.element,message,o] ); }, render: function( notification ) { var self = this; var message = notification.message; var o = notification.options; // Support for jQuery theme-states, if this is not used it displays a widget header o.themeState = (o.themeState == '') ? '' : 'ui-state-' + o.themeState; var notification = $( '
' + '
' + o.closeTemplate + '
' + '
' + o.header + '
' + '
' + message + '
' ).data("jGrowl", o).addClass(o.theme).children('div.jGrowl-close').on("click.jGrowl", function() { $(this).parent().trigger('jGrowl.close'); }).parent(); /** Notification Actions **/ $(notification).on("mouseover.jGrowl", function() { $('div.jGrowl-notification', self.element).data("jGrowl.pause", true); }).on("mouseout.jGrowl", function() { $('div.jGrowl-notification', self.element).data("jGrowl.pause", false); }).on('jGrowl.beforeOpen', function() { if ( o.beforeOpen.apply( notification , [notification,message,o,self.element] ) != false ) { $(this).trigger('jGrowl.open'); } }).on('jGrowl.open', function() { if ( o.open.apply( notification , [notification,message,o,self.element] ) != false ) { if ( o.glue == 'after' ) { $('div.jGrowl-notification:last', self.element).after(notification); } else { $('div.jGrowl-notification:first', self.element).before(notification); } $(this).animate(o.animateOpen, o.openDuration, o.easing, function() { // Fixes some anti-aliasing issues with IE filters. if ((navigator.userAgent.match(/MSIE ([1-9])/) !== null) && (parseInt($(this).css('opacity'), 10) === 1 || parseInt($(this).css('opacity'), 10) === 0)) this.style.removeAttribute('filter'); if ( $(this).data("jGrowl") != null ) // Happens when a notification is closing before it's open. $(this).data("jGrowl").created = new Date(); $(this).trigger('jGrowl.afterOpen'); }); } }).on('jGrowl.afterOpen', function() { o.afterOpen.apply( notification , [notification,message,o,self.element] ); }).on('jGrowl.beforeClose', function() { if ( o.beforeClose.apply( notification , [notification,message,o,self.element] ) != false ) $(this).trigger('jGrowl.close'); }).on('jGrowl.close', function() { // Pause the notification, lest during the course of animation another close event gets called. $(this).data('jGrowl.pause', true); $(this).animate(o.animateClose, o.closeDuration, o.easing, function() { if ( $.isFunction(o.close) ) { if ( o.close.apply( notification , [notification,message,o,self.element] ) !== false ) $(this).remove(); } else { $(this).remove(); } }); }).trigger('jGrowl.beforeOpen'); /** Optional Corners Plugin **/ if ( o.corners != '' && $.fn.corner != undefined ) $(notification).corner( o.corners ); /** Add a Global Closer if more than one notification exists **/ if ( $('div.jGrowl-notification:parent', self.element).length > 1 && $('div.jGrowl-closer', self.element).length == 0 && this.defaults.closer != false ) { $(this.defaults.closerTemplate).addClass('jGrowl-closer ' + this.defaults.themeState + ' ui-corner-all').addClass(this.defaults.theme) .appendTo(self.element).animate(this.defaults.animateOpen, this.defaults.speed, this.defaults.easing) .on("click.jGrowl", function() { $(this).siblings().trigger("jGrowl.beforeClose"); if ( $.isFunction( self.defaults.closer ) ) { self.defaults.closer.apply( $(this).parent()[0] , [$(this).parent()[0]] ); } }); }; }, /** Update the jGrowl Container, removing old jGrowl notifications **/ update: function() { $(this.element).find('div.jGrowl-notification:parent').each( function() { if ( $(this).data("jGrowl") != undefined && $(this).data("jGrowl").created != undefined && ($(this).data("jGrowl").created.getTime() + parseInt($(this).data("jGrowl").life)) < (new Date()).getTime() && $(this).data("jGrowl").sticky != true && ($(this).data("jGrowl.pause") == undefined || $(this).data("jGrowl.pause") != true) ) { // Pause the notification, lest during the course of animation another close event gets called. $(this).trigger('jGrowl.beforeClose'); } }); if ( this.notifications.length > 0 && (this.defaults.pool == 0 || $(this.element).find('div.jGrowl-notification:parent').length < this.defaults.pool) ) this.render( this.notifications.shift() ); if ( $(this.element).find('div.jGrowl-notification:parent').length < 2 ) { $(this.element).find('div.jGrowl-closer').animate(this.defaults.animateClose, this.defaults.speed, this.defaults.easing, function() { $(this).remove(); }); } }, /** Setup the jGrowl Notification Container **/ startup: function(e) { this.element = $(e).addClass('jGrowl').append('
'); this.interval = setInterval( function() { $(e).data('jGrowl.instance').update(); }, parseInt(this.defaults.check)); if ((navigator.userAgent.match(/MSIE ([2-6]\.)/) !== null) && !window["XMLHttpRequest"]) { $(this.element).addClass('ie6'); } }, /** Shutdown jGrowl, removing it and clearing the interval **/ shutdown: function() { $(this.element).removeClass('jGrowl').find('div.jGrowl-notification').remove(); clearInterval( this.interval ); }, close: function() { $(this.element).find('div.jGrowl-notification').each(function(){ $(this).trigger('jGrowl.beforeClose'); }); } }); /** Reference the Defaults Object for compatibility with older versions of jGrowl **/ $.jGrowl.defaults = $.fn.jGrowl.prototype.defaults; })(jQuery);phpsysinfo-3.4.4/js/jQuery/jquery.js000066400000000000000000010766251467431054600175270ustar00rootroot00000000000000/*! * jQuery JavaScript Library v1.12.4-ff3fix-ff2fix-CVE_2015_9251fix-CVE_2019_11358fix-CVE_2020_11022fix-CVE_2020_11023fix * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * * Copyright jQuery Foundation and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2016-05-20T17:17Z */ (function( global, factory ) { if ( typeof module === "object" && typeof module.exports === "object" ) { // For CommonJS and CommonJS-like environments where a proper `window` // is present, execute the factory and get jQuery. // For environments that do not have a `window` with a `document` // (such as Node.js), expose a factory as module.exports. // This accentuates the need for the creation of a real `window`. // e.g. var jQuery = require("jquery")(window); // See ticket #14549 for more info. module.exports = global.document ? factory( global, true ) : function( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }; } else { factory( global ); } // Pass this if window is not defined yet }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { // Support: Firefox 18+ // Can't be in strict mode, several libs including ASP.NET trace // the stack via arguments.caller.callee and Firefox dies if // you try to trace through "use strict" call chains. (#13335) //"use strict"; var deletedIds = []; var document = window.document; var slice = deletedIds.slice; var concat = deletedIds.concat; var push = deletedIds.push; var indexOf = deletedIds.indexOf; var class2type = {}; var toString = class2type.toString; var hasOwn = class2type.hasOwnProperty; var support = {}; var version = "1.12.4", // Define a local copy of jQuery jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) return new jQuery.fn.init( selector, context ); }, // Support: Android<4.1, IE<9 // Make sure we trim BOM and NBSP rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, // Matches dashed string for camelizing rmsPrefix = /^-ms-/, rdashAlpha = /-([\da-z])/gi, // Used by jQuery.camelCase as callback to replace() fcamelCase = function( all, letter ) { return letter.toUpperCase(); }; jQuery.fn = jQuery.prototype = { // The current version of jQuery being used jquery: version, constructor: jQuery, // Start with an empty selector selector: "", // The default length of a jQuery object is 0 length: 0, toArray: function() { return slice.call( this ); }, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { return num != null ? // Return just the one element from the set ( num < 0 ? this[ num + this.length ] : this[ num ] ) : // Return all the elements in a clean array slice.call( this ); }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems ) { // Build a new jQuery matched element set var ret = jQuery.merge( this.constructor(), elems ); // Add the old object onto the stack (as a reference) ret.prevObject = this; ret.context = this.context; // Return the newly-formed element set return ret; }, // Execute a callback for every element in the matched set. each: function( callback ) { return jQuery.each( this, callback ); }, map: function( callback ) { return this.pushStack( jQuery.map( this, function( elem, i ) { return callback.call( elem, i, elem ); } ) ); }, slice: function() { return this.pushStack( slice.apply( this, arguments ) ); }, first: function() { return this.eq( 0 ); }, last: function() { return this.eq( -1 ); }, eq: function( i ) { var len = this.length, j = +i + ( i < 0 ? len : 0 ); return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); }, end: function() { return this.prevObject || this.constructor(); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: push, sort: deletedIds.sort, splice: deletedIds.splice }; jQuery.extend = jQuery.fn.extend = function() { var src, copyIsArray, copy, name, options, clone, target = arguments[ 0 ] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; // skip the boolean and the target target = arguments[ i ] || {}; i++; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { target = {}; } // extend jQuery itself if only one argument is passed if ( i === length ) { target = this; i--; } for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( ( options = arguments[ i ] ) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ]; // Prevent Object.prototype pollution // Prevent never-ending loop if ( name === "__proto__" || target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject( copy ) || ( copyIsArray = jQuery.isArray( copy ) ) ) ) { if ( copyIsArray ) { copyIsArray = false; clone = src && jQuery.isArray( src ) ? src : []; } else { clone = src && jQuery.isPlainObject( src ) ? src : {}; } // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values } else if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; }; jQuery.extend( { // Unique for each copy of jQuery on the page expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), // Assume jQuery is ready without the ready module isReady: true, error: function( msg ) { throw new Error( msg ); }, noop: function() {}, // See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { return jQuery.type( obj ) === "function"; }, isArray: Array.isArray || function( obj ) { return jQuery.type( obj ) === "array"; }, isWindow: function( obj ) { /* jshint eqeqeq: false */ return obj != null && obj == obj.window; }, isNumeric: function( obj ) { // parseFloat NaNs numeric-cast false positives (null|true|false|"") // ...but misinterprets leading-number strings, particularly hex literals ("0x...") // subtraction forces infinities to NaN // adding 1 corrects loss of precision from parseFloat (#15100) var realStringObj = obj && obj.toString(); return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; }, isEmptyObject: function( obj ) { var name; for ( name in obj ) { return false; } return true; }, isPlainObject: function( obj ) { var key; // Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well if ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } try { // Not own constructor property must be Object if ( obj.constructor && !hasOwn.call( obj, "constructor" ) && !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { return false; } } catch ( e ) { // IE8,9 Will throw exceptions on certain host objects #9897 return false; } // Support: IE<9 // Handle iteration over inherited properties before own properties. if ( !support.ownFirst ) { for ( key in obj ) { return hasOwn.call( obj, key ); } } // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. for ( key in obj ) {} return key === undefined || hasOwn.call( obj, key ); }, type: function( obj ) { if ( obj == null ) { return obj + ""; } return typeof obj === "object" || typeof obj === "function" ? class2type[ toString.call( obj ) ] || "object" : typeof obj; }, // Workarounds based on findings by Jim Driscoll // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context globalEval: function( data ) { if ( data && jQuery.trim( data ) ) { // We use execScript on Internet Explorer // We use an anonymous function so that context is window // rather than jQuery in Firefox ( window.execScript || function( data ) { window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation } )( data ); } }, // Convert dashed to camelCase; used by the css and data modules // Microsoft forgot to hump their vendor prefix (#9572) camelCase: function( string ) { return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); }, nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); }, each: function( obj, callback ) { var length, i = 0; if ( isArrayLike( obj ) ) { length = obj.length; for ( ; i < length; i++ ) { if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { break; } } } else { for ( i in obj ) { if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { break; } } } return obj; }, // Support: Android<4.1, IE<9 trim: function( text ) { return text == null ? "" : ( text + "" ).replace( rtrim, "" ); }, // results is for internal usage only makeArray: function( arr, results ) { var ret = results || []; if ( arr != null ) { if ( isArrayLike( Object( arr ) ) ) { jQuery.merge( ret, typeof arr === "string" ? [ arr ] : arr ); } else { push.call( ret, arr ); } } return ret; }, inArray: function( elem, arr, i ) { var len; if ( arr ) { if ( indexOf ) { return indexOf.call( arr, elem, i ); } len = arr.length; i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; for ( ; i < len; i++ ) { // Skip accessing in sparse arrays if ( i in arr && arr[ i ] === elem ) { return i; } } } return -1; }, merge: function( first, second ) { var len = +second.length, j = 0, i = first.length; while ( j < len ) { first[ i++ ] = second[ j++ ]; } // Support: IE<9 // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) if ( len !== len ) { while ( second[ j ] !== undefined ) { first[ i++ ] = second[ j++ ]; } } first.length = i; return first; }, grep: function( elems, callback, invert ) { var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert; // Go through the array, only saving the items // that pass the validator function for ( ; i < length; i++ ) { callbackInverse = !callback( elems[ i ], i ); if ( callbackInverse !== callbackExpect ) { matches.push( elems[ i ] ); } } return matches; }, // arg is for internal usage only map: function( elems, callback, arg ) { var length, value, i = 0, ret = []; // Go through the array, translating each of the items to their new values if ( isArrayLike( elems ) ) { length = elems.length; for ( ; i < length; i++ ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret.push( value ); } } // Go through every key on the object, } else { for ( i in elems ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret.push( value ); } } } // Flatten any nested arrays return concat.apply( [], ret ); }, // A global GUID counter for objects guid: 1, // Bind a function to a context, optionally partially applying any // arguments. proxy: function( fn, context ) { var args, proxy, tmp; if ( typeof context === "string" ) { tmp = fn[ context ]; context = fn; fn = tmp; } // Quick check to determine if target is callable, in the spec // this throws a TypeError, but we will just return undefined. if ( !jQuery.isFunction( fn ) ) { return undefined; } // Simulated bind args = slice.call( arguments, 2 ); proxy = function() { return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); }; // Set the guid of unique handler to the same of original handler, so it can be removed proxy.guid = fn.guid = fn.guid || jQuery.guid++; return proxy; }, now: function() { return +( new Date() ); }, // jQuery.support is not used in Core but other projects attach their // properties to it so it needs to exist. support: support } ); // JSHint would error on this code due to the Symbol not being defined in ES5. // Defining this global in .jshintrc would create a danger of using the global // unguarded in another place, it seems safer to just disable JSHint for these // three lines. /* jshint ignore: start */ if ( typeof Symbol === "function" ) { jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ]; } /* jshint ignore: end */ // Populate the class2type map jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), function( i, name ) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); } ); function isArrayLike( obj ) { // Support: iOS 8.2 (not reproducible in simulator) // `in` check used to prevent JIT error (gh-2145) // hasOwn isn't used here due to false negatives // regarding Nodelist length in IE var length = !!obj && "length" in obj && obj.length, type = jQuery.type( obj ); if ( type === "function" || jQuery.isWindow( obj ) ) { return false; } return type === "array" || length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj; } var Sizzle = /*! * Sizzle CSS Selector Engine v2.2.1 * http://sizzlejs.com/ * * Copyright jQuery Foundation and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2015-10-17 */ (function( window ) { var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, // Local document vars setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains, // Instance-specific data expando = "sizzle" + 1 * new Date(), preferredDoc = window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function( a, b ) { if ( a === b ) { hasDuplicate = true; } return 0; }, // General-purpose constants MAX_NEGATIVE = 1 << 31, // Instance methods hasOwn = ({}).hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, // Use a stripped-down indexOf as it's faster than native // http://jsperf.com/thor-indexof-vs-for/5 indexOf = function( list, elem ) { var i = 0, len = list.length; for ( ; i < len; i++ ) { if ( list[i] === elem ) { return i; } } return -1; }, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", // Regular expressions // http://www.w3.org/TR/css3-selectors/#whitespace whitespace = "[\\x20\\t\\r\\n\\f]", // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2) "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]", pseudos = ":(" + identifier + ")(?:\\((" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: // 1. quoted (capture 3; capture 4 or capture 5) "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + // 2. simple (capture 6) "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + // 3. anything else (capture 2) ".*" + ")\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rwhitespace = new RegExp( whitespace + "+", "g" ), rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), rpseudo = new RegExp( pseudos ), ridentifier = new RegExp( "^" + identifier + "$" ), matchExpr = { "ID": new RegExp( "^#(" + identifier + ")" ), "CLASS": new RegExp( "^\\.(" + identifier + ")" ), "TAG": new RegExp( "^(" + identifier + "|[*])" ), "ATTR": new RegExp( "^" + attributes ), "PSEUDO": new RegExp( "^" + pseudos ), "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), // For use in libraries implementing .is() // We use this for POS matching in `select` "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rnative = /^[^{]+\{\s*\[native \w/, // Easily-parseable/retrievable ID or TAG or CLASS selectors rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\/g, // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), funescape = function( _, escaped, escapedWhitespace ) { var high = "0x" + escaped - 0x10000; // NaN means non-codepoint // Support: Firefox<24 // Workaround erroneous numeric interpretation of +"0x" return high !== high || escapedWhitespace ? escaped : high < 0 ? // BMP codepoint String.fromCharCode( high + 0x10000 ) : // Supplemental Plane codepoint (surrogate pair) String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); }, // Used for iframes // See setDocument() // Removing the function wrapper causes a "Permission Denied" // error in IE unloadHandler = function() { setDocument(); }; // Optimize for push.apply( _, NodeList ) try { push.apply( (arr = slice.call( preferredDoc.childNodes )), preferredDoc.childNodes ); // Support: Android<4.0 // Detect silently failing push.apply arr[ preferredDoc.childNodes.length ].nodeType; } catch ( e ) { push = { apply: arr.length ? // Leverage slice if possible function( target, els ) { push_native.apply( target, slice.call(els) ); } : // Support: IE<9 // Otherwise append directly function( target, els ) { var j = target.length, i = 0; // Can't trust NodeList.length while ( (target[j++] = els[i++]) ) {} target.length = j - 1; } }; } function Sizzle( selector, context, results, seed ) { var m, i, elem, nid, nidselect, match, groups, newSelector, newContext = context && context.ownerDocument, // nodeType defaults to 9, since context defaults to document nodeType = context ? context.nodeType : 9; results = results || []; // Return early from calls with invalid selector or context if ( typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { return results; } // Try to shortcut find operations (as opposed to filters) in HTML documents if ( !seed ) { if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { setDocument( context ); } context = context || document; if ( documentIsHTML ) { // If the selector is sufficiently simple, try using a "get*By*" DOM method // (excepting DocumentFragment context, where the methods don't exist) if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { // ID selector if ( (m = match[1]) ) { // Document context if ( nodeType === 9 ) { if ( (elem = context.getElementById( m )) ) { // Support: IE, Opera, Webkit // TODO: identify versions // getElementById can match elements by name instead of ID if ( elem.id === m ) { results.push( elem ); return results; } } else { return results; } // Element context } else { // Support: IE, Opera, Webkit // TODO: identify versions // getElementById can match elements by name instead of ID if ( newContext && (elem = newContext.getElementById( m )) && contains( context, elem ) && elem.id === m ) { results.push( elem ); return results; } } // Type selector } else if ( match[2] ) { push.apply( results, context.getElementsByTagName( selector ) ); return results; // Class selector } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { push.apply( results, context.getElementsByClassName( m ) ); return results; } } // Take advantage of querySelectorAll if ( support.qsa && !compilerCache[ selector + " " ] && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { if ( nodeType !== 1 ) { newContext = context; newSelector = selector; // qSA looks outside Element context, which is not what we want // Thanks to Andrew Dupont for this workaround technique // Support: IE <=8 // Exclude object elements } else if ( context.nodeName.toLowerCase() !== "object" ) { // Capture the context ID, setting it first if necessary if ( (nid = context.getAttribute( "id" )) ) { nid = nid.replace( rescape, "\\$&" ); } else { context.setAttribute( "id", (nid = expando) ); } // Prefix every selector in the list groups = tokenize( selector ); i = groups.length; nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; while ( i-- ) { groups[i] = nidselect + " " + toSelector( groups[i] ); } newSelector = groups.join( "," ); // Expand context for sibling selectors newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; } if ( newSelector ) { try { push.apply( results, newContext.querySelectorAll( newSelector ) ); return results; } catch ( qsaError ) { } finally { if ( nid === expando ) { context.removeAttribute( "id" ); } } } } } } // All others return select( selector.replace( rtrim, "$1" ), context, results, seed ); } /** * Create key-value caches of limited size * @returns {function(string, object)} Returns the Object data after storing it on itself with * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) * deleting the oldest entry */ function createCache() { var keys = []; function cache( key, value ) { // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) if ( keys.push( key + " " ) > Expr.cacheLength ) { // Only keep the most recent entries delete cache[ keys.shift() ]; } return (cache[ key + " " ] = value); } return cache; } /** * Mark a function for special use by Sizzle * @param {Function} fn The function to mark */ function markFunction( fn ) { fn[ expando ] = true; return fn; } /** * Support testing using an element * @param {Function} fn Passed the created div and expects a boolean result */ function assert( fn ) { var div = document.createElement("div"); try { return !!fn( div ); } catch (e) { return false; } finally { // Remove from its parent by default if ( div.parentNode ) { div.parentNode.removeChild( div ); } // release memory in IE div = null; } } /** * Adds the same handler for all of the specified attrs * @param {String} attrs Pipe-separated list of attributes * @param {Function} handler The method that will be applied */ function addHandle( attrs, handler ) { var arr = attrs.split("|"), i = arr.length; while ( i-- ) { Expr.attrHandle[ arr[i] ] = handler; } } /** * Checks document order of two siblings * @param {Element} a * @param {Element} b * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b */ function siblingCheck( a, b ) { var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); // Use IE sourceIndex if available on both nodes if ( diff ) { return diff; } // Check if b follows a if ( cur ) { while ( (cur = cur.nextSibling) ) { if ( cur === b ) { return -1; } } } return a ? 1 : -1; } /** * Returns a function to use in pseudos for input types * @param {String} type */ function createInputPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === type; }; } /** * Returns a function to use in pseudos for buttons * @param {String} type */ function createButtonPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return (name === "input" || name === "button") && elem.type === type; }; } /** * Returns a function to use in pseudos for positionals * @param {Function} fn */ function createPositionalPseudo( fn ) { return markFunction(function( argument ) { argument = +argument; return markFunction(function( seed, matches ) { var j, matchIndexes = fn( [], seed.length, argument ), i = matchIndexes.length; // Match elements found at the specified indexes while ( i-- ) { if ( seed[ (j = matchIndexes[i]) ] ) { seed[j] = !(matches[j] = seed[j]); } } }); }); } /** * Checks a node for validity as a Sizzle context * @param {Element|Object=} context * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value */ function testContext( context ) { return context && typeof context.getElementsByTagName !== "undefined" && context; } // Expose support vars for convenience support = Sizzle.support = {}; /** * Detects XML nodes * @param {Element|Object} elem An element or a document * @returns {Boolean} True iff elem is a non-HTML XML node */ isXML = Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement = elem && (elem.ownerDocument || elem).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; }; /** * Sets document-related variables once based on the current document * @param {Element|Object} [doc] An element or document object to use to set the document * @returns {Object} Returns the current document */ setDocument = Sizzle.setDocument = function( node ) { var hasCompare, parent, doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { return document; } // Update global variables document = doc; docElem = document.documentElement; documentIsHTML = !isXML( document ); // Support: IE 9-11, Edge // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) if ( (parent = document.defaultView) && parent.top !== parent ) { // Support: IE 11 if ( parent.addEventListener ) { parent.addEventListener( "unload", unloadHandler, false ); // Support: IE 9 - 10 only } else if ( parent.attachEvent ) { parent.attachEvent( "onunload", unloadHandler ); } } /* Attributes ---------------------------------------------------------------------- */ // Support: IE<8 // Verify that getAttribute really returns attributes and not properties // (excepting IE8 booleans) support.attributes = assert(function( div ) { div.className = "i"; return !div.getAttribute("className"); }); /* getElement(s)By* ---------------------------------------------------------------------- */ // Check if getElementsByTagName("*") returns only elements support.getElementsByTagName = assert(function( div ) { div.appendChild( document.createComment("") ); return !div.getElementsByTagName("*").length; }); // Support: IE<9 support.getElementsByClassName = rnative.test( document.getElementsByClassName ); // Support: IE<10 // Check if getElementById returns elements by name // The broken getElementById methods don't pick up programatically-set names, // so use a roundabout getElementsByName test support.getById = assert(function( div ) { docElem.appendChild( div ).id = expando; return !document.getElementsByName || !document.getElementsByName( expando ).length; }); // ID find and filter if ( support.getById ) { Expr.find["ID"] = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var m = context.getElementById( id ); return m ? [ m ] : []; } }; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { return elem.getAttribute("id") === attrId; }; }; } else { // Support: IE6/7 // getElementById is not reliable as a find shortcut delete Expr.find["ID"]; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); return node && node.value === attrId; }; }; } // Tag Expr.find["TAG"] = support.getElementsByTagName ? function( tag, context ) { if ( typeof context.getElementsByTagName !== "undefined" ) { return context.getElementsByTagName( tag ); // DocumentFragment nodes don't have gEBTN } else if ( support.qsa ) { return context.querySelectorAll( tag ); } } : function( tag, context ) { var elem, tmp = [], i = 0, // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too results = context.getElementsByTagName( tag ); // Filter out possible comments if ( tag === "*" ) { while ( (elem = results[i++]) ) { if ( elem.nodeType === 1 ) { tmp.push( elem ); } } return tmp; } return results; }; // Class Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { return context.getElementsByClassName( className ); } }; /* QSA/matchesSelector ---------------------------------------------------------------------- */ // QSA and matchesSelector support // matchesSelector(:active) reports false when true (IE9/Opera 11.5) rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21) // We allow this because of a bug in IE8/9 that throws an error // whenever `document.activeElement` is accessed on an iframe // So, we allow :focus to pass through QSA all the time to avoid the IE error // See http://bugs.jquery.com/ticket/13378 rbuggyQSA = []; if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { // Build QSA regex // Regex strategy adopted from Diego Perini assert(function( div ) { // Select is set to empty string on purpose // This is to test IE's treatment of not explicitly // setting a boolean content attribute, // since its presence should be enough // http://bugs.jquery.com/ticket/12359 docElem.appendChild( div ).innerHTML = "
" + ""; // Support: IE8, Opera 11-12.16 // Nothing should be selected when empty strings follow ^= or $= or *= // The test attribute must be unknown in Opera but "safe" for WinRT // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section if ( div.querySelectorAll("[msallowcapture^='']").length ) { rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); } // Support: IE8 // Boolean attributes and "value" are not treated correctly if ( !div.querySelectorAll("[selected]").length ) { rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { rbuggyQSA.push("~="); } // Webkit/Opera - :checked should return selected option elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":checked").length ) { rbuggyQSA.push(":checked"); } // Support: Safari 8+, iOS 8+ // https://bugs.webkit.org/show_bug.cgi?id=136851 // In-page `selector#id sibing-combinator selector` fails if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { rbuggyQSA.push(".#.+[+~]"); } }); assert(function( div ) { // Support: Windows 8 Native Apps // The type and name attributes are restricted during .innerHTML assignment var input = document.createElement("input"); input.setAttribute( "type", "hidden" ); div.appendChild( input ).setAttribute( "name", "D" ); // Support: IE8 // Enforce case-sensitivity of name attribute if ( div.querySelectorAll("[name=d]").length ) { rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":enabled").length ) { rbuggyQSA.push( ":enabled", ":disabled" ); } // Opera 10-11 does not throw on post-comma invalid pseudos div.querySelectorAll("*,:x"); rbuggyQSA.push(",.*:"); }); } if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector) )) ) { assert(function( div ) { // Check to see if it's possible to do matchesSelector // on a disconnected node (IE 9) support.disconnectedMatch = matches.call( div, "div" ); // This should fail with an exception // Gecko does not error, returns false instead matches.call( div, "[s!='']:x" ); rbuggyMatches.push( "!=", pseudos ); }); } rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); /* Contains ---------------------------------------------------------------------- */ hasCompare = rnative.test( docElem.compareDocumentPosition ); // Element contains another // Purposefully self-exclusive // As in, an element does not contain itself contains = hasCompare || rnative.test( docElem.contains ) ? function( a, b ) { var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode; return a === bup || !!( bup && bup.nodeType === 1 && ( adown.contains ? adown.contains( bup ) : a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 )); } : function( a, b ) { if ( b ) { while ( (b = b.parentNode) ) { if ( b === a ) { return true; } } } return false; }; /* Sorting ---------------------------------------------------------------------- */ // Document order sorting sortOrder = hasCompare ? function( a, b ) { // Flag for duplicate removal if ( a === b ) { hasDuplicate = true; return 0; } // Sort on method existence if only one input has compareDocumentPosition var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; if ( compare ) { return compare; } // Calculate position if both inputs belong to the same document compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? a.compareDocumentPosition( b ) : // Otherwise we know they are disconnected 1; // Disconnected nodes if ( compare & 1 || (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { // Choose the first element that is related to our preferred document if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { return -1; } if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { return 1; } // Maintain original order return sortInput ? ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 0; } return compare & 4 ? -1 : 1; } : function( a, b ) { // Exit early if the nodes are identical if ( a === b ) { hasDuplicate = true; return 0; } var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [ a ], bp = [ b ]; // Parentless nodes are either documents or disconnected if ( !aup || !bup ) { return a === document ? -1 : b === document ? 1 : aup ? -1 : bup ? 1 : sortInput ? ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 0; // If the nodes are siblings, we can do a quick check } else if ( aup === bup ) { return siblingCheck( a, b ); } // Otherwise we need full lists of their ancestors for comparison cur = a; while ( (cur = cur.parentNode) ) { ap.unshift( cur ); } cur = b; while ( (cur = cur.parentNode) ) { bp.unshift( cur ); } // Walk down the tree looking for a discrepancy while ( ap[i] === bp[i] ) { i++; } return i ? // Do a sibling check if the nodes have a common ancestor siblingCheck( ap[i], bp[i] ) : // Otherwise nodes in our document sort first ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0; }; return document; }; Sizzle.matches = function( expr, elements ) { return Sizzle( expr, null, null, elements ); }; Sizzle.matchesSelector = function( elem, expr ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } // Make sure that attribute selectors are quoted expr = expr.replace( rattributeQuotes, "='$1']" ); if ( support.matchesSelector && documentIsHTML && !compilerCache[ expr + " " ] && ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { try { var ret = matches.call( elem, expr ); // IE 9's matchesSelector returns false on disconnected nodes if ( ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document && elem.document.nodeType !== 11 ) { return ret; } } catch (e) {} } return Sizzle( expr, document, null, [ elem ] ).length > 0; }; Sizzle.contains = function( context, elem ) { // Set document vars if needed if ( ( context.ownerDocument || context ) !== document ) { setDocument( context ); } return contains( context, elem ); }; Sizzle.attr = function( elem, name ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } var fn = Expr.attrHandle[ name.toLowerCase() ], // Don't get fooled by Object.prototype properties (jQuery #13807) val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? fn( elem, name, !documentIsHTML ) : undefined; return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute( name ) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null; }; Sizzle.error = function( msg ) { throw new Error( "Syntax error, unrecognized expression: " + msg ); }; /** * Document sorting and removing duplicates * @param {ArrayLike} results */ Sizzle.uniqueSort = function( results ) { var elem, duplicates = [], j = 0, i = 0; // Unless we *know* we can detect duplicates, assume their presence hasDuplicate = !support.detectDuplicates; sortInput = !support.sortStable && results.slice( 0 ); results.sort( sortOrder ); if ( hasDuplicate ) { while ( (elem = results[i++]) ) { if ( elem === results[ i ] ) { j = duplicates.push( i ); } } while ( j-- ) { results.splice( duplicates[ j ], 1 ); } } // Clear input after sorting to release objects // See https://github.com/jquery/sizzle/pull/225 sortInput = null; return results; }; /** * Utility function for retrieving the text value of an array of DOM nodes * @param {Array|Element} elem */ getText = Sizzle.getText = function( elem ) { var node, ret = "", i = 0, nodeType = elem.nodeType; if ( !nodeType ) { // If no nodeType, this is expected to be an array while ( (node = elem[i++]) ) { // Do not traverse comment nodes ret += getText( node ); } } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { // Use textContent for elements // innerText usage removed for consistency of new lines (jQuery #11153) if ( typeof elem.textContent === "string" ) { return elem.textContent; } else { // Traverse its children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { ret += getText( elem ); } } } else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } // Do not include comment or processing instruction nodes return ret; }; Expr = Sizzle.selectors = { // Can be adjusted by the user cacheLength: 50, createPseudo: markFunction, match: matchExpr, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: true }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: true }, "~": { dir: "previousSibling" } }, preFilter: { "ATTR": function( match ) { match[1] = match[1].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); if ( match[2] === "~=" ) { match[3] = " " + match[3] + " "; } return match.slice( 0, 4 ); }, "CHILD": function( match ) { /* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 what (child|of-type) 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 4 xn-component of xn+y argument ([+-]?\d*n|) 5 sign of xn-component 6 x of xn-component 7 sign of y-component 8 y of y-component */ match[1] = match[1].toLowerCase(); if ( match[1].slice( 0, 3 ) === "nth" ) { // nth-* requires argument if ( !match[3] ) { Sizzle.error( match[0] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); // other types prohibit arguments } else if ( match[3] ) { Sizzle.error( match[0] ); } return match; }, "PSEUDO": function( match ) { var excess, unquoted = !match[6] && match[2]; if ( matchExpr["CHILD"].test( match[0] ) ) { return null; } // Accept quoted arguments as-is if ( match[3] ) { match[2] = match[4] || match[5] || ""; // Strip excess characters from unquoted arguments } else if ( unquoted && rpseudo.test( unquoted ) && // Get excess from tokenize (recursively) (excess = tokenize( unquoted, true )) && // advance to the next closing parenthesis (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { // excess is a negative index match[0] = match[0].slice( 0, excess ); match[2] = unquoted.slice( 0, excess ); } // Return only captures needed by the pseudo filter method (type and argument) return match.slice( 0, 3 ); } }, filter: { "TAG": function( nodeNameSelector ) { var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); return nodeNameSelector === "*" ? function() { return true; } : function( elem ) { return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; }; }, "CLASS": function( className ) { var pattern = classCache[ className + " " ]; return pattern || (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && classCache( className, function( elem ) { return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); }); }, "ATTR": function( name, operator, check ) { return function( elem ) { var result = Sizzle.attr( elem, name ); if ( result == null ) { return operator === "!="; } if ( !operator ) { return true; } result += ""; return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf( check ) === 0 : operator === "*=" ? check && result.indexOf( check ) > -1 : operator === "$=" ? check && result.slice( -check.length ) === check : operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : false; }; }, "CHILD": function( type, what, argument, first, last ) { var simple = type.slice( 0, 3 ) !== "nth", forward = type.slice( -4 ) !== "last", ofType = what === "of-type"; return first === 1 && last === 0 ? // Shortcut for :nth-*(n) function( elem ) { return !!elem.parentNode; } : function( elem, context, xml ) { var cache, uniqueCache, outerCache, node, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false; if ( parent ) { // :(first|last|only)-(child|of-type) if ( simple ) { while ( dir ) { node = elem; while ( (node = node[ dir ]) ) { if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { return false; } } // Reverse direction for :only-* (if we haven't yet done so) start = dir = type === "only" && !start && "nextSibling"; } return true; } start = [ forward ? parent.firstChild : parent.lastChild ]; // non-xml :nth-child(...) stores cache data on `parent` if ( forward && useCache ) { // Seek `elem` from a previously-cached index // ...in a gzip-friendly way node = parent; outerCache = node[ expando ] || (node[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || (outerCache[ node.uniqueID ] = {}); cache = uniqueCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex && cache[ 2 ]; node = nodeIndex && parent.childNodes[ nodeIndex ]; while ( (node = ++nodeIndex && node && node[ dir ] || // Fallback to seeking `elem` from the start (diff = nodeIndex = 0) || start.pop()) ) { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; break; } } } else { // Use previously-cached element index if available if ( useCache ) { // ...in a gzip-friendly way node = elem; outerCache = node[ expando ] || (node[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || (outerCache[ node.uniqueID ] = {}); cache = uniqueCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex; } // xml :nth-child(...) // or :nth-last-child(...) or :nth(-last)?-of-type(...) if ( diff === false ) { // Use the same loop as above to seek `elem` from the start while ( (node = ++nodeIndex && node && node[ dir ] || (diff = nodeIndex = 0) || start.pop()) ) { if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { // Cache the index of each encountered element if ( useCache ) { outerCache = node[ expando ] || (node[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ node.uniqueID ] || (outerCache[ node.uniqueID ] = {}); uniqueCache[ type ] = [ dirruns, diff ]; } if ( node === elem ) { break; } } } } } // Incorporate the offset, then check against cycle size diff -= last; return diff === first || ( diff % first === 0 && diff / first >= 0 ); } }; }, "PSEUDO": function( pseudo, argument ) { // pseudo-class names are case-insensitive // http://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters // Remember that setFilters inherits from pseudos var args, fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || Sizzle.error( "unsupported pseudo: " + pseudo ); // The user may use createPseudo to indicate that // arguments are needed to create the filter function // just as Sizzle does if ( fn[ expando ] ) { return fn( argument ); } // But maintain support for old signatures if ( fn.length > 1 ) { args = [ pseudo, pseudo, "", argument ]; return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? markFunction(function( seed, matches ) { var idx, matched = fn( seed, argument ), i = matched.length; while ( i-- ) { idx = indexOf( seed, matched[i] ); seed[ idx ] = !( matches[ idx ] = matched[i] ); } }) : function( elem ) { return fn( elem, 0, args ); }; } return fn; } }, pseudos: { // Potentially complex pseudos "not": markFunction(function( selector ) { // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators var input = [], results = [], matcher = compile( selector.replace( rtrim, "$1" ) ); return matcher[ expando ] ? markFunction(function( seed, matches, context, xml ) { var elem, unmatched = matcher( seed, null, xml, [] ), i = seed.length; // Match elements unmatched by `matcher` while ( i-- ) { if ( (elem = unmatched[i]) ) { seed[i] = !(matches[i] = elem); } } }) : function( elem, context, xml ) { input[0] = elem; matcher( input, null, xml, results ); // Don't keep the element (issue #299) input[0] = null; return !results.pop(); }; }), "has": markFunction(function( selector ) { return function( elem ) { return Sizzle( selector, elem ).length > 0; }; }), "contains": markFunction(function( text ) { text = text.replace( runescape, funescape ); return function( elem ) { return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; }; }), // "Whether an element is represented by a :lang() selector // is based solely on the element's language value // being equal to the identifier C, // or beginning with the identifier C immediately followed by "-". // The matching of C against the element's language value is performed case-insensitively. // The identifier C does not have to be a valid language name." // http://www.w3.org/TR/selectors/#lang-pseudo "lang": markFunction( function( lang ) { // lang value must be a valid identifier if ( !ridentifier.test(lang || "") ) { Sizzle.error( "unsupported lang: " + lang ); } lang = lang.replace( runescape, funescape ).toLowerCase(); return function( elem ) { var elemLang; do { if ( (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { elemLang = elemLang.toLowerCase(); return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; } } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); return false; }; }), // Miscellaneous "target": function( elem ) { var hash = window.location && window.location.hash; return hash && hash.slice( 1 ) === elem.id; }, "root": function( elem ) { return elem === docElem; }, "focus": function( elem ) { return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); }, // Boolean properties "enabled": function( elem ) { return elem.disabled === false; }, "disabled": function( elem ) { return elem.disabled === true; }, "checked": function( elem ) { // In CSS3, :checked should return both checked and selected elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked var nodeName = elem.nodeName.toLowerCase(); return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); }, "selected": function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { elem.parentNode.selectedIndex; } return elem.selected === true; }, // Contents "empty": function( elem ) { // http://www.w3.org/TR/selectors/#empty-pseudo // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), // but not by others (comment: 8; processing instruction: 7; etc.) // nodeType < 6 works because attributes (2) do not appear as children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { if ( elem.nodeType < 6 ) { return false; } } return true; }, "parent": function( elem ) { return !Expr.pseudos["empty"]( elem ); }, // Element/input types "header": function( elem ) { return rheader.test( elem.nodeName ); }, "input": function( elem ) { return rinputs.test( elem.nodeName ); }, "button": function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === "button" || name === "button"; }, "text": function( elem ) { var attr; return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && // Support: IE<8 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); }, // Position-in-collection "first": createPositionalPseudo(function() { return [ 0 ]; }), "last": createPositionalPseudo(function( matchIndexes, length ) { return [ length - 1 ]; }), "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; }), "even": createPositionalPseudo(function( matchIndexes, length ) { var i = 0; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "odd": createPositionalPseudo(function( matchIndexes, length ) { var i = 1; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; --i >= 0; ) { matchIndexes.push( i ); } return matchIndexes; }), "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; ++i < length; ) { matchIndexes.push( i ); } return matchIndexes; }) } }; Expr.pseudos["nth"] = Expr.pseudos["eq"]; // Add button/input type pseudos for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { Expr.pseudos[ i ] = createInputPseudo( i ); } for ( i in { submit: true, reset: true } ) { Expr.pseudos[ i ] = createButtonPseudo( i ); } // Easy API for creating new setFilters function setFilters() {} setFilters.prototype = Expr.filters = Expr.pseudos; Expr.setFilters = new setFilters(); tokenize = Sizzle.tokenize = function( selector, parseOnly ) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[ selector + " " ]; if ( cached ) { return parseOnly ? 0 : cached.slice( 0 ); } soFar = selector; groups = []; preFilters = Expr.preFilter; while ( soFar ) { // Comma and first run if ( !matched || (match = rcomma.exec( soFar )) ) { if ( match ) { // Don't consume trailing commas as valid soFar = soFar.slice( match[0].length ) || soFar; } groups.push( (tokens = []) ); } matched = false; // Combinators if ( (match = rcombinators.exec( soFar )) ) { matched = match.shift(); tokens.push({ value: matched, // Cast descendant combinators to space type: match[0].replace( rtrim, " " ) }); soFar = soFar.slice( matched.length ); } // Filters for ( type in Expr.filter ) { if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || (match = preFilters[ type ]( match ))) ) { matched = match.shift(); tokens.push({ value: matched, type: type, matches: match }); soFar = soFar.slice( matched.length ); } } if ( !matched ) { break; } } // Return the length of the invalid excess // if we're just parsing // Otherwise, throw an error or return tokens return parseOnly ? soFar.length : soFar ? Sizzle.error( selector ) : // Cache the tokens tokenCache( selector, groups ).slice( 0 ); }; function toSelector( tokens ) { var i = 0, len = tokens.length, selector = ""; for ( ; i < len; i++ ) { selector += tokens[i].value; } return selector; } function addCombinator( matcher, combinator, base ) { var dir = combinator.dir, checkNonElements = base && dir === "parentNode", doneName = done++; return combinator.first ? // Check against closest ancestor/preceding element function( elem, context, xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { return matcher( elem, context, xml ); } } } : // Check against all ancestor/preceding elements function( elem, context, xml ) { var oldCache, uniqueCache, outerCache, newCache = [ dirruns, doneName ]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching if ( xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { if ( matcher( elem, context, xml ) ) { return true; } } } } else { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { outerCache = elem[ expando ] || (elem[ expando ] = {}); // Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); if ( (oldCache = uniqueCache[ dir ]) && oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { // Assign to newCache so results back-propagate to previous elements return (newCache[ 2 ] = oldCache[ 2 ]); } else { // Reuse newcache so results back-propagate to previous elements uniqueCache[ dir ] = newCache; // A match means we're done; a fail means we have to keep checking if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { return true; } } } } } }; } function elementMatcher( matchers ) { return matchers.length > 1 ? function( elem, context, xml ) { var i = matchers.length; while ( i-- ) { if ( !matchers[i]( elem, context, xml ) ) { return false; } } return true; } : matchers[0]; } function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { Sizzle( selector, contexts[i], results ); } return results; } function condense( unmatched, map, filter, context, xml ) { var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null; for ( ; i < len; i++ ) { if ( (elem = unmatched[i]) ) { if ( !filter || filter( elem, context, xml ) ) { newUnmatched.push( elem ); if ( mapped ) { map.push( i ); } } } } return newUnmatched; } function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { if ( postFilter && !postFilter[ expando ] ) { postFilter = setMatcher( postFilter ); } if ( postFinder && !postFinder[ expando ] ) { postFinder = setMatcher( postFinder, postSelector ); } return markFunction(function( seed, results, context, xml ) { var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? condense( elems, preMap, preFilter, context, xml ) : elems, matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, postFinder || ( seed ? preFilter : preexisting || postFilter ) ? // ...intermediate processing is necessary [] : // ...otherwise use results directly results : matcherIn; // Find primary matches if ( matcher ) { matcher( matcherIn, matcherOut, context, xml ); } // Apply postFilter if ( postFilter ) { temp = condense( matcherOut, postMap ); postFilter( temp, [], context, xml ); // Un-match failing elements by moving them back to matcherIn i = temp.length; while ( i-- ) { if ( (elem = temp[i]) ) { matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); } } } if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { // Get the final matcherOut by condensing this intermediate into postFinder contexts temp = []; i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) ) { // Restore matcherIn since elem is not yet a final match temp.push( (matcherIn[i] = elem) ); } } postFinder( null, (matcherOut = []), temp, xml ); } // Move matched elements from seed to results to keep them synchronized i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) && (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { seed[temp] = !(results[temp] = elem); } } } // Add elements to results, through postFinder if defined } else { matcherOut = condense( matcherOut === results ? matcherOut.splice( preexisting, matcherOut.length ) : matcherOut ); if ( postFinder ) { postFinder( null, results, matcherOut, xml ); } else { push.apply( results, matcherOut ); } } }); } function matcherFromTokens( tokens ) { var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[ tokens[0].type ], implicitRelative = leadingRelative || Expr.relative[" "], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s) matchContext = addCombinator( function( elem ) { return elem === checkContext; }, implicitRelative, true ), matchAnyContext = addCombinator( function( elem ) { return indexOf( checkContext, elem ) > -1; }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( (checkContext = context).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); // Avoid hanging onto element (issue #299) checkContext = null; return ret; } ]; for ( ; i < len; i++ ) { if ( (matcher = Expr.relative[ tokens[i].type ]) ) { matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; } else { matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); // Return special upon seeing a positional matcher if ( matcher[ expando ] ) { // Find the next relative operator (if any) for proper handling j = ++i; for ( ; j < len; j++ ) { if ( Expr.relative[ tokens[j].type ] ) { break; } } return setMatcher( i > 1 && elementMatcher( matchers ), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*` tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) ).replace( rtrim, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), j < len && toSelector( tokens ) ); } matchers.push( matcher ); } } return elementMatcher( matchers ); } function matcherFromGroupMatchers( elementMatchers, setMatchers ) { var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function( seed, context, xml, results, outermost ) { var elem, j, matcher, matchedCount = 0, i = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, // We must always have either seed elements or outermost context elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), // Use integer dirruns iff this is the outermost matcher dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), len = elems.length; if ( outermost ) { outermostContext = context === document || context || outermost; } // Add elements passing elementMatchers directly to results // Support: IE<9, Safari // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id for ( ; i !== len && (elem = elems[i]) != null; i++ ) { if ( byElement && elem ) { j = 0; if ( !context && elem.ownerDocument !== document ) { setDocument( elem ); xml = !documentIsHTML; } while ( (matcher = elementMatchers[j++]) ) { if ( matcher( elem, context || document, xml) ) { results.push( elem ); break; } } if ( outermost ) { dirruns = dirrunsUnique; } } // Track unmatched elements for set filters if ( bySet ) { // They will have gone through all possible matchers if ( (elem = !matcher && elem) ) { matchedCount--; } // Lengthen the array for every element, matched or not if ( seed ) { unmatched.push( elem ); } } } // `i` is now the count of elements visited above, and adding it to `matchedCount` // makes the latter nonnegative. matchedCount += i; // Apply set filters to unmatched elements // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` // equals `i`), unless we didn't visit _any_ elements in the above loop because we have // no element matchers and no seed. // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that // case, which will result in a "00" `matchedCount` that differs from `i` but is also // numerically zero. if ( bySet && i !== matchedCount ) { j = 0; while ( (matcher = setMatchers[j++]) ) { matcher( unmatched, setMatched, context, xml ); } if ( seed ) { // Reintegrate element matches to eliminate the need for sorting if ( matchedCount > 0 ) { while ( i-- ) { if ( !(unmatched[i] || setMatched[i]) ) { setMatched[i] = pop.call( results ); } } } // Discard index placeholder values to get only actual matches setMatched = condense( setMatched ); } // Add matches to results push.apply( results, setMatched ); // Seedless set matches succeeding multiple successful matchers stipulate sorting if ( outermost && !seed && setMatched.length > 0 && ( matchedCount + setMatchers.length ) > 1 ) { Sizzle.uniqueSort( results ); } } // Override manipulation of globals by nested matchers if ( outermost ) { dirruns = dirrunsUnique; outermostContext = contextBackup; } return unmatched; }; return bySet ? markFunction( superMatcher ) : superMatcher; } compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { var i, setMatchers = [], elementMatchers = [], cached = compilerCache[ selector + " " ]; if ( !cached ) { // Generate a function of recursive functions that can be used to check each element if ( !match ) { match = tokenize( selector ); } i = match.length; while ( i-- ) { cached = matcherFromTokens( match[i] ); if ( cached[ expando ] ) { setMatchers.push( cached ); } else { elementMatchers.push( cached ); } } // Cache the compiled function cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); // Save selector and tokenization cached.selector = selector; } return cached; }; /** * A low-level selection function that works with Sizzle's compiled * selector functions * @param {String|Function} selector A selector or a pre-compiled * selector function built with Sizzle.compile * @param {Element} context * @param {Array} [results] * @param {Array} [seed] A set of elements to match against */ select = Sizzle.select = function( selector, context, results, seed ) { var i, tokens, token, type, find, compiled = typeof selector === "function" && selector, match = !seed && tokenize( (selector = compiled.selector || selector) ); results = results || []; // Try to minimize operations if there is only one selector in the list and no seed // (the latter of which guarantees us context) if ( match.length === 1 ) { // Reduce context if the leading compound selector is an ID tokens = match[0] = match[0].slice( 0 ); if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; if ( !context ) { return results; // Precompiled matchers will still verify ancestry, so step up a level } else if ( compiled ) { context = context.parentNode; } selector = selector.slice( tokens.shift().value.length ); } // Fetch a seed set for right-to-left matching i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; while ( i-- ) { token = tokens[i]; // Abort if we hit a combinator if ( Expr.relative[ (type = token.type) ] ) { break; } if ( (find = Expr.find[ type ]) ) { // Search, expanding context for leading sibling combinators if ( (seed = find( token.matches[0].replace( runescape, funescape ), rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context )) ) { // If seed is empty or no tokens remain, we can return early tokens.splice( i, 1 ); selector = seed.length && toSelector( tokens ); if ( !selector ) { push.apply( results, seed ); return results; } break; } } } } // Compile and execute a filtering function if one is not provided // Provide `match` to avoid retokenization if we modified the selector above ( compiled || compile( selector, match ) )( seed, context, !documentIsHTML, results, !context || rsibling.test( selector ) && testContext( context.parentNode ) || context ); return results; }; // One-time assignments // Sort stability support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; // Support: Chrome 14-35+ // Always assume duplicates if they aren't passed to the comparison function support.detectDuplicates = !!hasDuplicate; // Initialize against the default document setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) // Detached nodes confoundingly follow *each other* support.sortDetached = assert(function( div1 ) { // Should return 1, but returns 4 (following) return div1.compareDocumentPosition( document.createElement("div") ) & 1; }); // Support: IE<8 // Prevent attribute/property "interpolation" // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx if ( !assert(function( div ) { div.innerHTML = ""; return div.firstChild.getAttribute("href") === "#" ; }) ) { addHandle( "type|href|height|width", function( elem, name, isXML ) { if ( !isXML ) { return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); } }); } // Support: IE<9 // Use defaultValue in place of getAttribute("value") if ( !support.attributes || !assert(function( div ) { div.innerHTML = ""; div.firstChild.setAttribute( "value", "" ); return div.firstChild.getAttribute( "value" ) === ""; }) ) { addHandle( "value", function( elem, name, isXML ) { if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { return elem.defaultValue; } }); } // Support: IE<9 // Use getAttributeNode to fetch booleans when getAttribute lies if ( !assert(function( div ) { return div.getAttribute("disabled") == null; }) ) { addHandle( booleans, function( elem, name, isXML ) { var val; if ( !isXML ) { return elem[ name ] === true ? name.toLowerCase() : (val = elem.getAttributeNode( name )) && val.specified ? val.value : null; } }); } return Sizzle; })( window ); jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; jQuery.expr[ ":" ] = jQuery.expr.pseudos; jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; jQuery.text = Sizzle.getText; jQuery.isXMLDoc = Sizzle.isXML; jQuery.contains = Sizzle.contains; var dir = function( elem, dir, until ) { var matched = [], truncate = until !== undefined; while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { if ( elem.nodeType === 1 ) { if ( truncate && jQuery( elem ).is( until ) ) { break; } matched.push( elem ); } } return matched; }; var siblings = function( n, elem ) { var matched = []; for ( ; n; n = n.nextSibling ) { if ( n.nodeType === 1 && n !== elem ) { matched.push( n ); } } return matched; }; var rneedsContext = jQuery.expr.match.needsContext; var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); var risSimple = /^.[^:#\[\.,]*$/; // Implement the identical functionality for filter and not function winnow( elements, qualifier, not ) { if ( jQuery.isFunction( qualifier ) ) { return jQuery.grep( elements, function( elem, i ) { /* jshint -W018 */ return !!qualifier.call( elem, i, elem ) !== not; } ); } if ( qualifier.nodeType ) { return jQuery.grep( elements, function( elem ) { return ( elem === qualifier ) !== not; } ); } if ( typeof qualifier === "string" ) { if ( risSimple.test( qualifier ) ) { return jQuery.filter( qualifier, elements, not ); } qualifier = jQuery.filter( qualifier, elements ); } return jQuery.grep( elements, function( elem ) { return ( jQuery.inArray( elem, qualifier ) > -1 ) !== not; } ); } jQuery.filter = function( expr, elems, not ) { var elem = elems[ 0 ]; if ( not ) { expr = ":not(" + expr + ")"; } return elems.length === 1 && elem.nodeType === 1 ? jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { return elem.nodeType === 1; } ) ); }; jQuery.fn.extend( { find: function( selector ) { var i, ret = [], self = this, len = self.length; if ( typeof selector !== "string" ) { return this.pushStack( jQuery( selector ).filter( function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( self[ i ], this ) ) { return true; } } } ) ); } for ( i = 0; i < len; i++ ) { jQuery.find( selector, self[ i ], ret ); } // Needed because $( selector, context ) becomes $( context ).find( selector ) ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); ret.selector = this.selector ? this.selector + " " + selector : selector; return ret; }, filter: function( selector ) { return this.pushStack( winnow( this, selector || [], false ) ); }, not: function( selector ) { return this.pushStack( winnow( this, selector || [], true ) ); }, is: function( selector ) { return !!winnow( this, // If this is a positional/relative selector, check membership in the returned set // so $("p:first").is("p:last") won't return true for a doc with two "p". typeof selector === "string" && rneedsContext.test( selector ) ? jQuery( selector ) : selector || [], false ).length; } } ); // Initialize a jQuery object // A central reference to the root jQuery(document) var rootjQuery, // A simple way to check for HTML strings // Prioritize #id over to avoid XSS via location.hash (#9521) // Strict HTML recognition (#11290: must start with <) rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, init = jQuery.fn.init = function( selector, context, root ) { var match, elem; // HANDLE: $(""), $(null), $(undefined), $(false) if ( !selector ) { return this; } // init accepts an alternate rootjQuery // so migrate can support jQuery.sub (gh-2101) root = root || rootjQuery; // Handle HTML strings if ( typeof selector === "string" ) { if ( selector.charAt( 0 ) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { // Assume that strings that start and end with <> are HTML and skip the regex check match = [ null, selector, null ]; } else { match = rquickExpr.exec( selector ); } // Match html or make sure no context is specified for #id if ( match && ( match[ 1 ] || !context ) ) { // HANDLE: $(html) -> $(array) if ( match[ 1 ] ) { context = context instanceof jQuery ? context[ 0 ] : context; // scripts is true for back-compat // Intentionally let the error be thrown if parseHTML is not present jQuery.merge( this, jQuery.parseHTML( match[ 1 ], context && context.nodeType ? context.ownerDocument || context : document, true ) ); // HANDLE: $(html, props) if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { for ( match in context ) { // Properties of context are called as methods if possible if ( jQuery.isFunction( this[ match ] ) ) { this[ match ]( context[ match ] ); // ...and otherwise set as attributes } else { this.attr( match, context[ match ] ); } } } return this; // HANDLE: $(#id) } else { elem = document.getElementById( match[ 2 ] ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id !== match[ 2 ] ) { return rootjQuery.find( selector ); } // Otherwise, we inject the element directly into the jQuery object this.length = 1; this[ 0 ] = elem; } this.context = document; this.selector = selector; return this; } // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { return ( context || root ).find( selector ); // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { return this.constructor( context ).find( selector ); } // HANDLE: $(DOMElement) } else if ( selector.nodeType ) { this.context = this[ 0 ] = selector; this.length = 1; return this; // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) { return typeof root.ready !== "undefined" ? root.ready( selector ) : // Execute immediately if ready is not present selector( jQuery ); } if ( selector.selector !== undefined ) { this.selector = selector.selector; this.context = selector.context; } return jQuery.makeArray( selector, this ); }; // Give the init function the jQuery prototype for later instantiation init.prototype = jQuery.fn; // Initialize central reference rootjQuery = jQuery( document ); var rparentsprev = /^(?:parents|prev(?:Until|All))/, // methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique = { children: true, contents: true, next: true, prev: true }; jQuery.fn.extend( { has: function( target ) { var i, targets = jQuery( target, this ), len = targets.length; return this.filter( function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( this, targets[ i ] ) ) { return true; } } } ); }, closest: function( selectors, context ) { var cur, i = 0, l = this.length, matched = [], pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? jQuery( selectors, context || this.context ) : 0; for ( ; i < l; i++ ) { for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { // Always skip document fragments if ( cur.nodeType < 11 && ( pos ? pos.index( cur ) > -1 : // Don't pass non-elements to Sizzle cur.nodeType === 1 && jQuery.find.matchesSelector( cur, selectors ) ) ) { matched.push( cur ); break; } } } return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); }, // Determine the position of an element within // the matched set of elements index: function( elem ) { // No argument, return index in parent if ( !elem ) { return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; } // index in selector if ( typeof elem === "string" ) { return jQuery.inArray( this[ 0 ], jQuery( elem ) ); } // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used elem.jquery ? elem[ 0 ] : elem, this ); }, add: function( selector, context ) { return this.pushStack( jQuery.uniqueSort( jQuery.merge( this.get(), jQuery( selector, context ) ) ) ); }, addBack: function( selector ) { return this.add( selector == null ? this.prevObject : this.prevObject.filter( selector ) ); } } ); function sibling( cur, dir ) { do { cur = cur[ dir ]; } while ( cur && cur.nodeType !== 1 ); return cur; } jQuery.each( { parent: function( elem ) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; }, parents: function( elem ) { return dir( elem, "parentNode" ); }, parentsUntil: function( elem, i, until ) { return dir( elem, "parentNode", until ); }, next: function( elem ) { return sibling( elem, "nextSibling" ); }, prev: function( elem ) { return sibling( elem, "previousSibling" ); }, nextAll: function( elem ) { return dir( elem, "nextSibling" ); }, prevAll: function( elem ) { return dir( elem, "previousSibling" ); }, nextUntil: function( elem, i, until ) { return dir( elem, "nextSibling", until ); }, prevUntil: function( elem, i, until ) { return dir( elem, "previousSibling", until ); }, siblings: function( elem ) { return siblings( ( elem.parentNode || {} ).firstChild, elem ); }, children: function( elem ) { return siblings( elem.firstChild ); }, contents: function( elem ) { return jQuery.nodeName( elem, "iframe" ) ? elem.contentDocument || elem.contentWindow.document : jQuery.merge( [], elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { var ret = jQuery.map( this, fn, until ); if ( name.slice( -5 ) !== "Until" ) { selector = until; } if ( selector && typeof selector === "string" ) { ret = jQuery.filter( selector, ret ); } if ( this.length > 1 ) { // Remove duplicates if ( !guaranteedUnique[ name ] ) { ret = jQuery.uniqueSort( ret ); } // Reverse order for parents* and prev-derivatives if ( rparentsprev.test( name ) ) { ret = ret.reverse(); } } return this.pushStack( ret ); }; } ); var rnotwhite = ( /\S+/g ); // Convert String-formatted options into Object-formatted ones function createOptions( options ) { var object = {}; jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { object[ flag ] = true; } ); return object; } /* * Create a callback list using the following parameters: * * options: an optional list of space-separated options that will change how * the callback list behaves or a more traditional option object * * By default a callback list will act like an event callback list and can be * "fired" multiple times. * * Possible options: * * once: will ensure the callback list can only be fired once (like a Deferred) * * memory: will keep track of previous values and will call any callback added * after the list has been fired right away with the latest "memorized" * values (like a Deferred) * * unique: will ensure a callback can only be added once (no duplicate in the list) * * stopOnFalse: interrupt callings when a callback returns false * */ jQuery.Callbacks = function( options ) { // Convert options from String-formatted to Object-formatted if needed // (we check in cache first) options = typeof options === "string" ? createOptions( options ) : jQuery.extend( {}, options ); var // Flag to know if list is currently firing firing, // Last fire value for non-forgettable lists memory, // Flag to know if list was already fired fired, // Flag to prevent firing locked, // Actual callback list list = [], // Queue of execution data for repeatable lists queue = [], // Index of currently firing callback (modified by add/remove as needed) firingIndex = -1, // Fire callbacks fire = function() { // Enforce single-firing locked = options.once; // Execute callbacks for all pending executions, // respecting firingIndex overrides and runtime changes fired = firing = true; for ( ; queue.length; firingIndex = -1 ) { memory = queue.shift(); while ( ++firingIndex < list.length ) { // Run callback and check for early termination if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && options.stopOnFalse ) { // Jump to end and forget the data so .add doesn't re-fire firingIndex = list.length; memory = false; } } } // Forget the data if we're done with it if ( !options.memory ) { memory = false; } firing = false; // Clean up if we're done firing for good if ( locked ) { // Keep an empty list if we have data for future add calls if ( memory ) { list = []; // Otherwise, this object is spent } else { list = ""; } } }, // Actual Callbacks object self = { // Add a callback or a collection of callbacks to the list add: function() { if ( list ) { // If we have memory from a past run, we should fire after adding if ( memory && !firing ) { firingIndex = list.length - 1; queue.push( memory ); } ( function add( args ) { jQuery.each( args, function( _, arg ) { if ( jQuery.isFunction( arg ) ) { if ( !options.unique || !self.has( arg ) ) { list.push( arg ); } } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { // Inspect recursively add( arg ); } } ); } )( arguments ); if ( memory && !firing ) { fire(); } } return this; }, // Remove a callback from the list remove: function() { jQuery.each( arguments, function( _, arg ) { var index; while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { list.splice( index, 1 ); // Handle firing indexes if ( index <= firingIndex ) { firingIndex--; } } } ); return this; }, // Check if a given callback is in the list. // If no argument is given, return whether or not list has callbacks attached. has: function( fn ) { return fn ? jQuery.inArray( fn, list ) > -1 : list.length > 0; }, // Remove all callbacks from the list empty: function() { if ( list ) { list = []; } return this; }, // Disable .fire and .add // Abort any current/pending executions // Clear all callbacks and values disable: function() { locked = queue = []; list = memory = ""; return this; }, disabled: function() { return !list; }, // Disable .fire // Also disable .add unless we have memory (since it would have no effect) // Abort any pending executions lock: function() { locked = true; if ( !memory ) { self.disable(); } return this; }, locked: function() { return !!locked; }, // Call all callbacks with the given context and arguments fireWith: function( context, args ) { if ( !locked ) { args = args || []; args = [ context, args.slice ? args.slice() : args ]; queue.push( args ); if ( !firing ) { fire(); } } return this; }, // Call all the callbacks with the given arguments fire: function() { self.fireWith( this, arguments ); return this; }, // To know if the callbacks have already been called at least once fired: function() { return !!fired; } }; return self; }; jQuery.extend( { Deferred: function( func ) { var tuples = [ // action, add listener, listener list, final state [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], [ "notify", "progress", jQuery.Callbacks( "memory" ) ] ], state = "pending", promise = { state: function() { return state; }, always: function() { deferred.done( arguments ).fail( arguments ); return this; }, then: function( /* fnDone, fnFail, fnProgress */ ) { var fns = arguments; return jQuery.Deferred( function( newDefer ) { jQuery.each( tuples, function( i, tuple ) { var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; // deferred[ done | fail | progress ] for forwarding actions to newDefer deferred[ tuple[ 1 ] ]( function() { var returned = fn && fn.apply( this, arguments ); if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise() .progress( newDefer.notify ) .done( newDefer.resolve ) .fail( newDefer.reject ); } else { newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); } } ); } ); fns = null; } ).promise(); }, // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { return obj != null ? jQuery.extend( obj, promise ) : promise; } }, deferred = {}; // Keep pipe for back-compat promise.pipe = promise.then; // Add list-specific methods jQuery.each( tuples, function( i, tuple ) { var list = tuple[ 2 ], stateString = tuple[ 3 ]; // promise[ done | fail | progress ] = list.add promise[ tuple[ 1 ] ] = list.add; // Handle state if ( stateString ) { list.add( function() { // state = [ resolved | rejected ] state = stateString; // [ reject_list | resolve_list ].disable; progress_list.lock }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); } // deferred[ resolve | reject | notify ] deferred[ tuple[ 0 ] ] = function() { deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); return this; }; deferred[ tuple[ 0 ] + "With" ] = list.fireWith; } ); // Make the deferred a promise promise.promise( deferred ); // Call given func if any if ( func ) { func.call( deferred, deferred ); } // All done! return deferred; }, // Deferred helper when: function( subordinate /* , ..., subordinateN */ ) { var i = 0, resolveValues = slice.call( arguments ), length = resolveValues.length, // the count of uncompleted subordinates remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, // the master Deferred. // If resolveValues consist of only a single Deferred, just use that. deferred = remaining === 1 ? subordinate : jQuery.Deferred(), // Update function for both resolve and progress values updateFunc = function( i, contexts, values ) { return function( value ) { contexts[ i ] = this; values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; if ( values === progressValues ) { deferred.notifyWith( contexts, values ); } else if ( !( --remaining ) ) { deferred.resolveWith( contexts, values ); } }; }, progressValues, progressContexts, resolveContexts; // add listeners to Deferred subordinates; treat others as resolved if ( length > 1 ) { progressValues = new Array( length ); progressContexts = new Array( length ); resolveContexts = new Array( length ); for ( ; i < length; i++ ) { if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { resolveValues[ i ].promise() .progress( updateFunc( i, progressContexts, progressValues ) ) .done( updateFunc( i, resolveContexts, resolveValues ) ) .fail( deferred.reject ); } else { --remaining; } } } // if we're not waiting on anything, resolve the master if ( !remaining ) { deferred.resolveWith( resolveContexts, resolveValues ); } return deferred.promise(); } } ); // The deferred used on DOM ready var readyList; jQuery.fn.ready = function( fn ) { // Add the callback jQuery.ready.promise().done( fn ); return this; }; jQuery.extend( { // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait: 1, // Hold (or release) the ready event holdReady: function( hold ) { if ( hold ) { jQuery.readyWait++; } else { jQuery.ready( true ); } }, // Handle when the DOM is ready ready: function( wait ) { // Abort if there are pending holds or we're already ready if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { return; } // Remember that the DOM is ready jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be if ( wait !== true && --jQuery.readyWait > 0 ) { return; } // If there are functions bound, to execute readyList.resolveWith( document, [ jQuery ] ); // Trigger any bound ready events if ( jQuery.fn.triggerHandler ) { jQuery( document ).triggerHandler( "ready" ); jQuery( document ).off( "ready" ); } } } ); /** * Clean-up method for dom ready events */ function detach() { if ( document.addEventListener ) { document.removeEventListener( "DOMContentLoaded", completed, false ); window.removeEventListener( "load", completed, false ); } else { document.detachEvent( "onreadystatechange", completed ); window.detachEvent( "onload", completed ); } } /** * The ready event handler and self cleanup method */ function completed() { // readyState === "complete" is good enough for us to call the dom ready in oldIE if ( document.addEventListener || window.event.type === "load" || document.readyState === "complete" ) { detach(); jQuery.ready(); } } jQuery.ready.promise = function( obj ) { if ( !readyList ) { readyList = jQuery.Deferred(); // Catch cases where $(document).ready() is called // after the browser event has already occurred. // Support: IE6-10 // Older IE sometimes signals "interactive" too soon if ( document.readyState === "complete" || ( document.readyState !== "loading" && !document.documentElement.doScroll && (/a/[-1]!=='a') ) ) { // Handle it asynchronously to allow scripts the opportunity to delay ready window.setTimeout( jQuery.ready ); // Standards-based browsers support DOMContentLoaded } else if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", completed, false ); // A fallback to window.onload, that will always work window.addEventListener( "load", completed, false ); // If IE event model is used } else { // Ensure firing before onload, maybe late but safe also for iframes document.attachEvent( "onreadystatechange", completed ); // A fallback to window.onload, that will always work window.attachEvent( "onload", completed ); // If IE and not a frame // continually check to see if the document is ready var top = false; try { top = window.frameElement == null && document.documentElement; } catch ( e ) {} if ( top && top.doScroll ) { ( function doScrollCheck() { if ( !jQuery.isReady ) { try { // Use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ top.doScroll( "left" ); } catch ( e ) { return window.setTimeout( doScrollCheck, 50 ); } // detach all dom ready events detach(); // and execute any waiting functions jQuery.ready(); } } )(); } } } return readyList.promise( obj ); }; // Kick off the DOM ready check even if the user does not jQuery.ready.promise(); // Support: IE<9 // Iteration over object's inherited properties before its own var i; for ( i in jQuery( support ) ) { break; } support.ownFirst = i === "0"; // Note: most support tests are defined in their respective modules. // false until the test is run support.inlineBlockNeedsLayout = false; // Execute ASAP in case we need to set body.style.zoom jQuery( function() { // Minified: var a,b,c,d var val, div, body, container; body = document.getElementsByTagName( "body" )[ 0 ]; if ( !body || !body.style ) { // Return for frameset docs that don't have a body return; } // Setup div = document.createElement( "div" ); container = document.createElement( "div" ); container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; body.appendChild( container ).appendChild( div ); if ( typeof div.style.zoom !== "undefined" ) { // Support: IE<8 // Check if natively block-level elements act like inline-block // elements when setting their display to 'inline' and giving // them layout div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; if ( val ) { // Prevent IE 6 from affecting layout for positioned elements #11048 // Prevent IE from shrinking the body in IE 7 mode #12869 // Support: IE<8 body.style.zoom = 1; } } body.removeChild( container ); } ); ( function() { var div = document.createElement( "div" ); // Support: IE<9 support.deleteExpando = true; try { delete div.test; } catch ( e ) { support.deleteExpando = false; } // Null elements to avoid leaks in IE. div = null; } )(); var acceptData = function( elem ) { var noData = jQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ], nodeType = +elem.nodeType || 1; // Do not set data on non-element DOM nodes because it will not be cleared (#8335). return nodeType !== 1 && nodeType !== 9 ? false : // Nodes accept data unless otherwise specified; rejection can be conditional !noData || noData !== true && elem.getAttribute( "classid" ) === noData; }; var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, rmultiDash = /([A-Z])/g; function dataAttr( elem, key, data ) { // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); data = elem.getAttribute( name ); if ( typeof data === "string" ) { try { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : // Only convert to a number if it doesn't change the string +data + "" === data ? +data : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch ( e ) {} // Make sure we set the data so it isn't changed later jQuery.data( elem, key, data ); } else { data = undefined; } } return data; } // checks a cache object for emptiness function isEmptyDataObject( obj ) { var name; for ( name in obj ) { // if the public data object is empty, the private is still empty if ( name === "data" && jQuery.isEmptyObject( obj[ name ] ) ) { continue; } if ( name !== "toJSON" ) { return false; } } return true; } function internalData( elem, name, data, pvt /* Internal Use Only */ ) { if ( !acceptData( elem ) ) { return; } var ret, thisCache, internalKey = jQuery.expando, // We have to handle DOM nodes and JS objects differently because IE6-7 // can't GC object references properly across the DOM-JS boundary isNode = elem.nodeType, // Only DOM nodes need the global jQuery cache; JS object data is // attached directly to the object so GC can occur automatically cache = isNode ? jQuery.cache : elem, // Only defining an ID for JS objects if its cache already exists allows // the code to shortcut on the same path as a DOM node with no cache id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; // Avoid doing any more work than we need to when trying to get data on an // object that has no data at all if ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) && data === undefined && typeof name === "string" ) { return; } if ( !id ) { // Only DOM nodes need a new unique ID for each element since their data // ends up in the global cache if ( isNode ) { id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++; } else { id = internalKey; } } if ( !cache[ id ] ) { // Avoid exposing jQuery metadata on plain JS objects when the object // is serialized using JSON.stringify cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; } // An object can be passed to jQuery.data instead of a key/value pair; this gets // shallow copied over onto the existing cache if ( typeof name === "object" || typeof name === "function" ) { if ( pvt ) { cache[ id ] = jQuery.extend( cache[ id ], name ); } else { cache[ id ].data = jQuery.extend( cache[ id ].data, name ); } } thisCache = cache[ id ]; // jQuery data() is stored in a separate object inside the object's internal data // cache in order to avoid key collisions between internal data and user-defined // data. if ( !pvt ) { if ( !thisCache.data ) { thisCache.data = {}; } thisCache = thisCache.data; } if ( data !== undefined ) { thisCache[ jQuery.camelCase( name ) ] = data; } // Check for both converted-to-camel and non-converted data property names // If a data property was specified if ( typeof name === "string" ) { // First Try to find as-is property data ret = thisCache[ name ]; // Test for null|undefined property data if ( ret == null ) { // Try to find the camelCased property ret = thisCache[ jQuery.camelCase( name ) ]; } } else { ret = thisCache; } return ret; } function internalRemoveData( elem, name, pvt ) { if ( !acceptData( elem ) ) { return; } var thisCache, i, isNode = elem.nodeType, // See jQuery.data for more information cache = isNode ? jQuery.cache : elem, id = isNode ? elem[ jQuery.expando ] : jQuery.expando; // If there is already no cache entry for this object, there is no // purpose in continuing if ( !cache[ id ] ) { return; } if ( name ) { thisCache = pvt ? cache[ id ] : cache[ id ].data; if ( thisCache ) { // Support array or space separated string names for data keys if ( !jQuery.isArray( name ) ) { // try the string as a key before any manipulation if ( name in thisCache ) { name = [ name ]; } else { // split the camel cased version by spaces unless a key with the spaces exists name = jQuery.camelCase( name ); if ( name in thisCache ) { name = [ name ]; } else { name = name.split( " " ); } } } else { // If "name" is an array of keys... // When data is initially created, via ("key", "val") signature, // keys will be converted to camelCase. // Since there is no way to tell _how_ a key was added, remove // both plain key and camelCase key. #12786 // This will only penalize the array argument path. name = name.concat( jQuery.map( name, jQuery.camelCase ) ); } i = name.length; while ( i-- ) { delete thisCache[ name[ i ] ]; } // If there is no data left in the cache, we want to continue // and let the cache object itself get destroyed if ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) { return; } } } // See jQuery.data for more information if ( !pvt ) { delete cache[ id ].data; // Don't destroy the parent cache unless the internal data object // had been the only thing left in it if ( !isEmptyDataObject( cache[ id ] ) ) { return; } } // Destroy the cache if ( isNode ) { jQuery.cleanData( [ elem ], true ); // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) /* jshint eqeqeq: false */ } else if ( support.deleteExpando || cache != cache.window ) { /* jshint eqeqeq: true */ delete cache[ id ]; // When all else fails, undefined } else { cache[ id ] = undefined; } } jQuery.extend( { cache: {}, // The following elements (space-suffixed to avoid Object.prototype collisions) // throw uncatchable exceptions if you attempt to set expando properties noData: { "applet ": true, "embed ": true, // ...but Flash objects (which have this classid) *can* handle expandos "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" }, hasData: function( elem ) { elem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ]; return !!elem && !isEmptyDataObject( elem ); }, data: function( elem, name, data ) { return internalData( elem, name, data ); }, removeData: function( elem, name ) { return internalRemoveData( elem, name ); }, // For internal use only. _data: function( elem, name, data ) { return internalData( elem, name, data, true ); }, _removeData: function( elem, name ) { return internalRemoveData( elem, name, true ); } } ); jQuery.fn.extend( { data: function( key, value ) { var i, name, data, elem = this[ 0 ], attrs = elem && elem.attributes; // Special expections of .data basically thwart jQuery.access, // so implement the relevant behavior ourselves // Gets all values if ( key === undefined ) { if ( this.length ) { data = jQuery.data( elem ); if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { i = attrs.length; while ( i-- ) { // Support: IE11+ // The attrs elements can be null (#14894) if ( attrs[ i ] ) { name = attrs[ i ].name; if ( name.indexOf( "data-" ) === 0 ) { name = jQuery.camelCase( name.slice( 5 ) ); dataAttr( elem, name, data[ name ] ); } } } jQuery._data( elem, "parsedAttrs", true ); } } return data; } // Sets multiple values if ( typeof key === "object" ) { return this.each( function() { jQuery.data( this, key ); } ); } return arguments.length > 1 ? // Sets one value this.each( function() { jQuery.data( this, key, value ); } ) : // Gets one value // Try to fetch any internally stored data first elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined; }, removeData: function( key ) { return this.each( function() { jQuery.removeData( this, key ); } ); } } ); jQuery.extend( { queue: function( elem, type, data ) { var queue; if ( elem ) { type = ( type || "fx" ) + "queue"; queue = jQuery._data( elem, type ); // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { if ( !queue || jQuery.isArray( data ) ) { queue = jQuery._data( elem, type, jQuery.makeArray( data ) ); } else { queue.push( data ); } } return queue || []; } }, dequeue: function( elem, type ) { type = type || "fx"; var queue = jQuery.queue( elem, type ), startLength = queue.length, fn = queue.shift(), hooks = jQuery._queueHooks( elem, type ), next = function() { jQuery.dequeue( elem, type ); }; // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { fn = queue.shift(); startLength--; } if ( fn ) { // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { queue.unshift( "inprogress" ); } // clear up the last queue stop function delete hooks.stop; fn.call( elem, next, hooks ); } if ( !startLength && hooks ) { hooks.empty.fire(); } }, // not intended for public consumption - generates a queueHooks object, // or returns the current one _queueHooks: function( elem, type ) { var key = type + "queueHooks"; return jQuery._data( elem, key ) || jQuery._data( elem, key, { empty: jQuery.Callbacks( "once memory" ).add( function() { jQuery._removeData( elem, type + "queue" ); jQuery._removeData( elem, key ); } ) } ); } } ); jQuery.fn.extend( { queue: function( type, data ) { var setter = 2; if ( typeof type !== "string" ) { data = type; type = "fx"; setter--; } if ( arguments.length < setter ) { return jQuery.queue( this[ 0 ], type ); } return data === undefined ? this : this.each( function() { var queue = jQuery.queue( this, type, data ); // ensure a hooks for this queue jQuery._queueHooks( this, type ); if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { jQuery.dequeue( this, type ); } } ); }, dequeue: function( type ) { return this.each( function() { jQuery.dequeue( this, type ); } ); }, clearQueue: function( type ) { return this.queue( type || "fx", [] ); }, // Get a promise resolved when queues of a certain type // are emptied (fx is the type by default) promise: function( type, obj ) { var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() { if ( !( --count ) ) { defer.resolveWith( elements, [ elements ] ); } }; if ( typeof type !== "string" ) { obj = type; type = undefined; } type = type || "fx"; while ( i-- ) { tmp = jQuery._data( elements[ i ], type + "queueHooks" ); if ( tmp && tmp.empty ) { count++; tmp.empty.add( resolve ); } } resolve(); return defer.promise( obj ); } } ); ( function() { var shrinkWrapBlocksVal; support.shrinkWrapBlocks = function() { if ( shrinkWrapBlocksVal != null ) { return shrinkWrapBlocksVal; } // Will be changed later if needed. shrinkWrapBlocksVal = false; // Minified: var b,c,d var div, body, container; body = document.getElementsByTagName( "body" )[ 0 ]; if ( !body || !body.style ) { // Test fired too early or in an unsupported environment, exit. return; } // Setup div = document.createElement( "div" ); container = document.createElement( "div" ); container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; body.appendChild( container ).appendChild( div ); // Support: IE6 // Check if elements with layout shrink-wrap their children if ( typeof div.style.zoom !== "undefined" ) { // Reset CSS: box-sizing; display; margin; border div.style.cssText = // Support: Firefox<29, Android 2.3 // Vendor-prefix box-sizing "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + "box-sizing:content-box;display:block;margin:0;border:0;" + "padding:1px;width:1px;zoom:1"; div.appendChild( document.createElement( "div" ) ).style.width = "5px"; shrinkWrapBlocksVal = div.offsetWidth !== 3; } body.removeChild( container ); return shrinkWrapBlocksVal; }; } )(); var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; var isHidden = function( elem, el ) { // isHidden might be called from jQuery#filter function; // in that case, element will be second argument elem = el || elem; return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); }; function adjustCSS( elem, prop, valueParts, tween ) { var adjusted, scale = 1, maxIterations = 20, currentValue = tween ? function() { return tween.cur(); } : function() { return jQuery.css( elem, prop, "" ); }, initial = currentValue(), unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), // Starting value computation is required for potential unit mismatches initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && rcssNum.exec( jQuery.css( elem, prop ) ); if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { // Trust units reported by jQuery.css unit = unit || initialInUnit[ 3 ]; // Make sure we update the tween properties later on valueParts = valueParts || []; // Iteratively approximate from a nonzero starting point initialInUnit = +initial || 1; do { // If previous iteration zeroed out, double until we get *something*. // Use string for doubling so we don't accidentally see scale as unchanged below scale = scale || ".5"; // Adjust and apply initialInUnit = initialInUnit / scale; jQuery.style( elem, prop, initialInUnit + unit ); // Update scale, tolerating zero or NaN from tween.cur() // Break the loop if scale is unchanged or perfect, or if we've just had enough. } while ( scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations ); } if ( valueParts ) { initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified adjusted = valueParts[ 1 ] ? initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : +valueParts[ 2 ]; if ( tween ) { tween.unit = unit; tween.start = initialInUnit; tween.end = adjusted; } } return adjusted; } // Multifunctional method to get and set values of a collection // The value/s can optionally be executed if it's a function var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { var i = 0, length = elems.length, bulk = key == null; // Sets many values if ( jQuery.type( key ) === "object" ) { chainable = true; for ( i in key ) { access( elems, fn, i, key[ i ], true, emptyGet, raw ); } // Sets one value } else if ( value !== undefined ) { chainable = true; if ( !jQuery.isFunction( value ) ) { raw = true; } if ( bulk ) { // Bulk operations run against the entire set if ( raw ) { fn.call( elems, value ); fn = null; // ...except when executing function values } else { bulk = fn; fn = function( elem, key, value ) { return bulk.call( jQuery( elem ), value ); }; } } if ( fn ) { for ( ; i < length; i++ ) { fn( elems[ i ], key, raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) ) ); } } } return chainable ? elems : // Gets bulk ? fn.call( elems ) : length ? fn( elems[ 0 ], key ) : emptyGet; }; var rcheckableType = ( /^(?:checkbox|radio)$/i ); var rtagName = ( /<([\w:-]+)/ ); var rscriptType = ( /^$|\/(?:java|ecma)script/i ); var rleadingWhitespace = ( /^\s+/ ); var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" + "details|dialog|figcaption|figure|footer|header|hgroup|main|" + "mark|meter|nav|output|picture|progress|section|summary|template|time|video"; function createSafeFragment( document ) { var list = nodeNames.split( "|" ), safeFrag = document.createDocumentFragment(); if ( safeFrag.createElement ) { while ( list.length ) { safeFrag.createElement( list.pop() ); } } return safeFrag; } ( function() { var div = document.createElement( "div" ), fragment = document.createDocumentFragment(), input = document.createElement( "input" ); // Setup div.innerHTML = "
a"; // IE strips leading whitespace when .innerHTML is used support.leadingWhitespace = div.firstChild.nodeType === 3; // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables support.tbody = !div.getElementsByTagName( "tbody" ).length; // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; // Makes sure cloning an html5 element does not cause problems // Where outerHTML is undefined, this still works support.html5Clone = document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; // Check if a disconnected checkbox will retain its checked // value of true after appended to the DOM (IE6/7) input.type = "checkbox"; input.checked = true; fragment.appendChild( input ); support.appendChecked = input.checked; // Make sure textarea (and checkbox) defaultValue is properly cloned // Support: IE6-IE11+ div.innerHTML = ""; support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; // Support: IE <=9 only // IE <=9 replaces "; support.option = !!div.lastChild; // #11217 - WebKit loses check when the name is after the checked attribute fragment.appendChild( div ); // Support: Windows Web Apps (WWA) // `name` and `type` must use .setAttribute for WWA (#14901) input = document.createElement( "input" ); input.setAttribute( "type", "radio" ); input.setAttribute( "checked", "checked" ); input.setAttribute( "name", "t" ); div.appendChild( input ); // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 // old WebKit doesn't clone checked state correctly in fragments support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; // Support: IE<9 // Cloned elements keep attachEvent handlers, we use addEventListener on IE9+ support.noCloneEvent = !!div.addEventListener; // Support: IE<9 // Since attributes and properties are the same in IE, // cleanData must set properties to undefined rather than use removeAttribute div[ jQuery.expando ] = 1; support.attributes = !div.getAttribute( jQuery.expando ); } )(); // We have to close these tags to support XHTML (#13200) var wrapMap = { // option: [ 1, "" ], legend: [ 1, "
", "
" ], area: [ 1, "", "" ], // Support: IE8 param: [ 1, "", "" ], thead: [ 1, "", "
" ], tr: [ 2, "", "
" ], col: [ 2, "", "
" ], td: [ 3, "", "
" ], // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, // unless wrapped in a div with non-breaking characters in front of it. _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] }; // Support: IE8-IE9 //wrapMap.optgroup = wrapMap.option; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; // Support: IE <=9 only if ( !support.option ) { wrapMap.optgroup = wrapMap.option = [ 1, "" ]; } function getAll( context, tag ) { var elems, elem, i = 0, found = typeof context.getElementsByTagName !== "undefined" ? context.getElementsByTagName( tag || "*" ) : typeof context.querySelectorAll !== "undefined" ? context.querySelectorAll( tag || "*" ) : undefined; if ( !found ) { for ( found = [], elems = context.childNodes || context; ( elem = elems[ i ] ) != null; i++ ) { if ( !tag || jQuery.nodeName( elem, tag ) ) { found.push( elem ); } else { jQuery.merge( found, getAll( elem, tag ) ); } } } return tag === undefined || tag && jQuery.nodeName( context, tag ) ? jQuery.merge( [ context ], found ) : found; } // Mark scripts as having already been evaluated function setGlobalEval( elems, refElements ) { var elem, i = 0; for ( ; ( elem = elems[ i ] ) != null; i++ ) { jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[ i ], "globalEval" ) ); } } var rhtml = /<|&#?\w+;/, rtbody = / from table fragments if ( !support.tbody ) { // String was a , *may* have spurious elem = tag === "table" && !rtbody.test( elem ) ? tmp.firstChild : // String was a bare or wrap[ 1 ] === "
" && !rtbody.test( elem ) ? tmp : 0; j = elem && elem.childNodes.length; while ( j-- ) { if ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) && !tbody.childNodes.length ) { elem.removeChild( tbody ); } } } jQuery.merge( nodes, tmp.childNodes ); // Fix #12392 for WebKit and IE > 9 tmp.textContent = ""; // Fix #12392 for oldIE while ( tmp.firstChild ) { tmp.removeChild( tmp.firstChild ); } // Remember the top-level container for proper cleanup tmp = safe.lastChild; } } } // Fix #11356: Clear elements from fragment if ( tmp ) { safe.removeChild( tmp ); } // Reset defaultChecked for any radios and checkboxes // about to be appended to the DOM in IE 6/7 (#8060) if ( !support.appendChecked ) { jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); } i = 0; while ( ( elem = nodes[ i++ ] ) ) { // Skip elements already in the context collection (trac-4087) if ( selection && jQuery.inArray( elem, selection ) > -1 ) { if ( ignored ) { ignored.push( elem ); } continue; } contains = jQuery.contains( elem.ownerDocument, elem ); // Append to fragment tmp = getAll( safe.appendChild( elem ), "script" ); // Preserve script evaluation history if ( contains ) { setGlobalEval( tmp ); } // Capture executables if ( scripts ) { j = 0; while ( ( elem = tmp[ j++ ] ) ) { if ( rscriptType.test( elem.type || "" ) ) { scripts.push( elem ); } } } } tmp = null; return safe; } ( function() { var i, eventName, div = document.createElement( "div" ); // Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events) for ( i in { submit: true, change: true, focusin: true } ) { eventName = "on" + i; if ( !( support[ i ] = eventName in window ) ) { // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) div.setAttribute( eventName, "t" ); support[ i ] = div.attributes[ eventName ].expando === false; } } // Null elements to avoid leaks in IE. div = null; } )(); var rformElems = /^(?:input|select|textarea)$/i, rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, rtypenamespace = /^([^.]*)(?:\.(.+)|)/; function returnTrue() { return true; } function returnFalse() { return false; } // Support: IE9 // See #13393 for more info function safeActiveElement() { try { return document.activeElement; } catch ( err ) { } } function on( elem, types, selector, data, fn, one ) { var origFn, type; // Types can be a map of types/handlers if ( typeof types === "object" ) { // ( types-Object, selector, data ) if ( typeof selector !== "string" ) { // ( types-Object, data ) data = data || selector; selector = undefined; } for ( type in types ) { on( elem, type, selector, data, types[ type ], one ); } return elem; } if ( data == null && fn == null ) { // ( types, fn ) fn = selector; data = selector = undefined; } else if ( fn == null ) { if ( typeof selector === "string" ) { // ( types, selector, fn ) fn = data; data = undefined; } else { // ( types, data, fn ) fn = data; data = selector; selector = undefined; } } if ( fn === false ) { fn = returnFalse; } else if ( !fn ) { return elem; } if ( one === 1 ) { origFn = fn; fn = function( event ) { // Can use an empty set, since event contains the info jQuery().off( event ); return origFn.apply( this, arguments ); }; // Use same guid so caller can remove using origFn fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); } return elem.each( function() { jQuery.event.add( this, types, fn, data, selector ); } ); } /* * Helper functions for managing events -- not part of the public interface. * Props to Dean Edwards' addEvent library for many of the ideas. */ jQuery.event = { global: {}, add: function( elem, types, handler, data, selector ) { var tmp, events, t, handleObjIn, special, eventHandle, handleObj, handlers, type, namespaces, origType, elemData = jQuery._data( elem ); // Don't attach events to noData or text/comment nodes (but allow plain objects) if ( !elemData ) { return; } // Caller can pass in an object of custom data in lieu of the handler if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; selector = handleObjIn.selector; } // Make sure that the handler has a unique ID, used to find/remove it later if ( !handler.guid ) { handler.guid = jQuery.guid++; } // Init the element's event structure and main handler, if this is the first if ( !( events = elemData.events ) ) { events = elemData.events = {}; } if ( !( eventHandle = elemData.handle ) ) { eventHandle = elemData.handle = function( e ) { // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery !== "undefined" && ( !e || jQuery.event.triggered !== e.type ) ? jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined; }; // Add elem as a property of the handle fn to prevent a memory leak // with IE non-native events eventHandle.elem = elem; } // Handle multiple events separated by a space types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[ t ] ) || []; type = origType = tmp[ 1 ]; namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); // There *must* be a type, no attaching namespace-only handlers if ( !type ) { continue; } // If event changes its type, use the special event handlers for the changed type special = jQuery.event.special[ type ] || {}; // If selector defined, determine special event api type, otherwise given type type = ( selector ? special.delegateType : special.bindType ) || type; // Update special based on newly reset type special = jQuery.event.special[ type ] || {}; // handleObj is passed to all event handlers handleObj = jQuery.extend( { type: type, origType: origType, data: data, handler: handler, guid: handler.guid, selector: selector, needsContext: selector && jQuery.expr.match.needsContext.test( selector ), namespace: namespaces.join( "." ) }, handleObjIn ); // Init the event handler queue if we're the first if ( !( handlers = events[ type ] ) ) { handlers = events[ type ] = []; handlers.delegateCount = 0; // Only use addEventListener/attachEvent if the special events handler returns false if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { // Bind the global event handler to the element if ( elem.addEventListener ) { elem.addEventListener( type, eventHandle, false ); } else if ( elem.attachEvent ) { elem.attachEvent( "on" + type, eventHandle ); } } } if ( special.add ) { special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; } } // Add to the element's handler list, delegates in front if ( selector ) { handlers.splice( handlers.delegateCount++, 0, handleObj ); } else { handlers.push( handleObj ); } // Keep track of which events have ever been used, for event optimization jQuery.event.global[ type ] = true; } // Nullify elem to prevent memory leaks in IE elem = null; }, // Detach an event or set of events from an element remove: function( elem, types, handler, selector, mappedTypes ) { var j, handleObj, tmp, origCount, t, events, special, handlers, type, namespaces, origType, elemData = jQuery.hasData( elem ) && jQuery._data( elem ); if ( !elemData || !( events = elemData.events ) ) { return; } // Once for each type.namespace in types; type may be omitted types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[ t ] ) || []; type = origType = tmp[ 1 ]; namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); // Unbind all events (on this namespace, if provided) for the element if ( !type ) { for ( type in events ) { jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); } continue; } special = jQuery.event.special[ type ] || {}; type = ( selector ? special.delegateType : special.bindType ) || type; handlers = events[ type ] || []; tmp = tmp[ 2 ] && new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); // Remove matching events origCount = j = handlers.length; while ( j-- ) { handleObj = handlers[ j ]; if ( ( mappedTypes || origType === handleObj.origType ) && ( !handler || handler.guid === handleObj.guid ) && ( !tmp || tmp.test( handleObj.namespace ) ) && ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { handlers.splice( j, 1 ); if ( handleObj.selector ) { handlers.delegateCount--; } if ( special.remove ) { special.remove.call( elem, handleObj ); } } } // Remove generic event handler if we removed something and no more handlers exist // (avoids potential for endless recursion during removal of special event handlers) if ( origCount && !handlers.length ) { if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { jQuery.removeEvent( elem, type, elemData.handle ); } delete events[ type ]; } } // Remove the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { delete elemData.handle; // removeData also checks for emptiness and clears the expando if empty // so use it instead of delete jQuery._removeData( elem, "events" ); } }, trigger: function( event, data, elem, onlyHandlers ) { var handle, ontype, cur, bubbleType, special, tmp, i, eventPath = [ elem || document ], type = hasOwn.call( event, "type" ) ? event.type : event, namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; cur = tmp = elem = elem || document; // Don't do events on text and comment nodes if ( elem.nodeType === 3 || elem.nodeType === 8 ) { return; } // focus/blur morphs to focusin/out; ensure we're not firing them right now if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { return; } if ( type.indexOf( "." ) > -1 ) { // Namespaced trigger; create a regexp to match event type in handle() namespaces = type.split( "." ); type = namespaces.shift(); namespaces.sort(); } ontype = type.indexOf( ":" ) < 0 && "on" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string event = event[ jQuery.expando ] ? event : new jQuery.Event( type, typeof event === "object" && event ); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) event.isTrigger = onlyHandlers ? 2 : 3; event.namespace = namespaces.join( "." ); event.rnamespace = event.namespace ? new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null; // Clean up the event in case it is being reused event.result = undefined; if ( !event.target ) { event.target = elem; } // Clone any incoming data and prepend the event, creating the handler arg list data = data == null ? [ event ] : jQuery.makeArray( data, [ event ] ); // Allow special events to draw outside the lines special = jQuery.event.special[ type ] || {}; if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { return; } // Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { bubbleType = special.delegateType || type; if ( !rfocusMorph.test( bubbleType + type ) ) { cur = cur.parentNode; } for ( ; cur; cur = cur.parentNode ) { eventPath.push( cur ); tmp = cur; } // Only add window if we got to document (e.g., not plain obj or detached DOM) if ( tmp === ( elem.ownerDocument || document ) ) { eventPath.push( tmp.defaultView || tmp.parentWindow || window ); } } // Fire handlers on the event path i = 0; while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); } // Native handler handle = ontype && cur[ ontype ]; if ( handle && handle.apply && acceptData( cur ) ) { event.result = handle.apply( cur, data ); if ( event.result === false ) { event.preventDefault(); } } } event.type = type; // If nobody prevented the default action, do it now if ( !onlyHandlers && !event.isDefaultPrevented() ) { if ( ( !special._default || special._default.apply( eventPath.pop(), data ) === false ) && acceptData( elem ) ) { // Call a native DOM method on the target with the same name name as the event. // Can't use an .isFunction() check here because IE6/7 fails that test. // Don't do default actions on window, that's where global variables be (#6170) if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method tmp = elem[ ontype ]; if ( tmp ) { elem[ ontype ] = null; } // Prevent re-triggering of the same event, since we already bubbled it above jQuery.event.triggered = type; try { elem[ type ](); } catch ( e ) { // IE<9 dies on focus/blur to hidden element (#1486,#12518) // only reproducible on winXP IE8 native, not IE9 in IE8 mode } jQuery.event.triggered = undefined; if ( tmp ) { elem[ ontype ] = tmp; } } } } return event.result; }, dispatch: function( event ) { // Make a writable jQuery.Event from the native event object event = jQuery.event.fix( event ); var i, j, ret, matched, handleObj, handlerQueue = [], args = slice.call( arguments ), handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event args[ 0 ] = event; event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { return; } // Determine handlers handlerQueue = jQuery.event.handlers.call( this, event, handlers ); // Run delegates first; they may want to stop propagation beneath us i = 0; while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { event.currentTarget = matched.elem; j = 0; while ( ( handleObj = matched.handlers[ j++ ] ) && !event.isImmediatePropagationStopped() ) { // Triggered event must either 1) have no namespace, or 2) have namespace(s) // a subset or equal to those in the bound event (both can have no namespace). if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { event.handleObj = handleObj; event.data = handleObj.data; ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || handleObj.handler ).apply( matched.elem, args ); if ( ret !== undefined ) { if ( ( event.result = ret ) === false ) { event.preventDefault(); event.stopPropagation(); } } } } } // Call the postDispatch hook for the mapped type if ( special.postDispatch ) { special.postDispatch.call( this, event ); } return event.result; }, handlers: function( event, handlers ) { var i, matches, sel, handleObj, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target; // Support (at least): Chrome, IE9 // Find delegate handlers // Black-hole SVG instance trees (#13180) // // Support: Firefox<=42+ // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) if ( delegateCount && cur.nodeType && ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { /* jshint eqeqeq: false */ for ( ; cur != this; cur = cur.parentNode || this ) { /* jshint eqeqeq: true */ // Don't check non-elements (#13208) // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { matches = []; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; // Don't conflict with Object.prototype properties (#13203) sel = handleObj.selector + " "; if ( matches[ sel ] === undefined ) { matches[ sel ] = handleObj.needsContext ? jQuery( sel, this ).index( cur ) > -1 : jQuery.find( sel, this, null, [ cur ] ).length; } if ( matches[ sel ] ) { matches.push( handleObj ); } } if ( matches.length ) { handlerQueue.push( { elem: cur, handlers: matches } ); } } } } // Add the remaining (directly-bound) handlers if ( delegateCount < handlers.length ) { handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); } return handlerQueue; }, fix: function( event ) { if ( event[ jQuery.expando ] ) { return event; } // Create a writable copy of the event object and normalize some properties var i, prop, copy, type = event.type, originalEvent = event, fixHook = this.fixHooks[ type ]; if ( !fixHook ) { this.fixHooks[ type ] = fixHook = rmouseEvent.test( type ) ? this.mouseHooks : rkeyEvent.test( type ) ? this.keyHooks : {}; } copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; event = new jQuery.Event( originalEvent ); i = copy.length; while ( i-- ) { prop = copy[ i ]; event[ prop ] = originalEvent[ prop ]; } // Support: IE<9 // Fix target property (#1925) if ( !event.target ) { event.target = originalEvent.srcElement || document; } // Support: Safari 6-8+ // Target should not be a text node (#504, #13143) if ( event.target.nodeType === 3 ) { event.target = event.target.parentNode; } // Support: IE<9 // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) event.metaKey = !!event.metaKey; return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; }, // Includes some event props shared by KeyEvent and MouseEvent props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), fixHooks: {}, keyHooks: { props: "char charCode key keyCode".split( " " ), filter: function( event, original ) { // Add which for key events if ( event.which == null ) { event.which = original.charCode != null ? original.charCode : original.keyCode; } return event; } }, mouseHooks: { props: ( "button buttons clientX clientY fromElement offsetX offsetY " + "pageX pageY screenX screenY toElement" ).split( " " ), filter: function( event, original ) { var body, eventDoc, doc, button = original.button, fromElement = original.fromElement; // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && original.clientX != null ) { eventDoc = event.target.ownerDocument || document; doc = eventDoc.documentElement; body = eventDoc.body; event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); } // Add relatedTarget, if necessary if ( !event.relatedTarget && fromElement ) { event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; } // Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if ( !event.which && button !== undefined ) { event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); } return event; } }, special: { load: { // Prevent triggered image.load events from bubbling to window.load noBubble: true }, focus: { // Fire native event if possible so blur/focus sequence is correct trigger: function() { if ( this !== safeActiveElement() && this.focus ) { try { this.focus(); return false; } catch ( e ) { // Support: IE<9 // If we error on focus to hidden element (#1486, #12518), // let .trigger() run the handlers } } }, delegateType: "focusin" }, blur: { trigger: function() { if ( this === safeActiveElement() && this.blur ) { this.blur(); return false; } }, delegateType: "focusout" }, click: { // For checkbox, fire native event so checked state will be right trigger: function() { if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { this.click(); return false; } }, // For cross-browser consistency, don't fire native .click() on links _default: function( event ) { return jQuery.nodeName( event.target, "a" ); } }, beforeunload: { postDispatch: function( event ) { // Support: Firefox 20+ // Firefox doesn't alert if the returnValue field is not set. if ( event.result !== undefined && event.originalEvent ) { event.originalEvent.returnValue = event.result; } } } }, // Piggyback on a donor event to simulate a different one simulate: function( type, elem, event ) { var e = jQuery.extend( new jQuery.Event(), event, { type: type, isSimulated: true // Previously, `originalEvent: {}` was set here, so stopPropagation call // would not be triggered on donor event, since in our own // jQuery.event.stopPropagation function we had a check for existence of // originalEvent.stopPropagation method, so, consequently it would be a noop. // // Guard for simulated events was moved to jQuery.event.stopPropagation function // since `originalEvent` should point to the original event for the // constancy with other events and for more focused logic } ); jQuery.event.trigger( e, null, elem ); if ( e.isDefaultPrevented() ) { event.preventDefault(); } } }; jQuery.removeEvent = document.removeEventListener ? function( elem, type, handle ) { // This "if" is needed for plain objects if ( elem.removeEventListener ) { elem.removeEventListener( type, handle, false ); } } : function( elem, type, handle ) { var name = "on" + type; if ( elem.detachEvent ) { // #8545, #7054, preventing memory leaks for custom events in IE6-8 // detachEvent needed property on element, by name of that event, // to properly expose it to GC if ( typeof elem[ name ] === "undefined" ) { elem[ name ] = null; } elem.detachEvent( name, handle ); } }; jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword if ( !( this instanceof jQuery.Event ) ) { return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; // Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: IE < 9, Android < 4.0 src.returnValue === false ? returnTrue : returnFalse; // Event type } else { this.type = src; } // Put explicitly provided properties onto the event object if ( props ) { jQuery.extend( this, props ); } // Create a timestamp if incoming event doesn't have one this.timeStamp = src && src.timeStamp || jQuery.now(); // Mark it as fixed this[ jQuery.expando ] = true; }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { constructor: jQuery.Event, isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse, preventDefault: function() { var e = this.originalEvent; this.isDefaultPrevented = returnTrue; if ( !e ) { return; } // If preventDefault exists, run it on the original event if ( e.preventDefault ) { e.preventDefault(); // Support: IE // Otherwise set the returnValue property of the original event to false } else { e.returnValue = false; } }, stopPropagation: function() { var e = this.originalEvent; this.isPropagationStopped = returnTrue; if ( !e || this.isSimulated ) { return; } // If stopPropagation exists, run it on the original event if ( e.stopPropagation ) { e.stopPropagation(); } // Support: IE // Set the cancelBubble property of the original event to true e.cancelBubble = true; }, stopImmediatePropagation: function() { var e = this.originalEvent; this.isImmediatePropagationStopped = returnTrue; if ( e && e.stopImmediatePropagation ) { e.stopImmediatePropagation(); } this.stopPropagation(); } }; // Create mouseenter/leave events using mouseover/out and event-time checks // so that event delegation works in jQuery. // Do the same for pointerenter/pointerleave and pointerover/pointerout // // Support: Safari 7 only // Safari sends mouseenter too often; see: // https://code.google.com/p/chromium/issues/detail?id=470258 // for the description of the bug (it existed in older Chrome versions as well). jQuery.each( { mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { delegateType: fix, bindType: fix, handle: function( event ) { var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj; // For mouseenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { event.type = handleObj.origType; ret = handleObj.handler.apply( this, arguments ); event.type = fix; } return ret; } }; } ); // IE submit delegation if ( !support.submit ) { jQuery.event.special.submit = { setup: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Lazy-add a submit handler when a descendant form may potentially be submitted jQuery.event.add( this, "click._submit keypress._submit", function( e ) { // Node name check avoids a VML-related crash in IE (#9807) var elem = e.target, form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? // Support: IE <=8 // We use jQuery.prop instead of elem.form // to allow fixing the IE8 delegated submit issue (gh-2332) // by 3rd party polyfills/workarounds. jQuery.prop( elem, "form" ) : undefined; if ( form && !jQuery._data( form, "submit" ) ) { jQuery.event.add( form, "submit._submit", function( event ) { event._submitBubble = true; } ); jQuery._data( form, "submit", true ); } } ); // return undefined since we don't need an event listener }, postDispatch: function( event ) { // If form was submitted by the user, bubble the event up the tree if ( event._submitBubble ) { delete event._submitBubble; if ( this.parentNode && !event.isTrigger ) { jQuery.event.simulate( "submit", this.parentNode, event ); } } }, teardown: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Remove delegated handlers; cleanData eventually reaps submit handlers attached above jQuery.event.remove( this, "._submit" ); } }; } // IE change delegation and checkbox/radio fix if ( !support.change ) { jQuery.event.special.change = { setup: function() { if ( rformElems.test( this.nodeName ) ) { // IE doesn't fire change on a check/radio until blur; trigger it on click // after a propertychange. Eat the blur-change in special.change.handle. // This still fires onchange a second time for check/radio after blur. if ( this.type === "checkbox" || this.type === "radio" ) { jQuery.event.add( this, "propertychange._change", function( event ) { if ( event.originalEvent.propertyName === "checked" ) { this._justChanged = true; } } ); jQuery.event.add( this, "click._change", function( event ) { if ( this._justChanged && !event.isTrigger ) { this._justChanged = false; } // Allow triggered, simulated change events (#11500) jQuery.event.simulate( "change", this, event ); } ); } return false; } // Delegated event; lazy-add a change handler on descendant inputs jQuery.event.add( this, "beforeactivate._change", function( e ) { var elem = e.target; if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "change" ) ) { jQuery.event.add( elem, "change._change", function( event ) { if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { jQuery.event.simulate( "change", this.parentNode, event ); } } ); jQuery._data( elem, "change", true ); } } ); }, handle: function( event ) { var elem = event.target; // Swallow native change events from checkbox/radio, we already triggered them above if ( this !== elem || event.isSimulated || event.isTrigger || ( elem.type !== "radio" && elem.type !== "checkbox" ) ) { return event.handleObj.handler.apply( this, arguments ); } }, teardown: function() { jQuery.event.remove( this, "._change" ); return !rformElems.test( this.nodeName ); } }; } // Support: Firefox // Firefox doesn't have focus(in | out) events // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 // // Support: Chrome, Safari // focus(in | out) events fire after focus & blur events, // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order // Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 if ( !support.focusin ) { jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { // Attach a single capturing handler on the document while someone wants focusin/focusout var handler = function( event ) { jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); }; jQuery.event.special[ fix ] = { setup: function() { var doc = this.ownerDocument || this, attaches = jQuery._data( doc, fix ); if ( !attaches ) { doc.addEventListener( orig, handler, true ); } jQuery._data( doc, fix, ( attaches || 0 ) + 1 ); }, teardown: function() { var doc = this.ownerDocument || this, attaches = jQuery._data( doc, fix ) - 1; if ( !attaches ) { doc.removeEventListener( orig, handler, true ); jQuery._removeData( doc, fix ); } else { jQuery._data( doc, fix, attaches ); } } }; } ); } jQuery.fn.extend( { on: function( types, selector, data, fn ) { return on( this, types, selector, data, fn ); }, one: function( types, selector, data, fn ) { return on( this, types, selector, data, fn, 1 ); }, off: function( types, selector, fn ) { var handleObj, type; if ( types && types.preventDefault && types.handleObj ) { // ( event ) dispatched jQuery.Event handleObj = types.handleObj; jQuery( types.delegateTarget ).off( handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler ); return this; } if ( typeof types === "object" ) { // ( types-object [, selector] ) for ( type in types ) { this.off( type, selector, types[ type ] ); } return this; } if ( selector === false || typeof selector === "function" ) { // ( types [, fn] ) fn = selector; selector = undefined; } if ( fn === false ) { fn = returnFalse; } return this.each( function() { jQuery.event.remove( this, types, fn, selector ); } ); }, trigger: function( type, data ) { return this.each( function() { jQuery.event.trigger( type, data, this ); } ); }, triggerHandler: function( type, data ) { var elem = this[ 0 ]; if ( elem ) { return jQuery.event.trigger( type, data, elem, true ); } } } ); var rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, rnoshimcache = new RegExp( "<(?:" + nodeNames + ")[\\s/>]", "i" ), // rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, // Support: IE 10-11, Edge 10240+ // In IE/Edge using regex groups here causes severe slowdowns. // See https://connect.microsoft.com/IE/feedback/details/1736512/ rnoInnerhtml = /\s*$/g, safeFragment = createSafeFragment( document ), fragmentDiv = safeFragment.appendChild( document.createElement( "div" ) ); // Support: IE<8 // Manipulating tables requires a tbody function manipulationTarget( elem, content ) { return jQuery.nodeName( elem, "table" ) && jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? elem.getElementsByTagName( "tbody" )[ 0 ] || elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : elem; } // Replace/restore the type attribute of script elements for safe DOM manipulation function disableScript( elem ) { elem.type = ( jQuery.find.attr( elem, "type" ) !== null ) + "/" + elem.type; return elem; } function restoreScript( elem ) { var match = rscriptTypeMasked.exec( elem.type ); if ( match ) { elem.type = match[ 1 ]; } else { elem.removeAttribute( "type" ); } return elem; } function cloneCopyEvent( src, dest ) { if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { return; } var type, i, l, oldData = jQuery._data( src ), curData = jQuery._data( dest, oldData ), events = oldData.events; if ( events ) { delete curData.handle; curData.events = {}; for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { jQuery.event.add( dest, type, events[ type ][ i ] ); } } } // make the cloned public data object a copy from the original if ( curData.data ) { curData.data = jQuery.extend( {}, curData.data ); } } function fixCloneNodeIssues( src, dest ) { var nodeName, e, data; // We do not need to do anything for non-Elements if ( dest.nodeType !== 1 ) { return; } nodeName = dest.nodeName.toLowerCase(); // IE6-8 copies events bound via attachEvent when using cloneNode. if ( !support.noCloneEvent && dest[ jQuery.expando ] ) { data = jQuery._data( dest ); for ( e in data.events ) { jQuery.removeEvent( dest, e, data.handle ); } // Event data gets referenced instead of copied if the expando gets copied too dest.removeAttribute( jQuery.expando ); } // IE blanks contents when cloning scripts, and tries to evaluate newly-set text if ( nodeName === "script" && dest.text !== src.text ) { disableScript( dest ).text = src.text; restoreScript( dest ); // IE6-10 improperly clones children of object elements using classid. // IE10 throws NoModificationAllowedError if parent is null, #12132. } else if ( nodeName === "object" ) { if ( dest.parentNode ) { dest.outerHTML = src.outerHTML; } // This path appears unavoidable for IE9. When cloning an object // element in IE9, the outerHTML strategy above is not sufficient. // If the src has innerHTML and the destination does not, // copy the src.innerHTML into the dest.innerHTML. #10324 if ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) { dest.innerHTML = src.innerHTML; } } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { // IE6-8 fails to persist the checked state of a cloned checkbox // or radio button. Worse, IE6-7 fail to give the cloned element // a checked appearance if the defaultChecked value isn't also set dest.defaultChecked = dest.checked = src.checked; // IE6-7 get confused and end up setting the value of a cloned // checkbox/radio button to an empty string instead of "on" if ( dest.value !== src.value ) { dest.value = src.value; } // IE6-8 fails to return the selected option to the default selected // state when cloning options } else if ( nodeName === "option" ) { dest.defaultSelected = dest.selected = src.defaultSelected; // IE6-8 fails to set the defaultValue to the correct value when // cloning other types of input fields } else if ( nodeName === "input" || nodeName === "textarea" ) { dest.defaultValue = src.defaultValue; } } function domManip( collection, args, callback, ignored ) { // Flatten any nested arrays args = concat.apply( [], args ); var first, node, hasScripts, scripts, doc, fragment, i = 0, l = collection.length, iNoClone = l - 1, value = args[ 0 ], isFunction = jQuery.isFunction( value ); // We can't cloneNode fragments that contain checked, in WebKit if ( isFunction || ( l > 1 && typeof value === "string" && !support.checkClone && rchecked.test( value ) ) ) { return collection.each( function( index ) { var self = collection.eq( index ); if ( isFunction ) { args[ 0 ] = value.call( this, index, self.html() ); } domManip( self, args, callback, ignored ); } ); } if ( l ) { fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); first = fragment.firstChild; if ( fragment.childNodes.length === 1 ) { fragment = first; } // Require either new content or an interest in ignored elements to invoke the callback if ( first || ignored ) { scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); hasScripts = scripts.length; // Use the original fragment for the last item // instead of the first because it can end up // being emptied incorrectly in certain situations (#8070). for ( ; i < l; i++ ) { node = fragment; if ( i !== iNoClone ) { node = jQuery.clone( node, true, true ); // Keep references to cloned scripts for later restoration if ( hasScripts ) { // Support: Android<4.1, PhantomJS<2 // push.apply(_, arraylike) throws on ancient WebKit jQuery.merge( scripts, getAll( node, "script" ) ); } } callback.call( collection[ i ], node, i ); } if ( hasScripts ) { doc = scripts[ scripts.length - 1 ].ownerDocument; // Reenable scripts jQuery.map( scripts, restoreScript ); // Evaluate executable scripts on first document insertion for ( i = 0; i < hasScripts; i++ ) { node = scripts[ i ]; if ( rscriptType.test( node.type || "" ) && !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { if ( node.src ) { // Optional AJAX dependency, but won't run scripts if not present if ( jQuery._evalUrl ) { jQuery._evalUrl( node.src ); } } else { jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ) .replace( rcleanScript, "" ) ); } } } } // Fix #11809: Avoid leaking memory fragment = first = null; } } return collection; } function remove( elem, selector, keepData ) { var node, elems = selector ? jQuery.filter( selector, elem ) : elem, i = 0; for ( ; ( node = elems[ i ] ) != null; i++ ) { if ( !keepData && node.nodeType === 1 ) { jQuery.cleanData( getAll( node ) ); } if ( node.parentNode ) { if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { setGlobalEval( getAll( node, "script" ) ); } node.parentNode.removeChild( node ); } } return elem; } jQuery.extend( { htmlPrefilter: function( html ) { // return html.replace( rxhtmlTag, "<$1>" ); return html; }, clone: function( elem, dataAndEvents, deepDataAndEvents ) { var destElements, node, clone, i, srcElements, inPage = jQuery.contains( elem.ownerDocument, elem ); if ( support.html5Clone || jQuery.isXMLDoc( elem ) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { clone = elem.cloneNode( true ); // IE<=8 does not properly clone detached, unknown element nodes } else { fragmentDiv.innerHTML = elem.outerHTML; fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); } if ( ( !support.noCloneEvent || !support.noCloneChecked ) && ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) { // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 destElements = getAll( clone ); srcElements = getAll( elem ); // Fix all IE cloning issues for ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) { // Ensure that the destination node is not null; Fixes #9587 if ( destElements[ i ] ) { fixCloneNodeIssues( node, destElements[ i ] ); } } } // Copy the events from the original to the clone if ( dataAndEvents ) { if ( deepDataAndEvents ) { srcElements = srcElements || getAll( elem ); destElements = destElements || getAll( clone ); for ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) { cloneCopyEvent( node, destElements[ i ] ); } } else { cloneCopyEvent( elem, clone ); } } // Preserve script evaluation history destElements = getAll( clone, "script" ); if ( destElements.length > 0 ) { setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); } destElements = srcElements = node = null; // Return the cloned set return clone; }, cleanData: function( elems, /* internal */ forceAcceptData ) { var elem, type, id, data, i = 0, internalKey = jQuery.expando, cache = jQuery.cache, attributes = support.attributes, special = jQuery.event.special; for ( ; ( elem = elems[ i ] ) != null; i++ ) { if ( forceAcceptData || acceptData( elem ) ) { id = elem[ internalKey ]; data = id && cache[ id ]; if ( data ) { if ( data.events ) { for ( type in data.events ) { if ( special[ type ] ) { jQuery.event.remove( elem, type ); // This is a shortcut to avoid jQuery.event.remove's overhead } else { jQuery.removeEvent( elem, type, data.handle ); } } } // Remove cache only if it was not already removed by jQuery.event.remove if ( cache[ id ] ) { delete cache[ id ]; // Support: IE<9 // IE does not allow us to delete expando properties from nodes // IE creates expando attributes along with the property // IE does not have a removeAttribute function on Document nodes if ( !attributes && typeof elem.removeAttribute !== "undefined" ) { elem.removeAttribute( internalKey ); // Webkit & Blink performance suffers when deleting properties // from DOM nodes, so set to undefined instead // https://code.google.com/p/chromium/issues/detail?id=378607 } else { elem[ internalKey ] = undefined; } deletedIds.push( id ); } } } } } } ); jQuery.fn.extend( { // Keep domManip exposed until 3.0 (gh-2225) domManip: domManip, detach: function( selector ) { return remove( this, selector, true ); }, remove: function( selector ) { return remove( this, selector ); }, text: function( value ) { return access( this, function( value ) { return value === undefined ? jQuery.text( this ) : this.empty().append( ( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value ) ); }, null, value, arguments.length ); }, append: function() { return domManip( this, arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.appendChild( elem ); } } ); }, prepend: function() { return domManip( this, arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.insertBefore( elem, target.firstChild ); } } ); }, before: function() { return domManip( this, arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this ); } } ); }, after: function() { return domManip( this, arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this.nextSibling ); } } ); }, empty: function() { var elem, i = 0; for ( ; ( elem = this[ i ] ) != null; i++ ) { // Remove element nodes and prevent memory leaks if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); } // Remove any remaining nodes while ( elem.firstChild ) { elem.removeChild( elem.firstChild ); } // If this is a select, ensure that it displays empty (#12336) // Support: IE<9 if ( elem.options && jQuery.nodeName( elem, "select" ) ) { elem.options.length = 0; } } return this; }, clone: function( dataAndEvents, deepDataAndEvents ) { dataAndEvents = dataAndEvents == null ? false : dataAndEvents; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; return this.map( function() { return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); } ); }, html: function( value ) { return access( this, function( value ) { var elem = this[ 0 ] || {}, i = 0, l = this.length; if ( value === undefined ) { return elem.nodeType === 1 ? elem.innerHTML.replace( rinlinejQuery, "" ) : undefined; } // See if we can take a shortcut and just use innerHTML if ( typeof value === "string" && !rnoInnerhtml.test( value ) && ( support.htmlSerialize || !rnoshimcache.test( value ) ) && ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { value = jQuery.htmlPrefilter( value ); try { for ( ; i < l; i++ ) { // Remove element nodes and prevent memory leaks elem = this[ i ] || {}; if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); elem.innerHTML = value; } } elem = 0; // If using innerHTML throws an exception, use the fallback method } catch ( e ) {} } if ( elem ) { this.empty().append( value ); } }, null, value, arguments.length ); }, replaceWith: function() { var ignored = []; // Make the changes, replacing each non-ignored context element with the new content return domManip( this, arguments, function( elem ) { var parent = this.parentNode; if ( jQuery.inArray( this, ignored ) < 0 ) { jQuery.cleanData( getAll( this ) ); if ( parent ) { parent.replaceChild( elem, this ); } } // Force callback invocation }, ignored ); } } ); jQuery.each( { appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function( name, original ) { jQuery.fn[ name ] = function( selector ) { var elems, i = 0, ret = [], insert = jQuery( selector ), last = insert.length - 1; for ( ; i <= last; i++ ) { elems = i === last ? this : this.clone( true ); jQuery( insert[ i ] )[ original ]( elems ); // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() push.apply( ret, elems.get() ); } return this.pushStack( ret ); }; } ); var iframe, elemdisplay = { // Support: Firefox // We have to pre-define these values for FF (#10227) HTML: "block", BODY: "block" }; /** * Retrieve the actual display of a element * @param {String} name nodeName of the element * @param {Object} doc Document object */ // Called only from within defaultDisplay function actualDisplay( name, doc ) { var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), display = jQuery.css( elem[ 0 ], "display" ); // We don't have any data stored on the element, // so use "detach" method as fast way to get rid of the element elem.detach(); return display; } /** * Try to determine the default display value of an element * @param {String} nodeName */ function defaultDisplay( nodeName ) { var doc = document, display = elemdisplay[ nodeName ]; if ( !display ) { display = actualDisplay( nodeName, doc ); // If the simple way fails, read from inside an iframe if ( display === "none" || !display ) { // Use the already-created iframe if possible iframe = ( iframe || jQuery( "'); $('iframe', modal.tmp) .css({ width: currentSettings.width, height: currentSettings.height }) .error(loadingError) .load(formDataLoaded); debug('Form Data Load: '+jFrom.attr('action')); showModal(); showContentOrLoading(); } else if (currentSettings.type == 'image') { debug('Image Load: '+url); var title = jFrom.attr('title') || currentSettings.defaultImgAlt; initModal(); modal.tmp.html('').find('img').attr('alt', title); modal.tmp.css({lineHeight: 0}); $('img', modal.tmp) .error(loadingError) .load(function() { debug('Image Loaded: '+this.src); $(this).off('load'); var w = modal.tmp.width(); var h = modal.tmp.height(); modal.tmp.css({lineHeight: ''}); resized.width = w; resized.height = h; setCurrentSettings({ width: w, height: h, imgWidth: w, imgHeight: h }); initSettingsSize.width = w; initSettingsSize.height = h; setCurrentSettings({overflow: 'visible'}, 'cssOpt', 'content'); modal.dataReady = true; if (modal.loadingShown || modal.transition) showContentOrLoading(); }) .attr('src', url); showModal(); } else if (currentSettings.type == 'iframeForm') { initModal(); modal.tmp.html(''); debug('Iframe Form Load: '+url); $('iframe', modal.tmp).eq(0) .css({ width: '100%', height: $.support.boxModel? '99%' : '100%' }) .load(iframeLoaded); modal.dataReady = true; showModal(); } else if (currentSettings.type == 'iframe') { initModal(); modal.tmp.html(''); debug('Iframe Load: '+url); $('iframe', modal.tmp).eq(0) .css({ width: '100%', height: $.support.boxModel? '99%' : '100%' }) .load(iframeLoaded); modal.dataReady = true; showModal(); } else if (currentSettings.type) { // Could be every other kind of type or a dom selector debug('Content: '+currentSettings.type); initModal(); modal.tmp.html(currentSettings.content); var w = modal.tmp.width(); var h = modal.tmp.height(); var div = $(currentSettings.type); if (div.length) { setCurrentSettings({type: 'div'}); w = div.width(); h = div.height(); if (contentElt) contentEltLast = contentElt; contentElt = div; modal.tmp.append(div.contents()); } initSettingsSize.width = w; initSettingsSize.height = h; setCurrentSettings({ width: w, height: h }); if (modal.tmp.html()) modal.dataReady = true; else loadingError(); if (!modal.ready) showModal(); else endHideContent(); } else { debug('Ajax Load: '+url); setCurrentSettings({type: 'ajax'}); var data = currentSettings.ajax.data || {}; if (currentSettings.selector) { if (typeof data == "string") { data+= '&'+currentSettings.selIndicator+'='+currentSettings.selector.substring(1); } else { data[currentSettings.selIndicator] = currentSettings.selector.substring(1); } } showModal(); $.ajax($.extend(true, currentSettings.ajax, { url: url, success: ajaxLoaded, error: loadingError, data: data })); } } else if (currentSettings.content) { // Raw content not from a DOM element debug('Content: '+currentSettings.type); setCurrentSettings({type: 'manual'}); initModal(); modal.tmp.html($('
').html(currentSettings.content).contents()); if (modal.tmp.html()) modal.dataReady = true; else loadingError(); showModal(); } else { // What should we show here? nothing happen } } // Update the current settings // object settings // string deep1 first key where overwrite the settings // string deep2 second key where overwrite the settings function setDefaultCurrentSettings(settings) { debug('setDefaultCurrentSettings'); currentSettings = $.extend(true, {}, $.fn.nyroModal.settings, settings); setMargin(); } function setCurrentSettings(settings, deep1, deep2) { if (modal.started) { if (deep1 && deep2) { $.extend(true, currentSettings[deep1][deep2], settings); } else if (deep1) { $.extend(true, currentSettings[deep1], settings); } else { if (modal.animContent) { if ('width' in settings) { if (!modal.resizing) { settings.setWidth = settings.width; shouldResize = true; } delete settings['width']; } if ('height' in settings) { if (!modal.resizing) { settings.setHeight = settings.height; shouldResize = true; } delete settings['height']; } } $.extend(true, currentSettings, settings); } } else { if (deep1 && deep2) { $.extend(true, $.fn.nyroModal.settings[deep1][deep2], settings); } else if (deep1) { $.extend(true, $.fn.nyroModal.settings[deep1], settings); } else { $.extend(true, $.fn.nyroModal.settings, settings); } } } // Set the margin for postionning the element. Useful for IE6 function setMarginScroll() { if (isIE6 && !modal.blocker) { if (document.documentElement) { currentSettings.marginScrollLeft = document.documentElement.scrollLeft; currentSettings.marginScrollTop = document.documentElement.scrollTop; } else { currentSettings.marginScrollLeft = document.body.scrollLeft; currentSettings.marginScrollTop = document.body.scrollTop; } } else { currentSettings.marginScrollLeft = 0; currentSettings.marginScrollTop = 0; } } // Set the margin for the content function setMargin() { setMarginScroll(); currentSettings.marginLeft = -(currentSettings.width+currentSettings.borderW)/2; currentSettings.marginTop = -(currentSettings.height+currentSettings.borderH)/2; if (!modal.blocker) { currentSettings.marginLeft+= currentSettings.marginScrollLeft; currentSettings.marginTop+= currentSettings.marginScrollTop; } } // Set the margin for the current loading function setMarginLoading() { setMarginScroll(); var outer = getOuter(modal.loading); currentSettings.marginTopLoading = -(modal.loading.height() + outer.h.border + outer.h.padding)/2; currentSettings.marginLeftLoading = -(modal.loading.width() + outer.w.border + outer.w.padding)/2; if (!modal.blocker) { currentSettings.marginLeftLoading+= currentSettings.marginScrollLeft; currentSettings.marginTopLoading+= currentSettings.marginScrollTop; } } // Set the modal Title function setTitle() { var title = $('h1#nyroModalTitle', modal.contentWrapper); if (title.length) title.text(currentSettings.title); else modal.contentWrapper.prepend('

'+currentSettings.title+'

'); } // Init the nyroModal div by settings the CSS elements and hide needed elements function initModal() { debug('initModal'); if (!modal.full) { if (currentSettings.debug) setCurrentSettings({color: 'white'}, 'cssOpt', 'bg'); var full = { zIndex: currentSettings.zIndexStart, position: 'fixed', top: 0, left: 0, width: '100%', height: '100%' }; var contain = body; var iframeHideIE = ''; if (currentSettings.blocker) { modal.blocker = contain = $(currentSettings.blocker); var pos = modal.blocker.offset(); var w = modal.blocker.outerWidth(); var h = modal.blocker.outerHeight(); if (isIE6) { setCurrentSettings({ height: '100%', width: '100%', top: 0, left: 0 }, 'cssOpt', 'bg'); } modal.blockerVars = { top: pos.top, left: pos.left, width: w, height: h }; var plusTop = (/msie/.test(userAgent) ?0:getCurCSS(body.get(0), 'borderTopWidth')); var plusLeft = (/msie/.test(userAgent) ?0:getCurCSS(body.get(0), 'borderLeftWidth')); full = { position: 'absolute', top: pos.top + plusTop, left: pos.left + plusLeft, width: w, height: h }; } else if (isIE6) { body.css({ marginLeft: 0, marginRight: 0 }); var w = body.width(); var h = $(window).height()+'px'; if ($(window).height() >= body.outerHeight()) { h = body.outerHeight()+'px'; } else w+= 20; w += 'px'; body.css({ width: w, height: h, position: 'static', overflow: 'hidden' }); $('html').css({overflow: 'hidden'}); setCurrentSettings({ cssOpt: { bg: { position: 'absolute', zIndex: currentSettings.zIndexStart+1, height: '110%', width: '110%', top: currentSettings.marginScrollTop+'px', left: currentSettings.marginScrollLeft+'px' }, wrapper: { zIndex: currentSettings.zIndexStart+2 }, loading: { zIndex: currentSettings.zIndexStart+3 } } }); iframeHideIE = $('') .css($.extend({}, currentSettings.cssOpt.bg, { opacity: 0, zIndex: 50, border: 'none' })); } contain.append($('
').hide()); modal.full = $('#nyroModalFull') .css(full) .show(); modal.bg = $('#nyroModalBg') .css($.extend({ backgroundColor: currentSettings.bgColor }, currentSettings.cssOpt.bg)) .before(iframeHideIE); modal.bg.on('click.nyroModal', clickBg); modal.loading = $('#nyroModalLoading') .css(currentSettings.cssOpt.loading) .hide(); modal.contentWrapper = $('#nyroModalWrapper') .css(currentSettings.cssOpt.wrapper) .hide(); modal.content = $('#nyroModalContent'); modal.tmp = $('#nyrModalTmp').hide(); // To stop the mousewheel if the the plugin is available if ($.isFunction($.fn.mousewheel)) { modal.content.mousewheel(function(e, d) { var elt = modal.content.get(0); if ((d > 0 && elt.scrollTop == 0) || (d < 0 && elt.scrollHeight - elt.scrollTop == elt.clientHeight)) { e.preventDefault(); e.stopPropagation(); } }); } $(document).on('keydown.nyroModal', keyHandler); modal.content.css({width: 'auto', height: 'auto'}); modal.contentWrapper.css({width: 'auto', height: 'auto'}); if (!currentSettings.blocker && currentSettings.windowResize) { $(window).on('resize.nyroModal', function() { window.clearTimeout(windowResizeTimeout); windowResizeTimeout = window.setTimeout(windowResizeHandler, 200); }); } } } function windowResizeHandler() { $.nyroModalSettings(initSettingsSize); } // Show the modal (ie: the background and then the loading if needed or the content directly) function showModal() { debug('showModal'); if (!modal.ready) { initModal(); modal.anim = true; currentSettings.showBackground(modal, currentSettings, endBackground); } else { modal.anim = true; modal.transition = true; currentSettings.showTransition(modal, currentSettings, function(){endHideContent();modal.anim=false;showContentOrLoading();}); } } // Called when user click on background function clickBg(e) { if (!currentSettings.modal) removeModal(); } // Used for the escape key or the arrow in the gallery type function keyHandler(e) { if (e.keyCode == 27) { if (!currentSettings.modal) removeModal(); } else if (currentSettings.gallery && modal.ready && modal.dataReady && !modal.anim && !modal.transition) { if (e.keyCode == 39 || e.keyCode == 40) { e.preventDefault(); $.nyroModalNext(); return false; } else if (e.keyCode == 37 || e.keyCode == 38) { e.preventDefault(); $.nyroModalPrev(); return false; } } } // Determine the filetype regarding the link DOM element function fileType() { var from = currentSettings.from; var url; if (from && from.nodeName) { var jFrom = $(from); url = jFrom.attr(from.nodeName.toLowerCase() == 'form' ? 'action' : 'href'); if (!url) url = location.href.substring(window.location.host.length+7); currentSettings.url = url; if (jFrom.attr('rev') == 'modal') currentSettings.modal = true; currentSettings.title = jFrom.attr('title'); if (from && from.rel && from.rel.toLowerCase() != 'nofollow') { var indexSpace = from.rel.indexOf(' '); currentSettings.gallery = indexSpace > 0 ? from.rel.substr(0, indexSpace) : from.rel; } var imgType = imageType(url, from); if (imgType) return imgType; if (isSwf(url)) return 'swf'; var iframe = false; if (from.target && from.target.toLowerCase() == '_blank' || (from.hostname && from.hostname.replace(/:\d*$/,'') != window.location.hostname.replace(/:\d*$/,''))) { iframe = true; } if (from.nodeName.toLowerCase() == 'form') { if (iframe) return 'iframeForm'; setCurrentSettings(extractUrlSel(url)); if (jFrom.attr('enctype') == 'multipart/form-data') return 'formData'; return 'form'; } if (iframe) return 'iframe'; } else { url = currentSettings.url; if (!currentSettings.content) currentSettings.from = true; if (!url) return null; if (isSwf(url)) return 'swf'; var reg1 = new RegExp("^http://|https://", "g"); if (url.match(reg1)) return 'iframe'; } var imgType = imageType(url, from); if (imgType) return imgType; var tmp = extractUrlSel(url); setCurrentSettings(tmp); if (!tmp.url) return tmp.selector; } function imageType(url, from) { var image = new RegExp(currentSettings.regexImg, 'i'); if (image.test(url)) { return 'image'; } } function isSwf(url) { var swf = new RegExp('[^\.]\.(swf)\s*$', 'i'); return swf.test(url); } function extractUrlSel(url) { var ret = { url: null, selector: null }; if (url) { var hash = getHash(url); var hashLoc = getHash(window.location.href); var curLoc = window.location.href.substring(0, window.location.href.length - hashLoc.length); var req = url.substring(0, url.length - hash.length); if (req == curLoc || req == $('base').attr('href')) { ret.selector = hash; } else { ret.url = req; ret.selector = hash; } } return ret; } // Called when the content cannot be loaded or tiemout reached function loadingError() { debug('loadingError'); modal.error = true; if (!modal.ready) return; if ($.isFunction(currentSettings.handleError)) currentSettings.handleError(modal, currentSettings); modal.loading .addClass(currentSettings.errorClass) .html(currentSettings.contentError); $(currentSettings.closeSelector, modal.loading) .off('click.nyroModal') .on('click.nyroModal', removeModal); setMarginLoading(); modal.loading .css({ marginTop: currentSettings.marginTopLoading+'px', marginLeft: currentSettings.marginLeftLoading+'px' }); } // Put the content from modal.tmp to modal.content function fillContent() { debug('fillContent'); if (!modal.tmp.html()) return; modal.content.html(modal.tmp.contents()); modal.tmp.empty(); wrapContent(); if (currentSettings.type == 'iframeForm') { $(currentSettings.from) .attr('target', 'nyroModalIframe') .data('nyroModalprocessing', 1) .submit() .attr('target', '_blank') .removeData('nyroModalprocessing'); } if (!currentSettings.modal) modal.wrapper.prepend(currentSettings.closeButton); if ($.isFunction(currentSettings.endFillContent)) currentSettings.endFillContent(modal, currentSettings); modal.content.append(modal.scripts); $(currentSettings.closeSelector, modal.contentWrapper) .off('click.nyroModal') .on('click.nyroModal', removeModal); $(currentSettings.openSelector, modal.contentWrapper).nyroModal(getCurrentSettingsNew()); } // Get the current settings to be used in new links function getCurrentSettingsNew() { return callingSettings; /* var currentSettingsNew = $.extend(true, {}, currentSettings); if (resized.width) currentSettingsNew.width = null; else currentSettingsNew.width = initSettingsSize.width; if (resized.height) currentSettingsNew.height = null; else currentSettingsNew.height = initSettingsSize.height; currentSettingsNew.cssOpt.content.overflow = 'auto'; return currentSettingsNew; */ } // Wrap the content and update the modal size if needed function wrapContent() { debug('wrapContent'); var wrap = $(currentSettings.wrap[currentSettings.type]); modal.content.append(wrap.children().remove()); modal.contentWrapper.wrapInner(wrap); if (currentSettings.gallery) { // Set the action for the next and prev button (or remove them) modal.content.append(currentSettings.galleryLinks); gallery.links = $('[rel="'+currentSettings.gallery+'"], [rel^="'+currentSettings.gallery+' "]'); gallery.index = gallery.links.index(currentSettings.from); if (currentSettings.galleryCounts && $.isFunction(currentSettings.galleryCounts)) currentSettings.galleryCounts(gallery.index + 1, gallery.links.length, modal, currentSettings); var currentSettingsNew = getCurrentSettingsNew(); var linkPrev = getGalleryLink(-1); if (linkPrev) { var prev = $('.nyroModalPrev', modal.contentWrapper) .attr('href', linkPrev.attr('href')) .click(function(e) { e.preventDefault(); $.nyroModalPrev(); return false; }); if (isIE6 && currentSettings.type == 'swf') { prev.before($('').css({ position: prev.css('position'), top: prev.css('top'), left: prev.css('left'), width: prev.width(), height: prev.height(), opacity: 0, border: 'none' })); } } else { $('.nyroModalPrev', modal.contentWrapper).remove(); } var linkNext = getGalleryLink(1); if (linkNext) { var next = $('.nyroModalNext', modal.contentWrapper) .attr('href', linkNext.attr('href')) .click(function(e) { e.preventDefault(); $.nyroModalNext(); return false; }); if (isIE6 && currentSettings.type == 'swf') { next.before($('') .css($.extend({}, { position: next.css('position'), top: next.css('top'), left: next.css('left'), width: next.width(), height: next.height(), opacity: 0, border: 'none' }))); } } else { $('.nyroModalNext', modal.contentWrapper).remove(); } } calculateSize(); } function getGalleryLink(dir) { if (currentSettings.gallery) { if (!currentSettings.ltr) dir *= -1; var index = gallery.index + dir; if (index >= 0 && index < gallery.links.length) return gallery.links.eq(index); else if (currentSettings.galleryLoop) { if (index < 0) return gallery.links.eq(gallery.links.length-1); else return gallery.links.eq(0); } } return false; } // Calculate the size for the contentWrapper function calculateSize(resizing) { debug('calculateSize'); modal.wrapper = modal.contentWrapper.children('div:first'); resized.width = false; resized.height = false; if (false && !currentSettings.windowResizing) { initSettingsSize.width = currentSettings.width; initSettingsSize.height = currentSettings.height; } if (currentSettings.autoSizable && (!currentSettings.width || !currentSettings.height)) { modal.contentWrapper .css({ opacity: 0, width: 'auto', height: 'auto' }) .show(); var tmp = { width: 'auto', height: 'auto' }; if (currentSettings.width) { tmp.width = currentSettings.width; } else if (currentSettings.type == 'iframe') { tmp.width = currentSettings.minWidth; } if (currentSettings.height) { tmp.height = currentSettings.height; } else if (currentSettings.type == 'iframe') { tmp.height = currentSettings.minHeight; } modal.content.css(tmp); if (!currentSettings.width) { currentSettings.width = modal.content.outerWidth(true); resized.width = true; } if (!currentSettings.height) { currentSettings.height = modal.content.outerHeight(true); resized.height = true; } modal.contentWrapper.css({opacity: 1}); if (!resizing) modal.contentWrapper.hide(); } if (currentSettings.type != 'image' && currentSettings.type != 'swf') { currentSettings.width = Math.max(currentSettings.width, currentSettings.minWidth); currentSettings.height = Math.max(currentSettings.height, currentSettings.minHeight); } var outerWrapper = getOuter(modal.contentWrapper); var outerWrapper2 = getOuter(modal.wrapper); var outerContent = getOuter(modal.content); var tmp = { content: { width: currentSettings.width, height: currentSettings.height }, wrapper2: { width: currentSettings.width + outerContent.w.total, height: currentSettings.height + outerContent.h.total }, wrapper: { width: currentSettings.width + outerContent.w.total + outerWrapper2.w.total, height: currentSettings.height + outerContent.h.total + outerWrapper2.h.total } }; if (currentSettings.resizable) { var maxHeight = modal.blockerVars? modal.blockerVars.height : $(window).height() - outerWrapper.h.border - (tmp.wrapper.height - currentSettings.height); var maxWidth = modal.blockerVars? modal.blockerVars.width : $(window).width() - outerWrapper.w.border - (tmp.wrapper.width - currentSettings.width); maxHeight-= currentSettings.padding*2; maxWidth-= currentSettings.padding*2; if (tmp.content.height > maxHeight || tmp.content.width > maxWidth) { // We're gonna resize the modal as it will goes outside the view port if (currentSettings.type == 'image' || currentSettings.type == 'swf') { // An image is resized proportionnaly var useW = currentSettings.imgWidth?currentSettings.imgWidth : currentSettings.width; var useH = currentSettings.imgHeight?currentSettings.imgHeight : currentSettings.height; var diffW = tmp.content.width - useW; var diffH = tmp.content.height - useH; if (diffH < 0) diffH = 0; if (diffW < 0) diffW = 0; var calcH = maxHeight - diffH; var calcW = maxWidth - diffW; var ratio = Math.min(calcH/useH, calcW/useW); calcW = Math.floor(useW*ratio); calcH = Math.floor(useH*ratio); tmp.content.height = calcH + diffH; tmp.content.width = calcW + diffW; } else { // For an HTML content, we simply decrease the size tmp.content.height = Math.min(tmp.content.height, maxHeight); tmp.content.width = Math.min(tmp.content.width, maxWidth); } tmp.wrapper2 = { width: tmp.content.width + outerContent.w.total, height: tmp.content.height + outerContent.h.total }; tmp.wrapper = { width: tmp.content.width + outerContent.w.total + outerWrapper2.w.total, height: tmp.content.height + outerContent.h.total + outerWrapper2.h.total }; } } if (currentSettings.type == 'swf') { $('object, embed', modal.content) .attr('width', tmp.content.width) .attr('height', tmp.content.height); } else if (currentSettings.type == 'image') { $('img', modal.content).css({ width: tmp.content.width, height: tmp.content.height }); } modal.content.css($.extend({}, tmp.content, currentSettings.cssOpt.content)); modal.wrapper.css($.extend({}, tmp.wrapper2, currentSettings.cssOpt.wrapper2)); if (!resizing) modal.contentWrapper.css($.extend({}, tmp.wrapper, currentSettings.cssOpt.wrapper)); if (currentSettings.type == 'image' && currentSettings.addImageDivTitle) { // Adding the title for the image $('img', modal.content).removeAttr('alt'); var divTitle = $('div', modal.content); if (currentSettings.title != currentSettings.defaultImgAlt && currentSettings.title) { if (divTitle.length == 0) { divTitle = $('
'+currentSettings.title+'
'); modal.content.append(divTitle); } if (currentSettings.setWidthImgTitle) { var outerDivTitle = getOuter(divTitle); divTitle.css({width: (tmp.content.width + outerContent.w.padding - outerDivTitle.w.total)+'px'}); } } else if (divTitle.length = 0) { divTitle.remove(); } } if (currentSettings.title) setTitle(); tmp.wrapper.borderW = outerWrapper.w.border; tmp.wrapper.borderH = outerWrapper.h.border; setCurrentSettings(tmp.wrapper); setMargin(); } function removeModal(e) { debug('removeModal'); if (e) e.preventDefault(); if (modal.full && modal.ready) { $(document).off('keydown.nyroModal'); if (!currentSettings.blocker) $(window).off('resize.nyroModal'); modal.ready = false; modal.anim = true; modal.closing = true; if (modal.loadingShown || modal.transition) { currentSettings.hideLoading(modal, currentSettings, function() { modal.loading.hide(); modal.loadingShown = false; modal.transition = false; currentSettings.hideBackground(modal, currentSettings, endRemove); }); } else { if (fixFF) modal.content.css({position: ''}); // Fix Issue #10, remove the attribute modal.wrapper.css({overflow: 'hidden'}); // Used to fix a visual issue when hiding modal.content.css({overflow: 'hidden'}); // Used to fix a visual issue when hiding $('iframe', modal.content).hide(); // Fix issue 359 if ($.isFunction(currentSettings.beforeHideContent)) { currentSettings.beforeHideContent(modal, currentSettings, function() { currentSettings.hideContent(modal, currentSettings, function() { endHideContent(); currentSettings.hideBackground(modal, currentSettings, endRemove); }); }); } else { currentSettings.hideContent(modal, currentSettings, function() { endHideContent(); currentSettings.hideBackground(modal, currentSettings, endRemove); }); } } } if (e) return false; } function showContentOrLoading() { debug('showContentOrLoading'); if (modal.ready && !modal.anim) { if (modal.dataReady) { if (modal.tmp.html()) { modal.anim = true; if (modal.transition) { fillContent(); modal.animContent = true; currentSettings.hideTransition(modal, currentSettings, function() { modal.loading.hide(); modal.transition = false; modal.loadingShown = false; endShowContent(); }); } else { currentSettings.hideLoading(modal, currentSettings, function() { modal.loading.hide(); modal.loadingShown = false; fillContent(); setMarginLoading(); setMargin(); modal.animContent = true; currentSettings.showContent(modal, currentSettings, endShowContent); }); } } } else if (!modal.loadingShown && !modal.transition) { modal.anim = true; modal.loadingShown = true; if (modal.error) loadingError(); else modal.loading.html(currentSettings.contentLoading); $(currentSettings.closeSelector, modal.loading) .off('click.nyroModal') .on('click.nyroModal', removeModal); setMarginLoading(); currentSettings.showLoading(modal, currentSettings, function(){modal.anim=false;showContentOrLoading();}); } } } // ------------------------------------------------------- // Private Data Loaded callback // ------------------------------------------------------- function ajaxLoaded(data) { debug('AjaxLoaded: '+this.url); if (currentSettings.selector) { var tmp = {}; var i = 0; // Looking for script to store them data = data .replace(/\r\n/gi,'nyroModalLN') .replace(//gi, function(x) { tmp[i] = x; return ''; }); data = $('
'+data+'
').find(currentSettings.selector).html() .replace(/
\n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; if (showTotals) { html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; } html += " \n"; html += " \n"; html += "
" + genlang(31) + "" + genlang(34) + "" + genlang(32) + "" + genlang(33) + "" + genlang(35) + "" + genlang(36) + "" + genlang(37) + "
  " + genlang(38) + "
\n"; html += " \n"; $("#filesystem").append(html); filesystemTable = $("#filesystemTable").dataTable({ "bPaginate": false, "bLengthChange": false, "bFilter": false, "bSort": true, "bInfo": false, "bProcessing": true, "bAutoWidth": false, "bStateSave": true, "aoColumns": [{ "sType": 'span-string', "sWidth": "100px" }, { "sType": 'span-string', "sWidth": "50px" }, { "sType": 'span-string', "sWidth": "200px" }, { "sType": 'span-number' }, { "sType": 'span-number', "sWidth": "80px", "sClass": "right" }, { "sType": 'span-number', "sWidth": "80px", "sClass": "right" }, { "sType": 'span-number', "sWidth": "80px", "sClass": "right" }] }); } /** * fill all errors from the xml in the error div element in the document and show the error icon * @param {jQuery} xml phpSysInfo-XML */ function populateErrors(xml) { var values = false; $("Errors Error", xml).each(function getError(id) { // $("#errorlist").append("" + $(this).attr("Function") + "

" + $(this).text() + "

"); $("#errorlist").append("" + $(this).attr("Function") + "

" + $(this).attr("Message") + "

"); values = true; }); if (values) { $("#warn").css("display", "inline"); $("#loadwarn").css("display", "inline"); } } /** * show the page * @param {jQuery} xml phpSysInfo-XML */ function displayPage(xml) { var versioni = ""; // $("#loader").hide(); // $("#output").fadeIn("slow"); versioni = $("Generation", xml).attr("version").toString(); $("#version").html(versioni); } /** * format seconds to a better readable statement with days, hours and minutes * @param {Number} sec seconds that should be formatted * @return {String} html string with no breaking spaces and translation statements */ function formatUptime(sec) { var txt = "", intMin = 0, intHours = 0, intDays = 0; intMin = sec / 60; intHours = intMin / 60; intDays = Math.floor(intHours / 24); intHours = Math.floor(intHours - (intDays * 24)); intMin = Math.floor(intMin - (intDays * 60 * 24) - (intHours * 60)); if (intDays) { txt += intDays.toString() + " " + genlang(48) + " "; } if (intHours) { txt += intHours.toString() + " " + genlang(49) + " "; } return txt + intMin.toString() + " " + genlang(50); } /** * format a given MHz value to a better readable statement with the right suffix * @param {Number} mhertz mhertz value that should be formatted * @return {String} html string with no breaking spaces and translation statements */ function formatHertz(mhertz) { if ((mhertz >= 0) && (mhertz < 1000)) { return mhertz.toString() + " " + genlang(92); } else { if (mhertz >= 1000) { return round(mhertz / 1000, 2) + " " + genlang(93); } else { return ""; } } } /** * format a given MT/s value to a better readable statement with the right suffix * @param {Number} mtps mtps value that should be formatted * @return {String} html string with no breaking spaces and translation statements */ function formatMTps(mtps) { if ((mtps >= 0) && (mtps < 1000)) { return mtps.toString() + " " + genlang(131); } else { if (mtps >= 1000) { return round(mtps / 1000, 2) + " " + genlang(132); } else { return ""; } } } /** * format the byte values into a user friendly value with the corespondenting unit expression
support is included * for binary and decimal output
user can specify a constant format for all byte outputs or the output is formated * automatically so that every value can be read in a user friendly way * @param {Number} bytes value that should be converted in the corespondenting format, which is specified in the phpsysinfo.ini * @param {jQuery} xml phpSysInfo-XML * @return {String} string of the converted bytes with the translated unit expression */ function formatBytes(bytes, xml) { var byteFormat = "", show = ""; $("Options", xml).each(function getByteFormat(id) { byteFormat = $(this).attr("byteFormat"); }); switch (byteFormat.toLowerCase()) { case "pib": show += round(bytes / Math.pow(1024, 5), 2); show += " " + genlang(90); break; case "tib": show += round(bytes / Math.pow(1024, 4), 2); show += " " + genlang(86); break; case "gib": show += round(bytes / Math.pow(1024, 3), 2); show += " " + genlang(87); break; case "mib": show += round(bytes / Math.pow(1024, 2), 2); show += " " + genlang(88); break; case "kib": show += round(bytes / Math.pow(1024, 1), 2); show += " " + genlang(89); break; case "pb": show += round(bytes / Math.pow(1000, 5), 2); show += " " + genlang(91); break; case "tb": show += round(bytes / Math.pow(1000, 4), 2); show += " " + genlang(85); break; case "gb": show += round(bytes / Math.pow(1000, 3), 2); show += " " + genlang(41); break; case "mb": show += round(bytes / Math.pow(1000, 2), 2); show += " " + genlang(40); break; case "kb": show += round(bytes / Math.pow(1000, 1), 2); show += " " + genlang(39); break; case "b": show += bytes; show += " " + genlang(96); break; case "auto_decimal": if (bytes > Math.pow(1000, 5)) { show += round(bytes / Math.pow(1000, 5), 2); show += " " + genlang(91); } else { if (bytes > Math.pow(1000, 4)) { show += round(bytes / Math.pow(1000, 4), 2); show += " " + genlang(85); } else { if (bytes > Math.pow(1000, 3)) { show += round(bytes / Math.pow(1000, 3), 2); show += " " + genlang(41); } else { if (bytes > Math.pow(1000, 2)) { show += round(bytes / Math.pow(1000, 2), 2); show += " " + genlang(40); } else { if (bytes > Math.pow(1000, 1)) { show += round(bytes / Math.pow(1000, 1), 2); show += " " + genlang(39); } else { show += bytes; show += " " + genlang(96); } } } } } break; default: if (bytes > Math.pow(1024, 5)) { show += round(bytes / Math.pow(1024, 5), 2); show += " " + genlang(90); } else { if (bytes > Math.pow(1024, 4)) { show += round(bytes / Math.pow(1024, 4), 2); show += " " + genlang(86); } else { if (bytes > Math.pow(1024, 3)) { show += round(bytes / Math.pow(1024, 3), 2); show += " " + genlang(87); } else { if (bytes > Math.pow(1024, 2)) { show += round(bytes / Math.pow(1024, 2), 2); show += " " + genlang(88); } else { if (bytes > Math.pow(1024, 1)) { show += round(bytes / Math.pow(1024, 1), 2); show += " " + genlang(89); } else { show += bytes; show += " " + genlang(96); } } } } } } return show; } function formatBPS(bps) { var show = ""; if (bps > Math.pow(1000, 5)) { show += round(bps / Math.pow(1000, 5), 2); show += String.fromCharCode(160) + 'Pb/s'; } else { if (bps > Math.pow(1000, 4)) { show += round(bps / Math.pow(1000, 4), 2); show += String.fromCharCode(160) + 'Tb/s'; } else { if (bps > Math.pow(1000, 3)) { show += round(bps / Math.pow(1000, 3), 2); show += String.fromCharCode(160) + 'Gb/s'; } else { if (bps > Math.pow(1000, 2)) { show += round(bps / Math.pow(1000, 2), 2); show += String.fromCharCode(160) + 'Mb/s'; } else { if (bps > Math.pow(1000, 1)) { show += round(bps / Math.pow(1000, 1), 2); show += String.fromCharCode(160) + 'Kb/s'; } else { show += bps; show += String.fromCharCode(160) + 'b/s'; } } } } } return show; } /** * format a celcius temperature to fahrenheit and also append the right suffix * @param {String} degreeC temperature in celvius * @param {jQuery} xml phpSysInfo-XML * @return {String} html string with no breaking spaces and translation statements */ function formatTemp(degreeC, xml) { var tempFormat = "", degree = 0; $("Options", xml).each(function getOptions(id) { tempFormat = $(this).attr("tempFormat").toString().toLowerCase(); }); degree = parseFloat(degreeC); if (!isFinite(degreeC)) { return "---"; } else { switch (tempFormat) { case "f": return round((((9 * degree) / 5) + 32), 1) + " " + genlang(61); case "c": return round(degree, 1) + " " + genlang(60); case "c-f": return round(degree, 1) + " " + genlang(60) + "
(" + round((((9 * degree) / 5) + 32), 1) + " " + genlang(61) + ")"; case "f-c": return round((((9 * degree) / 5) + 32), 1) + " " + genlang(61) + "
(" + round(degree, 1) + " " + genlang(60) + ")"; } } } /** * create a visual HTML bar from a given size, the layout of that bar can be costumized through the bar css-class * @param {Number} size barclass * @return {String} HTML string which contains the full layout of the bar */ function createBar(size, barclass, sizeused) { var percsize = 0, percsizeused = 0; if (barclass === undefined) { barclass = "bar"; } percsize = Math.max(Math.min(Math.ceil(size), 100), 0); if (sizeused === undefined) { percsizeused = percsize; } else { percsizeused = Math.max(Math.min(Math.ceil(sizeused), size), 0); } if (percsizeused == percsize) { return "
 
 " + size + "%"; } else { return "
 
 
 " + size + "%"; } } /** * (re)fill the vitals block with the values from the given xml * @param {jQuery} xml phpSysInfo-XML */ function refreshVitals(xml) { var hostname = "", ip = "", stripid = 0; function setAndStrip(id, value) { if (value !== "") { $(id).html(value); if (stripid%2 === 1) { $(id).closest('tr').addClass('even'); } else { $(id).closest('tr').removeClass('even'); } $(id).closest('tr').css("display", ""); stripid++; } else { $(id).closest('tr').css("display", "none"); } } if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('vitals', blocks) < 0))) { $("#vitals").remove(); $("Vitals", xml).each(function getVitals(id) { hostname = $(this).attr("Hostname"); ip = $(this).attr("IPAddr"); document.title = "System information: " + hostname + " (" + ip + ")"; $("#s_hostname_title").html(hostname); $("#s_ip_title").html(ip); }); return; } var kernel = "", distro = "", icon = "", uptime = "", users = 0, loadavg = "", os = ""; var processes = 0, psarray = [0,0,0,0,0,0]; var syslang = "", codepage = ""; var lastboot = 0; var timestamp = parseInt($("Generation", xml).attr("timestamp"), 10)*1000; //server time var not_first = false; var datetimeFormat = ""; if (isNaN(timestamp)) timestamp = Number(new Date()); //client time $("Options", xml).each(function getDatetimeFormat(id) { datetimeFormat = $(this).attr("datetimeFormat"); }); $("Vitals", xml).each(function getVitals(id) { hostname = $(this).attr("Hostname"); ip = $(this).attr("IPAddr"); kernel = $(this).attr("Kernel"); distro = $(this).attr("Distro"); icon = $(this).attr("Distroicon"); os = $(this).attr("OS"); uptime = formatUptime(parseInt($(this).attr("Uptime"), 10)); lastboot = new Date(timestamp - (parseInt($(this).attr("Uptime"), 10)*1000)); users = parseInt($(this).attr("Users"), 10); loadavg = $(this).attr("LoadAvg"); if ($(this).attr("CPULoad") !== undefined) { loadavg = loadavg + "
" + createBar(parseInt($(this).attr("CPULoad"), 10)); } if ($(this).attr("SysLang") !== undefined) { syslang = $(this).attr("SysLang"); } if ($(this).attr("CodePage") !== undefined) { codepage = $(this).attr("CodePage"); } //processes if ($(this).attr("Processes") !== undefined) { processes = parseInt($(this).attr("Processes"), 10); } if ($(this).attr("ProcessesRunning") !== undefined) { psarray[0] = parseInt($(this).attr("ProcessesRunning"), 10); } if ($(this).attr("ProcessesSleeping") !== undefined) { psarray[1] = parseInt($(this).attr("ProcessesSleeping"), 10); } if ($(this).attr("ProcessesStopped") !== undefined) { psarray[2] = parseInt($(this).attr("ProcessesStopped"), 10); } if ($(this).attr("ProcessesZombie") !== undefined) { psarray[3] = parseInt($(this).attr("ProcessesZombie"), 10); } if ($(this).attr("ProcessesWaiting") !== undefined) { psarray[4] = parseInt($(this).attr("ProcessesWaiting"), 10); } if ($(this).attr("ProcessesOther") !== undefined) { psarray[5] = parseInt($(this).attr("ProcessesOther"), 10); } document.title = "System information: " + hostname + " (" + ip + ")"; $("#s_hostname_title").html(hostname); $("#s_ip_title").html(ip); setAndStrip("#s_hostname", hostname); setAndStrip("#s_ip", ip); setAndStrip("#s_kernel", kernel); setAndStrip("#s_distro", "Icon " + distro); //onload IE6 PNG fix setAndStrip("#s_os", "OSIcon " + os); //onload IE6 PNG fix setAndStrip("#s_uptime", uptime); if ((datetimeFormat !== undefined) && (datetimeFormat.toLowerCase() === "locale")) { setAndStrip("#s_lastboot", lastboot.toLocaleString()); } else { if (typeof(lastboot.toUTCString)==="function") { setAndStrip("#s_lastboot", lastboot.toUTCString()); } else { //deprecated setAndStrip("#s_lastboot", lastboot.toGMTString()); } } setAndStrip("#s_users", users); setAndStrip("#s_loadavg", loadavg); setAndStrip("#s_syslang", syslang); setAndStrip("#s_codepage", codepage); setAndStrip("#s_processes", processes); if ((processes > 0) && (psarray[0] || psarray[1] || psarray[2] || psarray[3] || psarray[4] || psarray[5])) { $("#s_processes").append(" ("); var idlist = {0:111,1:112,2:113,3:114,4:115,5:116}; for (var proc_type in idlist) { if (psarray[proc_type]) { if (not_first) { $("#s_processes").append(", "); } $("#s_processes").append(psarray[proc_type] + " " + genlang(idlist[proc_type])); not_first = true; } } $("#s_processes").append(") "); } }); } /** * build the cpu information as table rows * @param {jQuery} xml phpSysInfo-XML * @param {Array} tree array that holds the positions for treetable plugin * @param {Number} rootposition position of the parent element * @param {Array} collapsed array that holds all collapsed elements hwne opening page */ function fillCpu(xml, tree, rootposition, collapsed) { var cpucount = 0, html = ""; $("Hardware CPU CpuCore", xml).each(function getCpuCore(cpuCoreId) { var model = "", speed = 0, voltage = 0, bus = 0, cache = 0, bogo = 0, temp = 0, load = 0, speedmax = 0, speedmin = 0, cpucoreposition = 0, virt = "", manufacturer = ""; cpucount++; model = $(this).attr("Model"); voltage = parseFloat($(this).attr("Voltage")); speed = parseInt($(this).attr("CpuSpeed"), 10); speedmax = parseInt($(this).attr("CpuSpeedMax"), 10); speedmin = parseInt($(this).attr("CpuSpeedMin"), 10); cache = parseInt($(this).attr("Cache"), 10); virt = $(this).attr("Virt"); bus = parseInt($(this).attr("BusSpeed"), 10); temp = parseInt($(this).attr("Cputemp"), 10); bogo = parseInt($(this).attr("Bogomips"), 10); manufacturer = $(this).attr("Manufacturer"); load = parseInt($(this).attr("Load"), 10); if (!showCPUListExpanded) { collapsed.push(rootposition); } if (!isNaN(load) && showCPULoadCompact) { html += "
" + model + "
" + createBar(load) + "\n"; } else { html += "
" + model + "
\n"; } cpucoreposition = tree.push(rootposition); if (!showCPUInfoExpanded) { collapsed.push(cpucoreposition); } if (!isNaN(speed)) { html += "
" + genlang(13) + ":
" + formatHertz(speed) + "\n"; tree.push(cpucoreposition); } if (!isNaN(speedmax)) { html += "
" + genlang(100) + ":
" + formatHertz(speedmax) + "\n"; tree.push(cpucoreposition); } if (!isNaN(speedmin)) { html += "
" + genlang(101) + ":
" + formatHertz(speedmin) + "\n"; tree.push(cpucoreposition); } if (!isNaN(cache)) { html += "
" + genlang(15) + ":
" + formatBytes(cache, xml) + "\n"; tree.push(cpucoreposition); } if (virt !== undefined) { html += "
" + genlang(94) + ":
" + virt + "\n"; tree.push(cpucoreposition); } if (!isNaN(bus)) { html += "
" + genlang(14) + ":
" + formatHertz(bus) + "\n"; tree.push(cpucoreposition); } if (isFinite(voltage)) { html += "
" + genlang(52) + ":
" + round(voltage, 2) + String.fromCharCode(160) + genlang(62) + "\n"; tree.push(cpucoreposition); } if (!isNaN(bogo)) { html += "
" + genlang(16) + ":
" + bogo.toString() + "\n"; tree.push(cpucoreposition); } /* if (!isNaN(temp)) { html += "
" + genlang(51) + ":
" + formatTemp(temp, xml) + "\n"; tree.push(cpucoreposition); } */ if (manufacturer !== undefined) { html += "
" + genlang(122) + ":
" + manufacturer + "\n"; tree.push(cpucoreposition); } if (!isNaN(load) && !showCPULoadCompact) { html += "
" + genlang(9) + ":
" + createBar(load) + "\n"; tree.push(cpucoreposition); } }); if (cpucount === 0) { html += "" + genlang(42) + "\n"; tree.push(rootposition); } return html; } function countCpu(xml) { var cpucount = 0; $("Hardware CPU CpuCore", xml).each(function getCpuCore(cpuCoreId) { cpucount++; }); return cpucount; } /** * build rows for a treetable out of the hardwaredevices * @param {jQuery} xml phpSysInfo-XML * @param {String} type type of the hardware device * @param {Array} tree array that holds the positions for treetable plugin * @param {Number} rootposition position of the parent element */ function fillHWDevice(xml, type, tree, rootposition) { var devicecount = 0, html = ""; $("Hardware " + type + ((type=="MEM")?" Chip":" Device"), xml).each(function getHWDevice(deviceId) { var name = "", count = 0, capacity = 0, manufacturer = "", product = "", serial = "", speed = 0, voltage = 0, devcoreposition = 0; devicecount++; name = $(this).attr("Name"); capacity = parseInt($(this).attr("Capacity"), 10); manufacturer = $(this).attr("Manufacturer"); product = $(this).attr("Product"); speed = parseInt($(this).attr("Speed"), 10); voltage = parseFloat($(this).attr("Voltage")); serial = $(this).attr("Serial"); count = parseInt($(this).attr("Count"), 10); if (!isNaN(count) && count > 1) { name = "(" + count + "x) " + name; } html += "
" + name + "
\n"; devcoreposition = tree.push(rootposition); if (!isNaN(capacity)) { html += "
" + genlang(43) + ":
" + formatBytes(capacity, xml) + "\n"; tree.push(devcoreposition); } if (manufacturer!== undefined) { html += "
" + genlang(122) + ":
" + manufacturer + "\n"; tree.push(devcoreposition); } if (product !== undefined) { html += "
" + genlang(123) + ":
" + product + "\n"; tree.push(devcoreposition); } if (!isNaN(speed)) { html += "
" + genlang(129) + ":
" + ((type=="MEM")?formatMTps(speed):formatBPS(1000000*speed)) + "\n"; tree.push(devcoreposition); } if (isFinite(voltage)) { html += "
" + genlang(52) + ":
" + round(voltage, 2) + String.fromCharCode(160) + genlang(62) + "\n"; tree.push(devcoreposition); } if (serial !== undefined) { html += "
" + genlang(124) + ":
" + serial + "\n"; tree.push(devcoreposition); } }); if (devicecount === 0) { html += "
" + genlang(42) + "
\n"; tree.push(rootposition); } return html; } function countHWDevice(xml, type) { var devicecount = 0; $("Hardware " + type + ((type=="MEM")?" Chip":" Device"), xml).each(function getHWDevice(deviceId) { devicecount++; }); return devicecount; } /** * (re)fill the hardware block with the values from the given xml * @param {jQuery} xml phpSysInfo-XML */ function refreshHardware(xml) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('hardware', blocks) < 0))) { $("#hardware").remove(); return; } var html = "", tree = [], closed = [], index = 0, machine = "", virtualizer = ""; $("#hardware").empty(); html += "

" + genlang(10) + "

\n"; html += "
\n"; html += " \n"; html += " \n"; $("Hardware", xml).each(function getMachine(id) { machine = $(this).attr("Name"); }); $("Hardware", xml).each(function getVirtualizer(id) { virtualizer = $(this).attr("Virtualizer"); }); if ((machine !== undefined) && (machine !== "")) { html += " \n"; html += "\n"; tree.push(tree.push(0)); } if ((virtualizer !== undefined) && (virtualizer !== "")) { html += " \n"; html += "\n"; tree.push(tree.push(0)); } if (countCpu(xml)) { html += " \n"; html += fillCpu(xml, tree, tree.push(0), closed); } var typelist = {MEM:130,PCI:17,IDE:18,SCSI:19,NVMe:126,USB:20,TB:117,I2C:118}; for (var dev_type in typelist) { if (countHWDevice(xml, dev_type)) { html += " \n"; index = tree.push(0); closed.push(index); html += fillHWDevice(xml, dev_type, tree, index); } } html += " \n"; html += "
" + genlang(107) + "
" + machine + "
" + genlang(134) + "
" + virtualizer + "
" + genlang(11) + "
" + genlang(typelist[dev_type]) + "
\n"; html += "
\n"; $("#hardware").append(html); $("#HardwareTree").jqTreeTable(tree, { openImg: "./gfx/treeTable/tv-collapsable.gif", shutImg: "./gfx/treeTable/tv-expandable.gif", leafImg: "./gfx/treeTable/tv-item.gif", lastOpenImg: "./gfx/treeTable/tv-collapsable-last.gif", lastShutImg: "./gfx/treeTable/tv-expandable-last.gif", lastLeafImg: "./gfx/treeTable/tv-item-last.gif", vertLineImg: "./gfx/treeTable/vertline.gif", blankImg: "./gfx/treeTable/blank.gif", collapse: closed, column: 0, striped: true, highlight: false, state: false }); } /** *(re)fill the network block with the values from the given xml * @param {jQuery} xml phpSysInfo-XML */ function refreshNetwork(xml) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('network', blocks) < 0))) { $("#network").remove(); return; } var tree = [], closed = [], html0= "", html1= "" ,html = "", isinfo = false, preoldnetwork = [], timestamp; $("#network").empty(); html0 += "

" + genlang(21) + "

\n"; html1 += " \n"; html1 += " \n"; html1 += " " + genlang(22) + "\n"; html1 += " " + genlang(23) + "\n"; html1 += " " + genlang(24) + "\n"; html1 += " " + genlang(25) + "\n"; html1 += " \n"; html1 += " \n"; if (showNetworkActiveSpeed) { $("Generation", xml).each(function getTimestamp(id) { timestamp = $(this).attr("timestamp"); }); } $("Network NetDevice", xml).each(function getDevice(id) { var name = "", rx = 0, tx = 0, er = 0, dr = 0, info = "", bridge = "", networkindex = 0, htmlrx = '', htmltx = '', rxr = 0, txr = 0; name = $(this).attr("Name"); bridge = $(this).attr("Bridge"); rx = parseInt($(this).attr("RxBytes"), 10); tx = parseInt($(this).attr("TxBytes"), 10); er = parseInt($(this).attr("Err"), 10); dr = parseInt($(this).attr("Drops"), 10); rxr = parseInt($(this).attr("RxRate"), 10); txr = parseInt($(this).attr("TxRate"), 10); if (showNetworkActiveSpeed) { if ((rx == 0) && !isNaN(rxr)) { if (showNetworkActiveSpeed == 2) { htmlrx ="
("+formatBPS(round(rxr, 2))+")"; } else { htmlrx ="
("+formatBytes(round(rxr, 2), xml)+"/s)"; } } else if ($.inArray(name, oldnetwork) >= 0) { var diff, difftime; if (((diff = rx - oldnetwork[name].rx) > 0) && ((difftime = timestamp - oldnetwork[name].timestamp) > 0)) { if (showNetworkActiveSpeed == 2) { htmlrx ="
("+formatBPS(round(8*diff/difftime, 2))+")"; } else { htmlrx ="
("+formatBytes(round(diff/difftime, 2), xml)+"/s)"; } } } if ((tx == 0) && !isNaN(txr)) { if (showNetworkActiveSpeed == 2) { htmltx ="
("+formatBPS(round(txr, 2))+")"; } else { htmltx ="
("+formatBytes(round(txr, 2), xml)+"/s)"; } } else if ($.inArray(name, oldnetwork) >= 0) { if (((diff = tx - oldnetwork[name].tx) > 0) && (difftime > 0)) { if (showNetworkActiveSpeed == 2) { htmltx ="
("+formatBPS(round(8*diff/difftime, 2))+")"; } else { htmltx ="
("+formatBytes(round(diff/difftime, 2), xml)+"/s)"; } } } } if ( (bridge !== undefined) && (bridge !== "") ) { html +="
" + name + " (" + bridge +")
" + formatBytes(rx, xml) + htmlrx + "" + formatBytes(tx, xml) + htmltx +"" + er.toString() + "/" + dr.toString() + ""; } else { html +="
" + name + "
" + formatBytes(rx, xml) + htmlrx + "" + formatBytes(tx, xml) + htmltx +"" + er.toString() + "/" + dr.toString() + ""; } networkindex = tree.push(0); if (showNetworkActiveSpeed) { preoldnetwork.pushIfNotExist(name); preoldnetwork[name] = {timestamp:timestamp, rx:rx, tx:tx}; } info = $(this).attr("Info"); if ( (info !== undefined) && (info !== "") ) { var i = 0, infos = info.replace(/:/g, ":").split(";"); /* split long addresses */ isinfo = true; for(i = 0; i < infos.length; i++){ html +="
" + infos[i] + "
"; tree.push(networkindex); } if (!showNetworkInfosExpanded) { closed.push(networkindex); } } }); html += " \n"; html += " \n"; html += "\n"; html0 += "
\n"; if (isinfo) { html0 += " \n"; html1 += " \n"; } else { html0 += "
\n"; html1 += " \n"; } $("#network").append(html0+html1+html); if (isinfo) $("#NetworkTree").jqTreeTable(tree, { openImg: "./gfx/treeTable/tv-collapsable.gif", shutImg: "./gfx/treeTable/tv-expandable.gif", leafImg: "./gfx/treeTable/tv-item.gif", lastOpenImg: "./gfx/treeTable/tv-collapsable-last.gif", lastShutImg: "./gfx/treeTable/tv-expandable-last.gif", lastLeafImg: "./gfx/treeTable/tv-item-last.gif", vertLineImg: "./gfx/treeTable/vertline.gif", blankImg: "./gfx/treeTable/blank.gif", collapse: closed, column: 0, striped: true, highlight: false, state: false }); if (showNetworkActiveSpeed) { while (oldnetwork.length > 0) { delete oldnetwork[oldnetwork.length-1]; //remove last object oldnetwork.pop(); //remove last object reference from array } oldnetwork = preoldnetwork; } } /** * (re)fill the memory block with the values from the given xml * @param {jQuery} xml phpSysInfo-XML */ function refreshMemory(xml) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('memory', blocks) < 0))) { $("#memory").remove(); return; } var html = "", tree = [], closed = []; $("#memory").empty(); html += "

" + genlang(27) + "

\n"; html += "
\n"; html += "
\n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; $("Memory", xml).each(function getMemory(id) { var free = 0, total = 0, used = 0, percent = 0, memoryindex = 0; free = parseInt($(this).attr("Free"), 10); used = parseInt($(this).attr("Used"), 10); total = parseInt($(this).attr("Total"), 10); percent = parseInt($(this).attr("Percent"), 10); html += ""; memoryindex = tree.push(0); $("Memory Details", xml).each(function getMemorydetails(id) { var app = 0, appp = 0, buff = 0, buffp = 0, cached = 0, cachedp = 0; app = parseInt($(this).attr("App"), 10); appp = parseInt($(this).attr("AppPercent"), 10); buff = parseInt($(this).attr("Buffers"), 10); buffp = parseInt($(this).attr("BuffersPercent"), 10); cached = parseInt($(this).attr("Cached"), 10); cachedp = parseInt($(this).attr("CachedPercent"), 10); if (!isNaN(app)) { html += ""; tree.push(memoryindex); } if (!isNaN(cached)) { html += ""; tree.push(memoryindex); } if (!isNaN(buff)) { html += ""; tree.push(memoryindex); } if (!isNaN(app) || !isNaN(buff) || !isNaN(cached)) { if (!showMemoryInfosExpanded) { closed.push(memoryindex); } } }); }); $("Memory Swap", xml).each(function getSwap(id) { var free = 0, total = 0, used = 0, percent = 0, swapindex = 0; free = parseInt($(this).attr("Free"), 10); used = parseInt($(this).attr("Used"), 10); total = parseInt($(this).attr("Total"), 10); percent = parseInt($(this).attr("Percent"), 10); html += ""; swapindex = tree.push(0); $("Memory Swap Mount", xml).each(function getDevices(id) { var free = 0, total = 0, used = 0, percent = 0, mpoint = "", mpid = 0; if (!showMemoryInfosExpanded) { closed.push(swapindex); } free = parseInt($(this).attr("Free"), 10); used = parseInt($(this).attr("Used"), 10); total = parseInt($(this).attr("Total"), 10); percent = parseInt($(this).attr("Percent"), 10); mpid = parseInt($(this).attr("MountPointID"), 10); mpoint = $(this).attr("MountPoint"); if (mpoint === undefined) { mpoint = mpid; } html += ""; tree.push(swapindex); }); }); html += " \n"; html += "
" + genlang(34) + "" + genlang(33) + "" + genlang(125) + "" + genlang(36) + "" + genlang(37) + "
" + genlang(28) + "
" + createBar(percent) + "" + formatBytes(free, xml) + "" + formatBytes(used, xml) + "" + formatBytes(total, xml) + "
" + genlang(64) + "
" + createBar(appp) + " " + formatBytes(app, xml) + " 
" + genlang(66) + "
" + createBar(cachedp) + " " + formatBytes(cached, xml) + " 
" + genlang(65) + "
" + createBar(buffp) + " " + formatBytes(buff, xml) + " 
" + genlang(29) + "
" + createBar(percent) + "" + formatBytes(free, xml) + "" + formatBytes(used, xml) + "" + formatBytes(total, xml) + "
" + mpoint + "
" + createBar(percent) + "" + formatBytes(free, xml) + "" + formatBytes(used, xml) + "" + formatBytes(total, xml) + "
\n"; html += "
\n"; $("#memory").append(html); $("#MemoryTree").jqTreeTable(tree, { openImg: "./gfx/treeTable/tv-collapsable.gif", shutImg: "./gfx/treeTable/tv-expandable.gif", leafImg: "./gfx/treeTable/tv-item.gif", lastOpenImg: "./gfx/treeTable/tv-collapsable-last.gif", lastShutImg: "./gfx/treeTable/tv-expandable-last.gif", lastLeafImg: "./gfx/treeTable/tv-item-last.gif", vertLineImg: "./gfx/treeTable/vertline.gif", blankImg: "./gfx/treeTable/blank.gif", collapse: closed, column: 0, striped: true, highlight: false, state: false }); } /** * (re)fill the filesystems block with the values from the given xml

* appends the filesystems (each in a row) to the filesystem table in the tbody
before the rows are inserted the entire * tbody is cleared * @param {jQuery} xml phpSysInfo-XML */ function refreshFilesystems(xml) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('filesystem', blocks) < 0))) { $("#filesystem").remove(); return; } var total_usage = 0, total_used = 0, total_free = 0, total_size = 0, threshold = 0, usage = 0; filesystemTable.fnClearTable(); $("Options", xml).each(function getThreshold(id) { threshold = parseInt($(this).attr("threshold"), 10); }); $("FileSystem Mount", xml).each(function getMount(mid) { var mpoint = "", mpid = 0, type = "", name = "", free = 0, used = 0, size = 0, percent = 0, options = "", inodes = 0, inodes_text = "", options_text = "", ignore = 0; mpid = parseInt($(this).attr("MountPointID"), 10); type = $(this).attr("FSType"); name = $(this).attr("Name").replace(/;/g, ";"); /* split long name */ free = parseInt($(this).attr("Free"), 10); used = parseInt($(this).attr("Used"), 10); size = parseInt($(this).attr("Total"), 10); percent = parseInt($(this).attr("Percent"), 10); options = $(this).attr("MountOptions"); inodes = parseInt($(this).attr("Inodes"), 10); mpoint = $(this).attr("MountPoint"); ignore = parseInt($(this).attr("Ignore"), 10); if (mpoint === undefined) { mpoint = mpid; } if (options !== undefined) { options_text = "
(" + options + ")"; } if (!isNaN(inodes)) { inodes_text = " (" + inodes.toString() + "%)"; } if (type === undefined) { type = ""; } usage = (size != 0) ? Math.ceil((used / size) * 100) : 0; if (!isNaN(ignore) && (ignore > 0) && showTotals) { if (ignore >= 3) { if ((ignore == 3) && !isNaN(threshold) && (percent >= threshold)) { filesystemTable.fnAddData(["" + mpoint + "" + mpoint, "" + type + "" + type, "" + name + "" + name + options_text, "" + percent.toString() + "" + createBar(percent, "barwarn", usage) + inodes_text, "" + free.toString() + "(" + formatBytes(free, xml) + ")", "" + used.toString() + "(" + formatBytes(used, xml) + ")", "" + size.toString() + "(" + formatBytes(size, xml) + ")"]); } else { filesystemTable.fnAddData(["" + mpoint + "" + mpoint, "" + type + "" + type, "" + name + "" + name + options_text, "" + percent.toString() + "" + createBar(percent, "bar", usage) + inodes_text, "" + free.toString() + "(" + formatBytes(free, xml) + ")", "" + used.toString() + "(" + formatBytes(used, xml) + ")", "" + size.toString() + "(" + formatBytes(size, xml) + ")"]); } } else { if (!isNaN(threshold) && (percent >= threshold)) { filesystemTable.fnAddData(["" + mpoint + "" + mpoint, "" + type + "" + type, "" + name + "" + name + options_text, "" + percent.toString() + "" + createBar(percent, "barwarn", usage) + inodes_text, "" + free.toString() + "(" + formatBytes(free, xml) + ")", "" + used.toString() + "" + formatBytes(used, xml), "" + size.toString() + "(" + formatBytes(size, xml) + ")"]); } else { filesystemTable.fnAddData(["" + mpoint + "" + mpoint, "" + type + "" + type, "" + name + "" + name + options_text, "" + percent.toString() + "" + createBar(percent, "bar", usage) + inodes_text, "" + free.toString() + "(" + formatBytes(free, xml) + ")", "" + used.toString() + "" + formatBytes(used, xml), "" + size.toString() + "(" + formatBytes(size, xml) + ")"]); } } } else { if (!isNaN(threshold) && (percent >= threshold) && (showTotals || isNaN(ignore) || (ignore < 4))) { filesystemTable.fnAddData(["" + mpoint + "" + mpoint, "" + type + "" + type, "" + name + "" + name + options_text, "" + percent.toString() + "" + createBar(percent, "barwarn", usage) + inodes_text, "" + free.toString() + "" + formatBytes(free, xml), "" + used.toString() + "" + formatBytes(used, xml), "" + size.toString() + "" + formatBytes(size, xml)]); } else { filesystemTable.fnAddData(["" + mpoint + "" + mpoint, "" + type + "" + type, "" + name + "" + name + options_text, "" + percent.toString() + "" + createBar(percent, "bar", usage) + inodes_text, "" + free.toString() + "" + formatBytes(free, xml), "" + used.toString() + "" + formatBytes(used, xml), "" + size.toString() + "" + formatBytes(size, xml)]); } } if (showTotals) { if (!isNaN(ignore) && (ignore > 0)) { if (ignore == 2) { total_used += used; } else if (ignore == 1) { total_used += used; total_size += used; } } else { total_used += used; total_free += free; total_size += size; } } }); if (showTotals) { usage = (total_size != 0) ? Math.ceil((total_used / total_size) * 100) : 0; total_usage = (total_size != 0) ? round(100 - (total_free / total_size) * 100, 2) : 0; if (!isNaN(threshold) && (total_usage >= threshold)) { $("#s_fs_total").html(createBar(total_usage, "barwarn" , usage)); } else { $("#s_fs_total").html(createBar(total_usage, "bar", usage)); } $("#s_fs_tfree").html(formatBytes(total_free, xml)); $("#s_fs_tused").html(formatBytes(total_used, xml)); $("#s_fs_tsize").html(formatBytes(total_size, xml)); } } /** * (re)fill the temperature block with the values from the given xml

* build the block content for the temperature block, this includes normal temperature information in the XML * and also the HDDTemp information, if there are no information the entire table will be removed * to avoid HTML warnings * @param {jQuery} xml phpSysInfo-XML */ function refreshTemp(xml) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('temperature', blocks) < 0))) { $("#temperature").remove(); return; } var values = false; $("#temperatureTable tbody").empty(); $("MBInfo Temperature Item", xml).each(function getTemperatures(id) { var label = "", value = "", event = "", limit = 0, _limit = ""; label = $(this).attr("Label"); value = $(this).attr("Value"); event = $(this).attr("Event"); if (event !== undefined) label += " \"!\""; limit = parseFloat($(this).attr("Max")); if (isFinite(limit)) _limit = formatTemp(limit, xml); $("#temperatureTable tbody").append("" + label + "" + formatTemp(value, xml) + "" + _limit + ""); values = true; }); if (values) { $("#temperature").show(); } else { $("#temperature").hide(); } } /** * (re)fill the voltage block with the values from the given xml

* build the voltage information into a separate block, if there is no voltage information available the * entire table will be removed to avoid HTML warnings * @param {jQuery} xml phpSysInfo-XML */ function refreshVoltage(xml) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('voltage', blocks) < 0))) { $("#voltage").remove(); return; } var values = false; $("#voltageTable tbody").empty(); $("MBInfo Voltage Item", xml).each(function getVoltages(id) { var label = "", value = 0, event = "", max = 0, min = 0, _min = "", _max = ""; label = $(this).attr("Label"); value = parseFloat($(this).attr("Value")); event = $(this).attr("Event"); if (event !== undefined) label += " \"!\""; max = parseFloat($(this).attr("Max")); if (isFinite(max)) _max = round(max, 2) + " " + genlang(62); min = parseFloat($(this).attr("Min")); if (isFinite(min)) _min = round(min, 2) + " " + genlang(62); if (isFinite(value)) $("#voltageTable tbody").append("" + label + "" + round(value, 2) + " " + genlang(62) + "" + _min + "" + _max + ""); else $("#voltageTable tbody").append("" + label + "--- " + genlang(62) + "" + _min + "" + _max + ""); values = true; }); if (values) { $("#voltage").show(); } else { $("#voltage").hide(); } } /** * (re)fill the fan block with the values from the given xml

* build the fan information into a separate block, if there is no fan information available the * entire table will be removed to avoid HTML warnings * @param {jQuery} xml phpSysInfo-XML */ function refreshFans(xml) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('fans', blocks) < 0))) { $("#fans").remove(); return; } var values = false; $("#fansTable tbody").empty(); $("MBInfo Fans Item", xml).each(function getFans(id) { var label = "", value = 0, event = "", min = 0, _min = "", unit = ""; label = $(this).attr("Label"); value = parseFloat($(this).attr("Value")); event = $(this).attr("Event"); if (event !== undefined) label += " \"!\""; min = parseFloat($(this).attr("Min")); unit = $(this).attr("Unit"); if (unit === "%") { if (isFinite(min)) _min = round(min,0) + "%"; if (isFinite(value)) $("#fansTable tbody").append("" + label + "" + createBar(round(value,0)) + "" + _min + ""); else $("#fansTable tbody").append("" + label + "---%" + _min + ""); } else { if (isFinite(min)) _min = round(min,0) + " " + genlang(63); if (isFinite(value)) $("#fansTable tbody").append("" + label + "" + round(value,0) + " " + genlang(63) + "" + _min + ""); else $("#fansTable tbody").append("" + label + "--- " + genlang(63) + "" + _min + ""); } values = true; }); if (values) { $("#fans").show(); } else { $("#fans").hide(); } } /** * (re)fill the power block with the values from the given xml

* build the power information into a separate block, if there is no power information available the * entire table will be removed to avoid HTML warnings * @param {jQuery} xml phpSysInfo-XML */ function refreshPower(xml) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('power', blocks) < 0))) { $("#power").remove(); return; } var values = false; $("#powerTable tbody").empty(); $("MBInfo Power Item", xml).each(function getPowers(id) { var label = "", value = "", event = "", limit = 0, _limit = ""; label = $(this).attr("Label"); value = parseFloat($(this).attr("Value")); event = $(this).attr("Event"); if (event !== undefined) label += " \"!\""; limit = parseFloat($(this).attr("Max")); if (isFinite(limit)) _limit = round(limit, 2) + " " + genlang(103); if (isFinite(value)) $("#powerTable tbody").append("" + label + "" + round(value, 2) + " " + genlang(103) + "" + _limit + ""); else $("#powerTable tbody").append("" + label + "--- " + genlang(103) + "" + _limit + ""); values = true; }); if (values) { $("#power").show(); } else { $("#power").hide(); } } /** * (re)fill the current block with the values from the given xml

* build the current information into a separate block, if there is no current information available the * entire table will be removed to avoid HTML warnings * @param {jQuery} xml phpSysInfo-XML */ function refreshCurrent(xml) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('current', blocks) < 0))) { $("#current").remove(); return; } var values = false; $("#currentTable tbody").empty(); $("MBInfo Current Item", xml).each(function getCurrents(id) { var label = "", value = "", event = "", min = 0, max = 0, _min = "", _max = ""; label = $(this).attr("Label"); value = parseFloat($(this).attr("Value")); event = $(this).attr("Event"); if (event !== undefined) label += " \"!\""; max = parseFloat($(this).attr("Max")); if (isFinite(max)) _max = round(max, 2) + " " + genlang(106); min = parseFloat($(this).attr("Min")); if (isFinite(min)) _min = round(min, 2) + " " + genlang(106); if (isFinite(value)) $("#currentTable tbody").append("" + label + "" + round(value, 2) + " " + genlang(106) + "" + _min + "" + _max + ""); else $("#currentTable tbody").append("" + label + "--- " + genlang(106) + "" + _min + "" + _max + ""); values = true; }); if (values) { $("#current").show(); } else { $("#current").hide(); } } /** * (re)fill the other block with the values from the given xml

* build the other information into a separate block, if there is no other information available the * entire table will be removed to avoid HTML warnings * @param {jQuery} xml phpSysInfo-XML */ function refreshOther(xml) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('other', blocks) < 0))) { $("#other").remove(); return; } var values = false; $("#otherTable tbody").empty(); $("MBInfo Other Item", xml).each(function getOthers(id) { var label = "", value = "", event = "", unit = ""; label = $(this).attr("Label"); value = $(this).attr("Value"); event = $(this).attr("Event"); if (event !== undefined) label += " \"!\""; unit = $(this).attr("Unit"); if (unit === "%") { if (isFinite(value)) $("#otherTable tbody").append("" + label + "" + createBar(round(value,0)) + ""); else $("#otherTable tbody").append("" + label + "---%"); } else { $("#otherTable tbody").append("" + label + "" + value + ""); } values = true; }); if (values) { $("#other").show(); } else { $("#other").hide(); } } /** * (re)fill the ups block with the values from the given xml

* build the ups information into a separate block, if there is no ups information available the * entire table will be removed to avoid HTML warnings * @param {jQuery} xml phpSysInfo-XML */ function refreshUps(xml) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('ups', blocks) < 0))) { $("#ups").remove(); return; } var add_apcupsd_cgi_links = ($("[ApcupsdCgiLinks='1']", xml).length > 0); var html = "", tree = [], closed = [], index = 0, values = false; html += "

" + genlang(68) + "

\n"; html += "
\n"; html += " \n"; html += " \n"; $("#ups").empty(); $("UPSInfo UPS", xml).each(function getUps(id) { var name = "", model = "", mode = "", start_time = "", upsstatus = "", beeperstatus = "", temperature = "", outages_count = "", last_outage = "", last_outage_finish = "", line_voltage = "", line_frequency = "", load_percent = "", battery_date = "", battery_voltage = "", battery_charge_percent = "", time_left_minutes = ""; name = $(this).attr("Name"); model = $(this).attr("Model"); mode = $(this).attr("Mode"); start_time = $(this).attr("StartTime"); upsstatus = $(this).attr("Status"); beeperstatus = $(this).attr("BeeperStatus"); temperature = $(this).attr("Temperature"); outages_count = $(this).attr("OutagesCount"); last_outage = $(this).attr("LastOutage"); last_outage_finish = $(this).attr("LastOutageFinish"); line_voltage = $(this).attr("LineVoltage"); line_frequency = $(this).attr("LineFrequency"); load_percent = parseInt($(this).attr("LoadPercent"), 10); battery_date = $(this).attr("BatteryDate"); battery_voltage = $(this).attr("BatteryVoltage"); battery_charge_percent = parseInt($(this).attr("BatteryChargePercent"), 10); time_left_minutes = $(this).attr("TimeLeftMinutes"); if (mode !== undefined) { html += "\n"; } else { html += "\n"; } index = tree.push(0); if (model !== undefined) { html += "\n"; tree.push(index); } if (start_time !== undefined) { html += "\n"; tree.push(index); } if (upsstatus !== undefined) { html += "\n"; tree.push(index); } if (beeperstatus !== undefined) { html += "\n"; tree.push(index); } if (temperature !== undefined) { html += "\n"; tree.push(index); } if (outages_count !== undefined) { html += "\n"; tree.push(index); } if (last_outage !== undefined) { html += "\n"; tree.push(index); } if (last_outage_finish !== undefined) { html += "\n"; tree.push(index); } if (line_voltage !== undefined) { html += "\n"; tree.push(index); } if (line_frequency !== undefined) { html += "\n"; tree.push(index); } if (!isNaN(load_percent)) { html += "\n"; tree.push(index); } if (battery_date !== undefined) { html += "\n"; tree.push(index); } if (battery_voltage !== undefined) { html += "\n"; tree.push(index); } if (!isNaN(battery_charge_percent)) { html += "\n"; tree.push(index); } if (time_left_minutes !== undefined) { html += "\n"; tree.push(index); } values=true; }); html += " \n"; html += "
" + name + " (" + mode + ")
" + name + "
" + genlang(70) + "
" + model + "
" + genlang(72) + "
" + start_time + "
" + genlang(73) + "
" + upsstatus + "
" + genlang(133) + "
" + beeperstatus + "
" + genlang(84) + "
" + temperature + "
" + genlang(74) + "
" + outages_count + "
" + genlang(75) + "
" + last_outage + "
" + genlang(76) + "
" + last_outage_finish + "
" + genlang(77) + "
" + line_voltage + " " + genlang(82) + "
" + genlang(108) + "
" + line_frequency + " " + genlang(109) + "
" + genlang(78) + "
" + createBar(load_percent) + "
" + genlang(104) + "
" + battery_date + "
" + genlang(79) + "
" + battery_voltage + " " + genlang(82) + "
" + genlang(80) + "
" + createBar(battery_charge_percent) + "
" + genlang(81) + "
" + time_left_minutes + " " + genlang(83) + "
\n"; html += "
\n"; if (add_apcupsd_cgi_links){ html += " (" + genlang(99) + ")\n"; } $("#ups").append(html); if (values) { $("#UPSTree").jqTreeTable(tree, { openImg: "./gfx/treeTable/tv-collapsable.gif", shutImg: "./gfx/treeTable/tv-expandable.gif", leafImg: "./gfx/treeTable/tv-item.gif", lastOpenImg: "./gfx/treeTable/tv-collapsable-last.gif", lastShutImg: "./gfx/treeTable/tv-expandable-last.gif", lastLeafImg: "./gfx/treeTable/tv-item-last.gif", vertLineImg: "./gfx/treeTable/vertline.gif", blankImg: "./gfx/treeTable/blank.gif", collapse: closed, column: 0, striped: true, highlight: false, state: false }); $("#ups").show(); } else { $("#ups").hide(); } } /** * reload the page, this means all values are refreshed */ function reload(initiate) { $.ajax({ url: 'xml.php', dataType: 'xml', error: function error() { if ((typeof(initiate) === 'boolean') && (initiate === true)) { $.jGrowl("Error loading XML document!", { sticky: true }); } else { $.jGrowl("Error loading XML document!"); } }, success: function buildblocks(xml) { if ((typeof(initiate) === 'boolean') && (initiate === true)) { populateErrors(xml); } refreshVitals(xml); refreshHardware(xml); refreshMemory(xml); refreshFilesystems(xml); refreshNetwork(xml); refreshVoltage(xml); refreshCurrent(xml); refreshTemp(xml); refreshFans(xml); refreshPower(xml); refreshOther(xml); refreshUps(xml); changeLanguage(); if ((typeof(initiate) === 'boolean') && (initiate === true)) { displayPage(xml); settimer(xml); } else { for (var i = 0; i < plugin_liste.length; i++) { try { //dynamic call window[plugin_liste[i].toLowerCase() + '_request'](); } catch (err) { } } } $('.stripeMe tr:nth-child(even)').addClass('even'); } }); } /** * set a reload timer for the page * @param {jQuery} xml phpSysInfo-XML */ function settimer(xml) { $("Options", xml).each(function getRefreshTime(id) { var options, refresh = ""; options = $("Options", xml).get(id); refresh = $(this).attr("refresh"); if (refresh !== '0') { $.timer(refresh, reload); } }); } $(document).ready(function buildpage() { var i = 0, old_template = null, cookie_template = null, cookie_language = null, blocktmp = ""; showCPUListExpanded = $("#showCPUListExpanded").val().toString()==="true"; showCPUInfoExpanded = $("#showCPUInfoExpanded").val().toString()==="true"; showNetworkInfosExpanded = $("#showNetworkInfosExpanded").val().toString()==="true"; showMemoryInfosExpanded = $("#showMemoryInfosExpanded").val().toString()==="true"; showCPULoadCompact = $("#showCPULoadCompact").val().toString()==="true"; showTotals = $("#hideTotals").val().toString()!=="true"; increaseWidth = $("#increaseWidth").val().toString(); if (isNaN(increaseWidth) || (increaseWidth<=0)) increaseWidth = 0; switch ($("#showNetworkActiveSpeed").val().toString()) { case "bps": showNetworkActiveSpeed = 2; break; case "true": showNetworkActiveSpeed = 1; break; default: showNetworkActiveSpeed = 0; } blocktmp = $("#blocks").val().toString(); if (blocktmp.length >0 ){ if (blocktmp === "true") { blocks[0] = "true"; } else { blocks = blocktmp.split(','); var j = 2; for (i = 0; i < blocks.length; i++) { if ($("#"+blocks[i]).length > 0) { $("#output").children().eq(j).before($("#"+blocks[i])); j++; } } } } if ($("#language option").length < 2) { current_language = $("#language").val().toString(); /* changeLanguage(); for (i = 0; i < plugin_liste.length; i++) { changeLanguage(plugin_liste[i]); } */ } else { cookie_language = readCookie("psi_language"); if (cookie_language !== null) { current_language = cookie_language; $("#language").val(current_language); } else { current_language = $("#language").val().toString(); } /* changeLanguage(); for (i = 0; i < plugin_liste.length; i++) { changeLanguage(plugin_liste[i]); } */ $('#language').show(); $('span[class=lang_045]').show(); $("#language").change(function changeLang() { var i = 0; current_language = $("#language").val().toString(); createCookie('psi_language', current_language, 365); changeLanguage(); for (i = 0; i < plugin_liste.length; i++) { changeLanguage(plugin_liste[i]); } return false; }); } if ($("#template option").length < 2) { switchStyle($("#template").val().toString()); } else { cookie_template = readCookie("psi_template"); if (cookie_template !== null) { old_template = $("#template").val(); $("#template").val(cookie_template); if ($("#template").val() === null) { $("#template").val(old_template); } } switchStyle($("#template").val().toString()); $('#template').show(); $('span[class=lang_044]').show(); $("#template").change(function changeTemplate() { switchStyle($("#template").val().toString()); createCookie('psi_template', $("#template").val().toString(), 365); return false; }); } filesystemtable(); reload(true); $("#errors").nyroModal(); }); jQuery.fn.dataTableExt.oSort['span-string-asc'] = function sortStringAsc(a, b) { var x = "", y = ""; x = a.substring(a.indexOf(">") + 1, a.indexOf("") + 1, b.indexOf(" y) ? 1 : 0)); }; jQuery.fn.dataTableExt.oSort['span-string-desc'] = function sortStringDesc(a, b) { var x = "", y = ""; x = a.substring(a.indexOf(">") + 1, a.indexOf("") + 1, b.indexOf(" y) ? -1 : 0)); }; jQuery.fn.dataTableExt.oSort['span-number-asc'] = function sortNumberAsc(a, b) { var x = 0, y = 0; x = parseInt(a.substring(a.indexOf(">") + 1, a.indexOf("") + 1, b.indexOf(" y) ? 1 : 0)); }; jQuery.fn.dataTableExt.oSort['span-number-desc'] = function sortNumberDesc(a, b) { var x = 0, y = 0; x = parseInt(a.substring(a.indexOf(">") + 1, a.indexOf("") + 1, b.indexOf(" y) ? -1 : 0)); }; jQuery.fn.dataTableExt.oSort['span-ip-asc'] = function sortIpAsc(a, b) { var x = 0, y = 0, aa = "", bb = ""; aa = a.substring(a.indexOf(">") + 1, a.indexOf("") + 1, b.indexOf(" y) ? 1 : 0)); }; jQuery.fn.dataTableExt.oSort['span-ip-desc'] = function sortIpDesc(a, b) { var x = 0, y = 0, aa = "", bb = ""; aa = a.substring(a.indexOf(">") + 1, a.indexOf("") + 1, b.indexOf(" y) ? -1 : 0)); }; function full_addr(ip_string) { var wrongvalue = false; ip_string = $.trim(ip_string).toLowerCase(); // ipv4 notation if (ip_string.match(/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$)/)) { ip_string ='::ffff:' + ip_string; } // replace ipv4 address if any var ipv4 = ip_string.match(/(.*:)([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$)/); if (ipv4) { ip_string = ipv4[1]; ipv4 = ipv4[2].match(/[0-9]+/g); for (var i = 0;i < 4;i ++) { var byte = parseInt(ipv4[i], 10); if (byte<256) { ipv4[i] = ("0" + byte.toString(16)).substr(-2); } else { wrongvalue = true; break; } } if (wrongvalue) { ip_string = ''; } else { ip_string += ipv4[0] + ipv4[1] + ':' + ipv4[2] + ipv4[3]; } } if (ip_string === '') { return ''; } // take care of leading and trailing :: ip_string = ip_string.replace(/^:|:$/g, ''); var ipv6 = ip_string.split(':'); for (var li = 0; li < ipv6.length; li ++) { var hex = ipv6[li]; if (hex !== "") { if (!hex.match(/^[0-9a-f]{1,4}$/)) { wrongvalue = true; break; } // normalize leading zeros ipv6[li] = ("0000" + hex).substr(-4); } else { // normalize grouped zeros :: hex = []; for (var j = ipv6.length; j <= 8; j ++) { hex.push('0000'); } ipv6[li] = hex.join(':'); } } if (!wrongvalue) { var out = ipv6.join(':'); if (out.length == 39) { return out; } else { return ''; } } else { return ''; } } /** * generate the block element for a specific plugin that is available * @param {String} plugin name of the plugin * @param {Number} translationid id of the translated headline in the plugin translation file * @param {Boolean} reload controls if a reload button should be appended to the headline * @return {String} HTML string which contains the full layout of the block */ function buildBlock(plugin, translationid, reload) { var block = "", reloadpic = ""; if (reload) { reloadpic = "\"reload\" "; } block += "
\n"; block += "
\n"; block += "

" + reloadpic + genlang(translationid, plugin) + "\n"; block += "

\n"; block += "
\n"; block += "
\n"; return block; } /** * translate a plugin and add this plugin to the internal plugin-list, this is only needed once and shouldn't be called more than once * @param {String} plugin name of the plugin that should be translated */ function plugin_translate(plugin) { plugin_liste.pushIfNotExist(plugin); changeLanguage(plugin); } /** * generate a formatted datetime string of the current datetime * @return {String} formatted datetime string */ function datetime() { var date, day = 0, month = 0, year = 0, hour = 0, minute = 0, days = "", months = "", years = "", hours = "", minutes = ""; date = new Date(); day = date.getDate(); month = date.getMonth() + 1; year = date.getFullYear(); hour = date.getHours(); minute = date.getMinutes(); // format values smaller that 10 with a leading 0 days = (day < 10) ? "0" + day.toString() : day.toString(); months = (month < 10) ? "0" + month.toString() : month.toString(); years = (year < 1000) ? year.toString() : year.toString(); minutes = (minute < 10) ? "0" + minute.toString() : minute.toString(); hours = (hour < 10) ? "0" + hour.toString() : hour.toString(); return days + "." + months + "." + years + " - " + hours + ":" + minutes; } Array.prototype.pushIfNotExist = function(val) { if (typeof(val) == 'undefined' || val === '') { return; } val = $.trim(val); if ($.inArray(val, this) == -1) { this.push(val); } }; /** * insert dynamically a js script file into the website * @param {String} name name of the script that should be included */ /* function appendjs(name) { var scrptE, hdEl; scrptE = document.createElement("script"); hdEl = document.getElementsByTagName("head")[0]; scrptE.setAttribute("src", name); scrptE.setAttribute("type", "text/javascript"); hdEl.appendChild(scrptE); } */ /** * insert dynamically a css file into the website * @param {String} name name of the css file that should be included */ /* function appendcss(name) { var scrptE, hdEl; scrptE = document.createElement("link"); hdEl = document.getElementsByTagName("head")[0]; scrptE.setAttribute("type", "text/css"); scrptE.setAttribute("rel", "stylesheet"); scrptE.setAttribute("href", name); hdEl.appendChild(scrptE); } */ phpsysinfo-3.4.4/js/phpSysInfo/phpsysinfo_bootstrap.js000066400000000000000000002321531467431054600233170ustar00rootroot00000000000000var langxml = [], langarr = [], current_language = "", plugins = [], blocks = [], plugin_liste = [], showCPUListExpanded, showCPUInfoExpanded, showNetworkInfosExpanded, showNetworkActiveSpeed, showCPULoadCompact, oldnetwork = [], refrTimer; /** * Fix potential XSS vulnerability in jQuery */ jQuery.htmlPrefilter = function( html ) { return html; }; /** * generate a cookie, if not exist, and add an entry to it

* inspired by http://www.quirksmode.org/js/cookies.html * @param {String} name name that holds the value * @param {String} value value that needs to be stored * @param {Number} days how many days the entry should be valid in the cookie */ function createCookie(name, value, days) { var date = new Date(), expires = ""; if (days) { date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); if (typeof(date.toUTCString)==="function") { expires = "; expires=" + date.toUTCString(); } else { //deprecated expires = "; expires=" + date.toGMTString(); } } else { expires = ""; } document.cookie = name + "=" + value + expires + "; path=/; samesite=strict"; } /** * read a value out of a cookie and return the value

* inspired by http://www.quirksmode.org/js/cookies.html * @param {String} name name of the value that should be retrieved * @return {String} */ function readCookie(name) { var nameEQ = "", ca = [], c = ''; nameEQ = name + "="; ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { c = ca[i]; while (c.charAt(0) === ' ') { c = c.substring(1, c.length); } if (!c.indexOf(nameEQ)) { return c.substring(nameEQ.length, c.length); } } return null; } /** * activates a given style and disables the old one in the document * @param {String} template template that should be activated */ function switchStyle(template) { $("#PSI_Template")[0].setAttribute('href', 'templates/' + template + "_bootstrap.css"); } /** * load the given translation an translate the entire page

retrieving the translation is done through a * ajax call * @private * @param {String} plugin if plugin is given, the plugin translation file will be read instead of the main translation file * @param {String} langarrId internal plugin name * @return {jQuery} translation jQuery-Object */ function getLanguage(plugin, langarrId) { var getLangUrl = ""; if (current_language) { getLangUrl = 'language/language.php?lang=' + current_language; if (plugin) { getLangUrl += "&plugin=" + plugin; } } else { getLangUrl = 'language/language.php'; if (plugin) { getLangUrl += "?plugin=" + plugin; } } $.ajax({ url: getLangUrl, type: 'GET', dataType: 'xml', timeout: 100000, error: function error() { $("#errors").append("
  • Error loading language - " + getLangUrl + "

  • "); $("#errorbutton").attr('data-toggle', 'modal'); $("#errorbutton").css('cursor', 'pointer'); $("#errorbutton").css("visibility", "visible"); }, success: function buildblocks(xml) { var idexp; langxml[langarrId] = xml; if (langarr[langarrId] === undefined) { langarr.push(langarrId); langarr[langarrId] = []; } $("expression", langxml[langarrId]).each(function langstore(id) { idexp = $("expression", xml).get(id); langarr[langarrId][this.getAttribute('id')] = $("exp", idexp).text().toString().replace(/\//g, "/"); }); changeSpanLanguage(plugin); } }); } /** * generate a span tag * @param {Number} id translation id in the xml file * @param {String} [plugin] name of the plugin for which the tag should be generated * @param {String} [defaultvalue] default value * @return {String} string which contains generated span tag for translation string */ function genlang(id, plugin, defaultvalue) { var html = "", idString = "", plugname = "", langarrId = current_language + "_"; if (plugin === undefined) { plugname = ""; langarrId += "phpSysInfo"; } else { plugname = plugin.toLowerCase(); langarrId += plugname; } if (id < 100) { if (id < 10) { idString = "00" + id.toString(); } else { idString = "0" + id.toString(); } } else { idString = id.toString(); } if (plugin) { idString = "plugin_" + plugname + "_" + idString; } html += ""; if ((langxml[langarrId] !== undefined) && (langarr[langarrId] !== undefined)) { html += langarr[langarrId][idString]; } else if (defaultvalue !== undefined) { html += defaultvalue; } html += ""; return html; } /** * translates all expressions based on the translation xml file
    * translation expressions must be in the format <span class="lang_???"></span>, where ??? is * the number of the translated expression in the xml file

    if a translated expression is not found in the xml * file nothing would be translated, so the initial value which is inside the span tag is displayed * @param {String} [plugin] name of the plugin */ function changeLanguage(plugin) { var langarrId = current_language + "_"; if (plugin === undefined) { langarrId += "phpSysInfo"; } else { langarrId += plugin; } if (langxml[langarrId] !== undefined) { changeSpanLanguage(plugin); } else { langxml.push(langarrId); getLanguage(plugin, langarrId); } } function changeSpanLanguage(plugin) { var langId = "", langStr = "", langarrId = current_language + "_"; if (plugin === undefined) { langarrId += "phpSysInfo"; $('span[class*=lang_]').each(function translate(i) { langId = this.className.substring(5); if (langId.indexOf('plugin_') !== 0) { //does not begin with plugin_ langStr = langarr[langarrId][langId]; if (langStr !== undefined) { if (langStr.length > 0) { this.innerHTML = langStr; } } } }); $("#select").css( "display", "table-cell" ); //show if any language loaded $("#output").show(); } else { langarrId += plugin; $('span[class*=lang_plugin_'+plugin.toLowerCase()+'_]').each(function translate(i) { langId = this.className.substring(5); langStr = langarr[langarrId][langId]; if (langStr !== undefined) { if (langStr.length > 0) { this.innerHTML = langStr; } } }); $('#panel_'+plugin.toLowerCase()).show(); //show plugin if any language loaded } } function reload(initiate) { $("#errorbutton").css("visibility", "hidden"); $("#errorbutton").css('cursor', 'default'); $("#errorbutton").attr('data-toggle', ''); $("#errors").empty(); $.ajax({ dataType: "json", url: "xml.php?json", error: function(jqXHR, status, thrownError) { if ((status === "parsererror") && (typeof(xmlDoc = $.parseXML(jqXHR.responseText)) === "object")) { var errs = 0; try { $(xmlDoc).find("Error").each(function() { $("#errors").append("
  • "+$(this)[0].attributes.Function.nodeValue+" - "+$(this)[0].attributes.Message.nodeValue.replace(/\n/g, "
    ")+"

  • "); errs++; }); } catch (err) { } if (errs > 0) { $("#errorbutton").attr('data-toggle', 'modal'); $("#errorbutton").css('cursor', 'pointer'); $("#errorbutton").css("visibility", "visible"); } } }, success: function (data) { var refrtime; // console.log(data); // data_dbg = data; if ((typeof(initiate) === 'boolean') && (data.Options !== undefined) && (data.Options["@attributes"] !== undefined) && ((refrtime = data.Options["@attributes"].refresh) !== undefined) && (refrtime !== "0")) { if ((initiate === false) && (typeof(refrTimer) === 'number')) { clearInterval(refrTimer); } refrTimer = setInterval(reload, refrtime); } renderErrors(data); renderVitals(data); renderHardware(data); renderMemory(data); renderFilesystem(data); renderNetwork(data); renderVoltage(data); renderTemperature(data); renderFans(data); renderPower(data); renderCurrent(data); renderOther(data); renderUPS(data); changeLanguage(); } }); for (var i = 0; i < plugins.length; i++) { plugin_request(plugins[i]); if ($("#reload_"+plugins[i]).length > 0) { $("#reload_"+plugins[i]).attr("title", "reload"); } } if ((typeof(initiate) === 'boolean') && (initiate === true)) { for (var j = 0; j < plugins.length; j++) { if ($("#reload_"+plugins[j]).length > 0) { $("#reload_"+plugins[j]).click(clickfunction()); } } } } function clickfunction(){ return function(){ plugin_request(this.id.substring(7)); //cut "reload_" from name $(this).attr("title", datetime()); }; } /** * load the plugin json via ajax */ function plugin_request(pluginname) { $.ajax({ dataType: "json", url: "xml.php?plugin=" + pluginname + "&json", pluginname: pluginname, success: function (data) { try { for (var propertyName in data.Plugins) { if ((data.Plugins[propertyName]["@attributes"] !== undefined) && ((hostname = data.Plugins[propertyName]["@attributes"].Hostname) !== undefined)) { $('span[class=hostname_' + pluginname + ']').html(hostname); } break; } // dynamic call window['renderPlugin_' + this.pluginname](data); changeLanguage(this.pluginname); plugin_liste.pushIfNotExist(this.pluginname); } catch (err) { } renderErrors(data); } }); } $(document).ready(function () { var old_template = null, cookie_template = null, cookie_language = null, plugtmp = "", blocktmp = "", ua = null, useragent = navigator.userAgent; if ($("#hideBootstrapLoader").val().toString()!=="true") { $(document).ajaxStart(function () { $("#loader").css("visibility", "visible"); }); $(document).ajaxStop(function () { $("#loader").css("visibility", "hidden"); }); } if ((ua=useragent.match(/Midori\/(\d+)\.?(\d+)?/)) !== null) { if ((ua[1]==0) && (ua.length==3) && (ua[2]<=4)) { $("#PSI_CSS_Fix")[0].setAttribute('href', 'templates/vendor/bootstrap-midori04.css'); } else if ((ua[1]==0) && (ua.length==3) && (ua[2]==5)) { $("#PSI_CSS_Fix")[0].setAttribute('href', 'templates/vendor/bootstrap-midori05.css'); } } else if ((ua=useragent.match(/\(KHTML, like Gecko\) Version\/(\d+)\.[\d\.]+ (Mobile\/\S+ )?Safari\//)) !== null) { if (ua[1]<=5) { $("#PSI_CSS_Fix")[0].setAttribute('href', 'templates/vendor/bootstrap-safari5.css'); } else if (ua[1]<=8) { $("#PSI_CSS_Fix")[0].setAttribute('href', 'templates/vendor/bootstrap-safari8.css'); } } else if ((ua=useragent.match(/Firefox\/(\d+)\.[\d\.]+/)) !== null) { if (ua[1]<=15) { $("#PSI_CSS_Fix")[0].setAttribute('href', 'templates/vendor/bootstrap-firefox15.css'); } else if (ua[1]<=20) { $("#PSI_CSS_Fix")[0].setAttribute('href', 'templates/vendor/bootstrap-firefox20.css'); } else if (ua[1]<=27) { $("#PSI_CSS_Fix")[0].setAttribute('href', 'templates/vendor/bootstrap-firefox27.css'); } else if (ua[1]==28) { $("#PSI_CSS_Fix")[0].setAttribute('href', 'templates/vendor/bootstrap-firefox28.css'); } } else if ((ua=useragent.match(/Chrome\/(\d+)\.[\d\.]+/)) !== null) { if (ua[1]<=25) { $("#PSI_CSS_Fix")[0].setAttribute('href', 'templates/vendor/bootstrap-chrome25.css'); } else if (ua[1]<=28) { $("#PSI_CSS_Fix")[0].setAttribute('href', 'templates/vendor/bootstrap-chrome28.css'); } } else if ((ua=useragent.match(/^Opera\/.*Version\/(\d+)\.[\d\.]+$/)) !== null) { if (ua[1]<=11) { $("#PSI_CSS_Fix")[0].setAttribute('href', 'templates/vendor/bootstrap-opera11.css'); } } $(window).resize(); sorttable.init(); showCPUListExpanded = $("#showCPUListExpanded").val().toString()==="true"; showCPUInfoExpanded = $("#showCPUInfoExpanded").val().toString()==="true"; showNetworkInfosExpanded = $("#showNetworkInfosExpanded").val().toString()==="true"; showCPULoadCompact = $("#showCPULoadCompact").val().toString()==="true"; switch ($("#showNetworkActiveSpeed").val().toString()) { case "bps": showNetworkActiveSpeed = 2; break; case "true": showNetworkActiveSpeed = 1; break; default: showNetworkActiveSpeed = 0; } blocktmp = $("#blocks").val().toString(); if (blocktmp.length >0 ){ if (blocktmp === "true") { blocks[0] = "true"; } else { blocks = blocktmp.split(','); var j = 0; for (var i = 0; i < blocks.length; i++) { if ($("#block_"+blocks[i]).length > 0) { $("#output").children().eq(j).before($("#block_"+blocks[i])); j++; } } } } plugtmp = $("#plugins").val().toString(); if (plugtmp.length >0 ){ plugins = plugtmp.split(','); } if ($("#language option").length < 2) { current_language = $("#language").val().toString(); /* not visible any objects changeLanguage(); */ /* plugin_liste not initialized yet for (var i = 0; i < plugin_liste.length; i++) { changeLanguage(plugin_liste[i]); } */ } else { cookie_language = readCookie("psi_language"); if (cookie_language !== null) { current_language = cookie_language; $("#language").val(current_language); } else { current_language = $("#language").val().toString(); } /* not visible any objects changeLanguage(); */ /* plugin_liste not initialized yet for (var i = 0; i < plugin_liste.length; i++) { changeLanguage(plugin_liste[i]); } */ $("#langblock").css( "display", "inline-block" ); $("#language").change(function changeLang() { current_language = $("#language").val().toString(); createCookie('psi_language', current_language, 365); changeLanguage(); for (var i = 0; i < plugin_liste.length; i++) { changeLanguage(plugin_liste[i]); } return false; }); } if ($("#template option").length < 2) { switchStyle($("#template").val().toString()); } else { cookie_template = readCookie("psi_bootstrap_template"); if (cookie_template !== null) { old_template = $("#template").val(); $("#template").val(cookie_template); if ($("#template").val() === null) { $("#template").val(old_template); } } switchStyle($("#template").val().toString()); $("#tempblock").css( "display", "inline-block" ); $("#template").change(function changeTemplate() { switchStyle($("#template").val().toString()); createCookie('psi_bootstrap_template', $("#template").val().toString(), 365); return false; }); } reload(true); $(".logo").click(function () { reload(false); }); }); Array.prototype.push_attrs=function(element) { for (var i = 0; i < element.length ; i++) { this.push(element[i]["@attributes"]); } return i; }; function full_addr(ip_string) { var wrongvalue = false; ip_string = $.trim(ip_string).toLowerCase(); // ipv4 notation if (ip_string.match(/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$)/)) { ip_string ='::ffff:' + ip_string; } // replace ipv4 address if any var ipv4 = ip_string.match(/(.*:)([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$)/); if (ipv4) { ip_string = ipv4[1]; ipv4 = ipv4[2].match(/[0-9]+/g); for (var i = 0;i < 4;i ++) { var byte = parseInt(ipv4[i], 10); if (byte<256) { ipv4[i] = ("0" + byte.toString(16)).substr(-2); } else { wrongvalue = true; break; } } if (wrongvalue) { ip_string = ''; } else { ip_string += ipv4[0] + ipv4[1] + ':' + ipv4[2] + ipv4[3]; } } if (ip_string === '') { return ''; } // take care of leading and trailing :: ip_string = ip_string.replace(/^:|:$/g, ''); var ipv6 = ip_string.split(':'); for (var li = 0; li < ipv6.length; li ++) { var hex = ipv6[li]; if (hex !== "") { if (!hex.match(/^[0-9a-f]{1,4}$/)) { wrongvalue = true; break; } // normalize leading zeros ipv6[li] = ("0000" + hex).substr(-4); } else { // normalize grouped zeros :: hex = []; for (var j = ipv6.length; j <= 8; j ++) { hex.push('0000'); } ipv6[li] = hex.join(':'); } } if (!wrongvalue) { var out = ipv6.join(':'); if (out.length == 39) { return out; } else { return ''; } } else { return ''; } } sorttable.sort_ip=function(a,b) { var x = full_addr(a[0]); var y = full_addr(b[0]); if ((x === '') || (y === '')) { x = a[0]; y = b[0]; } return ((x < y) ? -1 : ((x > y) ? 1 : 0)); }; function items(data) { if (data !== undefined) { if ((data.length > 0) && (data[0] !== undefined) && (data[0]["@attributes"] !== undefined)) { return data; } else if (data["@attributes"] !== undefined ) { return [data]; } else { return []; } } else { return []; } } function renderVitals(data) { var hostname = "", ip = ""; if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('vitals', blocks) < 0))) { $("#block_vitals").remove(); if ((data.Vitals !== undefined) && (data.Vitals["@attributes"] !== undefined) && ((hostname = data.Vitals["@attributes"].Hostname) !== undefined) && ((ip = data.Vitals["@attributes"].IPAddr) !== undefined)) { document.title = "System information: " + hostname + " (" + ip + ")"; } return; } var directives = { Uptime: { html: function () { return formatUptime(this.Uptime); } }, LastBoot: { text: function () { var lastboot; var timestamp = 0; var datetimeFormat; if ((data.Generation !== undefined) && (data.Generation["@attributes"] !== undefined) && (data.Generation["@attributes"].timestamp !== undefined) ) { timestamp = parseInt(data.Generation["@attributes"].timestamp, 10) * 1000; //server time if (isNaN(timestamp)) timestamp = Number(new Date()); //client time } else { timestamp = Number(new Date()); //client time } lastboot = new Date(timestamp - (parseInt(this.Uptime, 10) * 1000)); if (((datetimeFormat = data.Options["@attributes"].datetimeFormat) !== undefined) && (datetimeFormat.toLowerCase() === "locale")) { return lastboot.toLocaleString(); } else { if (typeof(lastboot.toUTCString) === "function") { return lastboot.toUTCString(); } else { //deprecated return lastboot.toGMTString(); } } } }, Distro: { html: function () { return '
    ' + this.Distro + '
    '; } }, OS: { html: function () { return '
    ' + this.OS + '
    '; } }, LoadAvg: { html: function () { if (this.CPULoad !== undefined) { return '
    '+this.LoadAvg + '
    ' + '
    ' + '
    ' + round(this.CPULoad,0) + '%
    '; } else { return this.LoadAvg; } } }, Processes: { html: function () { var processes = 0, psarray = [0,0,0,0,0,0]; var not_first = false; processes = parseInt(this.Processes, 10); if (processes > 0) { if (this.ProcessesRunning !== undefined) { psarray[0] = parseInt(this.ProcessesRunning, 10); } if (this.ProcessesSleeping !== undefined) { psarray[1] = parseInt(this.ProcessesSleeping, 10); } if (this.ProcessesStopped !== undefined) { psarray[2] = parseInt(this.ProcessesStopped, 10); } if (this.ProcessesZombie !== undefined) { psarray[3] = parseInt(this.ProcessesZombie, 10); } if (this.ProcessesWaiting !== undefined) { psarray[4] = parseInt(this.ProcessesWaiting, 10); } if (this.ProcessesOther !== undefined) { psarray[5] = parseInt(this.ProcessesOther, 10); } if (psarray[0] || psarray[1] || psarray[2] || psarray[3] || psarray[4] || psarray[5]) { processes += " ("; var idlist = {0:111,1:112,2:113,3:114,4:115,5:116}; for (var proc_type in idlist) { if (psarray[proc_type]) { if (not_first) { processes += ", "; } processes += psarray[proc_type] + String.fromCharCode(160) + genlang(idlist[proc_type]); not_first = true; } } processes += ")"; } } return processes; } } }; if ((data.Vitals["@attributes"].LoadAvg === '') && (data.Vitals["@attributes"].CPULoad === undefined)) { $("#tr_LoadAvg").hide(); } if (data.Vitals["@attributes"].SysLang === undefined) { $("#tr_SysLang").hide(); } if (data.Vitals["@attributes"].CodePage === undefined) { $("#tr_CodePage").hide(); } if (data.Vitals["@attributes"].Processes === undefined) { $("#tr_Processes").hide(); } $('#vitals').render(data.Vitals["@attributes"], directives); if ((data.Vitals !== undefined) && (data.Vitals["@attributes"] !== undefined) && ((hostname = data.Vitals["@attributes"].Hostname) !== undefined) && ((ip = data.Vitals["@attributes"].IPAddr) !== undefined)) { document.title = "System information: " + hostname + " (" + ip + ")"; } $("#block_vitals").show(); } function renderHardware(data) { var hw_type, datas, proc_param, i; if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('hardware', blocks) < 0))) { $("#block_hardware").remove(); return; } var directives = { Model: { text: function () { return this.Model; } }, CpuSpeed: { html: function () { return formatHertz(this.CpuSpeed); } }, CpuSpeedMax: { html: function () { return formatHertz(this.CpuSpeedMax); } }, CpuSpeedMin: { html: function () { return formatHertz(this.CpuSpeedMin); } }, Cache: { html: function () { return formatBytes(this.Cache, data.Options["@attributes"].byteFormat); } }, BusSpeed: { html: function () { return formatHertz(this.BusSpeed); } }, Cputemp: { html: function () { return formatTemp(this.Cputemp, data.Options["@attributes"].tempFormat); } }, Voltage: { html: function() { return round(this.Voltage, 2) + String.fromCharCode(160) + genlang(62); //V } }, Bogomips: { text: function () { return parseInt(this.Bogomips, 10); } }, Load: { html: function () { return '
    ' + '
    ' + '
    ' + round(this.Load,0) + '%
    '; } } }; var hw_directives = { hwName: { html: function() { return this.Name; } }, hwCount: { text: function() { if ((this.Count !== undefined) && !isNaN(this.Count) && (parseInt(this.Count, 10)>1)) { return parseInt(this.Count, 10); } else { return ""; } } } }; var mem_directives = { Speed: { html: function() { return formatMTps(this.Speed); } }, Voltage: { html: function() { return round(this.Voltage, 2) + String.fromCharCode(160) + genlang(62); //V } }, Capacity: { html: function () { return formatBytes(this.Capacity, data.Options["@attributes"].byteFormat); } } }; var dev_directives = { Speed: { html: function() { return formatBPS(1000000*this.Speed); } }, Capacity: { html: function () { return formatBytes(this.Capacity, data.Options["@attributes"].byteFormat); } } }; var html=""; if (data.Hardware["@attributes"] !== undefined) { if (data.Hardware["@attributes"].Name !== undefined) { html+=""; html+=""+genlang(107)+""; //Machine html+=""; html+=""; } if (data.Hardware["@attributes"].Virtualizer !== undefined) { html+=""; html+=""+genlang(134)+""; //Virtualizer html+=""; html+=""; } } var paramlist = {CpuSpeed:13,CpuSpeedMax:100,CpuSpeedMin:101,Cache:15,Virt:94,BusSpeed:14,Voltage:52,Bogomips:16,Cputemp:51,Manufacturer:122,Load:9}; try { datas = items(data.Hardware.CPU.CpuCore); for (i = 0; i < datas.length; i++) { if (i === 0) { html+=""; html+="CPU"; html+="" + genlang(119) + ":"; //Number of processors html+=""; html+=""; } html+=""; html+=""; if (showCPULoadCompact && (datas[i]["@attributes"].Load !== undefined)) { html+=""; html+=""; } else { html+=""; } html+=""; for (proc_param in paramlist) { if (((proc_param !== 'Load') || !showCPULoadCompact) && (datas[i]["@attributes"][proc_param] !== undefined)) { html+=""; html+=""; html+="" + genlang(paramlist[proc_param]) + ""; html+=""; html+=""; } } } } catch (err) { $("#hardware-CPU").hide(); } var devparamlist = {Capacity:43,Manufacturer:122,Product:123,Speed:129,Voltage:52,Serial:124}; for (hw_type in {MEM:0,PCI:1,IDE:2,SCSI:3,NVMe:4,USB:5,TB:6,I2C:7}) { try { if (hw_type == 'MEM') { datas = items(data.Hardware[hw_type].Chip); } else { datas = items(data.Hardware[hw_type].Device); } for (i = 0; i < datas.length; i++) { if (i === 0) { html+=""; html+="" + hw_type + ""; if (hw_type == 'MEM') { html+="" + genlang('128') + ":"; //Number of memories } else { html+="" + genlang('120') + ":"; //Number of devices } html+=""; html+=""; } html+=""; html+=""; html+=""; html+=""; html+=""; for (proc_param in devparamlist) { if (datas[i]["@attributes"][proc_param] !== undefined) { html+=""; html+=""; html+="" + genlang(devparamlist[proc_param]) + ""; html+=""; html+=""; } } } } catch (err) { $("#hardware-data"+hw_type).hide(); } } $("#hardware-data").empty().append(html); if (data.Hardware["@attributes"] !== undefined) { if (data.Hardware["@attributes"].Name !== undefined) { $('#hardware-Machine').render(data.Hardware["@attributes"]); } if (data.Hardware["@attributes"].Virtualizer !== undefined) { $('#hardware-Virtualizer').render(data.Hardware["@attributes"]); } } try { datas = items(data.Hardware.CPU.CpuCore); for (i = 0; i < datas.length; i++) { $('#hardware-CPU-'+ i).render(datas[i]["@attributes"], directives); for (proc_param in paramlist) { if (((proc_param !== 'Load') || !showCPULoadCompact) && (datas[i]["@attributes"][proc_param] !== undefined)) { $('#hardware-CPU-'+ i +'-'+proc_param).render(datas[i]["@attributes"], directives); } } } if (i > 0) { $("#CPUCount").html(i); } } catch (err) { $("#hardware-CPU").hide(); } var licz; for (hw_type in {MEM:0,PCI:1,IDE:2,SCSI:3,NVMe:4,USB:5,TB:6,I2C:7}) { try { licz = 0; if (hw_type == 'MEM') { datas = items(data.Hardware[hw_type].Chip); } else { datas = items(data.Hardware[hw_type].Device); } for (i = 0; i < datas.length; i++) { $('#hardware-'+hw_type+'-'+ i).render(datas[i]["@attributes"], hw_directives); if ((datas[i]["@attributes"].Count !== undefined) && !isNaN(datas[i]["@attributes"].Count) && (parseInt(datas[i]["@attributes"].Count, 10)>1)) { licz += parseInt(datas[i]["@attributes"].Count, 10); } else { licz++; } if (hw_type == 'MEM') { for (proc_param in devparamlist) { if ((datas[i]["@attributes"][proc_param] !== undefined)) { $('#hardware-'+hw_type+'-'+ i +'-'+proc_param).render(datas[i]["@attributes"], mem_directives); } } } else { for (proc_param in devparamlist) { if ((datas[i]["@attributes"][proc_param] !== undefined)) { $('#hardware-'+hw_type+'-'+ i +'-'+proc_param).render(datas[i]["@attributes"], dev_directives); } } } } if (i > 0) { $("#" + hw_type + "Count").html(licz); } } catch (err) { $("#hardware-"+hw_type).hide(); } } $('#hardware').treegrid({ initialState: 'collapsed', expanderExpandedClass: 'normalicon normalicon-down', expanderCollapsedClass: 'normalicon normalicon-right' }); if (showCPUListExpanded) { try { $('#hardware-CPU').treegrid('expand'); } catch (err) { } } if (showCPUInfoExpanded && showCPUListExpanded) { try { datas = items(data.Hardware.CPU.CpuCore); for (i = 0; i < datas.length; i++) { $('#hardware-CPU-'+i).treegrid('expand'); } } catch (err) { } } $("#block_hardware").show(); } function renderMemory(data) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('memory', blocks) < 0))) { $("#block_memory").remove(); return; } var directives = { Total: { html: function () { return formatBytes(this["@attributes"].Total, data.Options["@attributes"].byteFormat); } }, Free: { html: function () { return formatBytes(this["@attributes"].Free, data.Options["@attributes"].byteFormat); } }, Used: { html: function () { return formatBytes(this["@attributes"].Used, data.Options["@attributes"].byteFormat); } }, Usage: { html: function () { if ((this.Details === undefined) || (this.Details["@attributes"] === undefined)) { return '
    ' + '
    ' + '
    ' + this["@attributes"].Percent + '%
    '; } else { var rest = parseInt(this["@attributes"].Percent, 10); var html = '
    '; if ((this.Details["@attributes"].AppPercent !== undefined) && (this.Details["@attributes"].AppPercent > 0)) { html += '
    '; rest -= parseInt(this.Details["@attributes"].AppPercent, 10); } if ((this.Details["@attributes"].CachedPercent !== undefined) && (this.Details["@attributes"].CachedPercent > 0)) { html += '
    '; rest -= parseInt(this.Details["@attributes"].CachedPercent, 10); } if ((this.Details["@attributes"].BuffersPercent !== undefined) && (this.Details["@attributes"].BuffersPercent > 0)) { html += '
    '; rest -= parseInt(this.Details["@attributes"].BuffersPercent, 10); } if (rest > 0) { html += '
    '; } html += '
    '; html += '
    ' + 'Total: ' + this["@attributes"].Percent + '% ' + '('; var not_first = false; if (this.Details["@attributes"].AppPercent !== undefined) { html += ' ' + genlang(64) + ': '+ this.Details["@attributes"].AppPercent + '%'; //Kernel + apps not_first = true; } if (this.Details["@attributes"].CachedPercent !== undefined) { if (not_first) html += ' - '; html += ' ' + genlang(66) + ': ' + this.Details["@attributes"].CachedPercent + '%'; //Cache not_first = true; } if (this.Details["@attributes"].BuffersPercent !== undefined) { if (not_first) html += ' - '; html += ' ' + genlang(65) + ': ' + this.Details["@attributes"].BuffersPercent + '%'; //Buffers } html += ')
    '; return html; } } }, Type: { html: function () { return genlang(28); //Physical Memory } } }; var directive_swap = { Total: { html: function () { return formatBytes(this.Total, data.Options["@attributes"].byteFormat); } }, Free: { html: function () { return formatBytes(this.Free, data.Options["@attributes"].byteFormat); } }, Used: { html: function () { return formatBytes(this.Used, data.Options["@attributes"].byteFormat); } }, Usage: { html: function () { return '
    ' + '
    ' + '
    ' + this.Percent + '%
    '; } }, Name: { html: function () { return this.Name + '
    ' + ((this.MountPoint !== undefined) ? this.MountPoint : this.MountPointID); } } }; var data_memory = []; if (data.Memory.Swap !== undefined) { var datas = items(data.Memory.Swap.Mount); data_memory.push_attrs(datas); $('#swap-data').render(data_memory, directive_swap); $('#swap-data').show(); } else { $('#swap-data').hide(); } $('#memory-data').render(data.Memory, directives); $("#block_memory").show(); } function renderFilesystem(data) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('filesystem', blocks) < 0))) { $("#block_filesystem").remove(); return; } var directives = { Total: { html: function () { return formatBytes(this.Total, data.Options["@attributes"].byteFormat, (this.Ignore !== undefined) && (this.Ignore > 0) && showtotals); } }, Free: { html: function () { return formatBytes(this.Free, data.Options["@attributes"].byteFormat, (this.Ignore !== undefined) && (this.Ignore > 0) && showtotals); } }, Used: { html: function () { return formatBytes(this.Used, data.Options["@attributes"].byteFormat, (this.Ignore !== undefined) && (this.Ignore >= 3) && showtotals); } }, MountPoint: { text: function () { return ((this.MountPoint !== undefined) ? this.MountPoint : this.MountPointID); } }, Name: { html: function () { return this.Name.replace(/;/g, ";") + ((this.MountOptions !== undefined) ? '
    (' + this.MountOptions + ')' : ''); } }, Percent: { html: function () { var used1 = Math.max(Math.min((this.Total != 0) ? Math.ceil((this.Used / this.Total) * 100) : 0, 100), 0); var used2 = Math.max(Math.min(Math.ceil(this.Percent), 100), 0); var used21= used2 - used1; if (used21 > 0) { return '
    ' + '
    = parseInt(data.Options["@attributes"].threshold, 10))) ) ? 'progress-bar progress-bar-danger' : 'progress-bar progress-bar-info' ) + '" style="width:' + used1 + '% ;">
    ' + '
    ' + '
    ' + this.Percent + '% ' + ((this.Inodes !== undefined) ? '(' + this.Inodes + '%)' : '') + '
    '; } else { return '
    ' + '
    = parseInt(data.Options["@attributes"].threshold, 10))) ) ? 'progress-bar progress-bar-danger' : 'progress-bar progress-bar-info' ) + '" style="width:' + used2 + '% ;">
    ' + '
    ' + '
    ' + this.Percent + '% ' + ((this.Inodes !== undefined) ? '(' + this.Inodes + '%)' : '') + '
    '; } } } }; try { var fs_data = []; var datas = items(data.FileSystem.Mount); var total = {Total:0,Free:0,Used:0}; var showtotals = $("#hideTotals").val().toString()!=="true"; for (var i = 0; i < datas.length; i++) { fs_data.push(datas[i]["@attributes"]); if (showtotals) { if ((datas[i]["@attributes"].Ignore !== undefined) && (datas[i]["@attributes"].Ignore > 0)) { if (datas[i]["@attributes"].Ignore == 2) { total.Used += parseInt(datas[i]["@attributes"].Used, 10); } else if (datas[i]["@attributes"].Ignore == 1) { total.Total += parseInt(datas[i]["@attributes"].Used, 10); total.Used += parseInt(datas[i]["@attributes"].Used, 10); } } else { total.Total += parseInt(datas[i]["@attributes"].Total, 10); total.Free += parseInt(datas[i]["@attributes"].Free, 10); total.Used += parseInt(datas[i]["@attributes"].Used, 10); } total.Percent = (total.Total != 0) ? round(100 - (total.Free / total.Total) * 100, 2) : 0; } } if (i > 0) { $('#filesystem-data').render(fs_data, directives); if (showtotals) { $('#filesystem-foot').render(total, directives); $('#filesystem-foot').show(); } $('#filesystem_MountPoint').removeClass("sorttable_sorted"); //reset sort order // sorttable.innerSortFunction.apply(document.getElementById('filesystem_MountPoint'), []); sorttable.innerSortFunction.apply($('#filesystem_MountPoint')[0], []); $("#block_filesystem").show(); } else { $("#block_filesystem").hide(); } } catch (err) { $("#block_filesystem").hide(); } } function renderNetwork(data) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('network', blocks) < 0))) { $("#block_network").remove(); return; } var directives = { Name: { text: function () { if (this.Bridge !== undefined) { return this.Name + " (" + this.Bridge + ")"; } else { return this.Name; } } }, RxBytes: { html: function () { var htmladd = ''; if (showNetworkActiveSpeed) { if ((this.RxBytes == 0) && (this.RxRate !== undefined)) { if (showNetworkActiveSpeed == 2) { htmladd ="
    ("+formatBPS(round(this.RxRate, 2))+")"; } else { htmladd ="
    ("+formatBytes(round(this.RxRate, 2), data.Options["@attributes"].byteFormat)+"/s)"; } } else if ($.inArray(this.Name, oldnetwork) >= 0) { var diff, difftime; if (((diff = this.RxBytes - oldnetwork[this.Name].RxBytes) > 0) && ((difftime = data.Generation["@attributes"].timestamp - oldnetwork[this.Name].timestamp) > 0)) { if (showNetworkActiveSpeed == 2) { htmladd ="
    ("+formatBPS(round(8*diff/difftime, 2))+")"; } else { htmladd ="
    ("+formatBytes(round(diff/difftime, 2), data.Options["@attributes"].byteFormat)+"/s)"; } } } } return formatBytes(this.RxBytes, data.Options["@attributes"].byteFormat) + htmladd; } }, TxBytes: { html: function () { var htmladd = ''; if (showNetworkActiveSpeed) { if ((this.TxBytes == 0) && (this.TxRate !== undefined)) { if (showNetworkActiveSpeed == 2) { htmladd ="
    ("+formatBPS(round(this.TxRate, 2))+")"; } else { htmladd ="
    ("+formatBytes(round(this.TxRate, 2), data.Options["@attributes"].byteFormat)+"/s)"; } } else if ($.inArray(this.Name, oldnetwork) >= 0) { var diff, difftime; if (((diff = this.TxBytes - oldnetwork[this.Name].TxBytes) > 0) && ((difftime = data.Generation["@attributes"].timestamp - oldnetwork[this.Name].timestamp) > 0)) { if (showNetworkActiveSpeed == 2) { htmladd ="
    ("+formatBPS(round(8*diff/difftime, 2))+")"; } else { htmladd ="
    ("+formatBytes(round(diff/difftime, 2), data.Options["@attributes"].byteFormat)+"/s)"; } } } } return formatBytes(this.TxBytes, data.Options["@attributes"].byteFormat) + htmladd; } }, Drops: { html: function () { return this.Err + "/" + this.Drops; } } }; var html = ""; var preoldnetwork = []; try { var datas = items(data.Network.NetDevice); for (var i = 0; i < datas.length; i++) { html+=""; html+=""; html+=""; html+=""; html+=""; html+=""; var info = datas[i]["@attributes"].Info; if ( (info !== undefined) && (info !== "") ) { var infos = info.replace(/:/g, ":").split(";"); /* split long addresses */ for (var j = 0; j < infos.length; j++){ html +="" + infos[j] + ""; } } } $("#network-data").empty().append(html); if (i > 0) { for (var k = 0; k < datas.length; k++) { $('#network-' + k).render(datas[k]["@attributes"], directives); if (showNetworkActiveSpeed) { preoldnetwork.pushIfNotExist(datas[k]["@attributes"].Name); preoldnetwork[datas[k]["@attributes"].Name] = {timestamp:data.Generation["@attributes"].timestamp, RxBytes:datas[k]["@attributes"].RxBytes, TxBytes:datas[k]["@attributes"].TxBytes}; } } $('#network').treegrid({ initialState: showNetworkInfosExpanded?'expanded':'collapsed', expanderExpandedClass: 'normalicon normalicon-down', expanderCollapsedClass: 'normalicon normalicon-right' }); $("#block_network").show(); } else { $("#block_network").hide(); } } catch (err) { $("#block_network").hide(); } if (showNetworkActiveSpeed) { while (oldnetwork.length > 0) { delete oldnetwork[oldnetwork.length-1]; //remove last object oldnetwork.pop(); //remove last object reference from array } oldnetwork = preoldnetwork; } } function renderVoltage(data) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('voltage', blocks) < 0))) { $("#block_voltage").remove(); return; } var directives = { Value: { text: function () { return (isFinite(this.Value)?round(this.Value,2):"---") + String.fromCharCode(160) + "V"; } }, Min: { text: function () { if (this.Min !== undefined) return round(this.Min,2) + String.fromCharCode(160) + "V"; } }, Max: { text: function () { if (this.Max !== undefined) return round(this.Max,2) + String.fromCharCode(160) + "V"; } }, Label: { html: function () { if (this.Event === undefined) return this.Label; else return this.Label + " \"!\""; } } }; try { var voltage_data = []; var datas = items(data.MBInfo.Voltage.Item); if (voltage_data.push_attrs(datas) > 0) { $('#voltage-data').render(voltage_data, directives); $("#block_voltage").show(); } else { $("#block_voltage").hide(); } } catch (err) { $("#block_voltage").hide(); } } function renderTemperature(data) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('temperature', blocks) < 0))) { $("#block_temperature").remove(); return; } var directives = { Value: { html: function () { return formatTemp(this.Value, data.Options["@attributes"].tempFormat); } }, Max: { html: function () { if (this.Max !== undefined) return formatTemp(this.Max, data.Options["@attributes"].tempFormat); } }, Label: { html: function () { if (this.Event === undefined) return this.Label; else return this.Label + " \"!\""; } } }; try { var temperature_data = []; var datas = items(data.MBInfo.Temperature.Item); if (temperature_data.push_attrs(datas) > 0) { $('#temperature-data').render(temperature_data, directives); $("#block_temperature").show(); } else { $("#block_temperature").hide(); } } catch (err) { $("#block_temperature").hide(); } } function renderFans(data) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('fans', blocks) < 0))) { $("#block_fans").remove(); return; } var directives = { Value: { html: function () { if (this.Unit === "%") { if (isFinite(this.Value)) return '
    ' + '
    ' + '
    ' + round(this.Value,0) + '%
    '; else return '---%'; } else { return (isFinite(this.Value)?round(this.Value,0):"---") + String.fromCharCode(160) + genlang(63); //RPM } } }, Min: { html: function () { if (this.Min !== undefined) { if (this.Unit === "%") { return round(this.Min,0) + "%"; } else { return round(this.Min,0) + String.fromCharCode(160) + genlang(63); //RPM } } } }, Label: { html: function () { if (this.Event === undefined) return this.Label; else return this.Label + " \"!\""; } } }; try { var fans_data = []; var datas = items(data.MBInfo.Fans.Item); if (fans_data.push_attrs(datas) > 0) { $('#fans-data').render(fans_data, directives); $("#block_fans").show(); } else { $("#block_fans").hide(); } } catch (err) { $("#block_fans").hide(); } } function renderPower(data) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('power', blocks) < 0))) { $("#block_power").remove(); return; } var directives = { Value: { text: function () { return (isFinite(this.Value)?round(this.Value,2):"---") + String.fromCharCode(160) + "W"; } }, Max: { text: function () { if (this.Max !== undefined) return round(this.Max,2) + String.fromCharCode(160) + "W"; } }, Label: { html: function () { if (this.Event === undefined) return this.Label; else return this.Label + " \"!\""; } } }; try { var power_data = []; var datas = items(data.MBInfo.Power.Item); if (power_data.push_attrs(datas) > 0) { $('#power-data').render(power_data, directives); $("#block_power").show(); } else { $("#block_power").hide(); } } catch (err) { $("#block_power").hide(); } } function renderCurrent(data) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('current', blocks) < 0))) { $("#block_current").remove(); return; } var directives = { Value: { text: function () { return (isFinite(this.Value)?round(this.Value,2):"---") + String.fromCharCode(160) + "A"; } }, Min: { text: function () { if (this.Min !== undefined) return round(this.Min,2) + String.fromCharCode(160) + "A"; } }, Max: { text: function () { if (this.Max !== undefined) return round(this.Max,2) + String.fromCharCode(160) + "A"; } }, Label: { html: function () { if (this.Event === undefined) return this.Label; else return this.Label + " \"!\""; } } }; try { var current_data = []; var datas = items(data.MBInfo.Current.Item); if (current_data.push_attrs(datas) > 0) { $('#current-data').render(current_data, directives); $("#block_current").show(); } else { $("#block_current").hide(); } } catch (err) { $("#block_current").hide(); } } function renderOther(data) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('other', blocks) < 0))) { $("#block_other").remove(); return; } var directives = { Value: { html: function () { if (this.Unit === "%") { if (isFinite(this.Value)) return '
    ' + '
    ' + '
    ' + round(this.Value,0) + '%
    '; else return '---%'; } else { return this.Value; } } }, Label: { html: function () { if (this.Event === undefined) return this.Label; else return this.Label + " \"!\""; } } }; try { var other_data = []; var datas = items(data.MBInfo.Other.Item); if (other_data.push_attrs(datas) > 0) { $('#other-data').render(other_data, directives); $("#block_other").show(); } else { $("#block_other").hide(); } } catch (err) { $("#block_other").hide(); } } function renderUPS(data) { if ((blocks.length <= 0) || ((blocks[0] !== "true") && ($.inArray('ups', blocks) < 0))) { $("#block_ups").remove(); return; } var i, datas, proc_param; var directives = { Name: { text: function () { return this.Name + ((this.Mode !== undefined) ? " (" + this.Mode + ")" : ""); } }, LineVoltage: { html: function () { return this.LineVoltage + String.fromCharCode(160) + genlang(82); //V } }, LineFrequency: { html: function () { return this.LineFrequency + String.fromCharCode(160) + genlang(109); //Hz } }, BatteryVoltage: { html: function () { return this.BatteryVoltage + String.fromCharCode(160) + genlang(82); //V } }, TimeLeftMinutes: { html: function () { return this.TimeLeftMinutes + String.fromCharCode(160) + genlang(83); //minutes } }, LoadPercent: { html: function () { return '
    ' + '
    ' + '
    ' + round(this.LoadPercent,0) + '%
    '; } }, BatteryChargePercent: { html: function () { return '
    ' + '
    ' + '
    ' + round(this.BatteryChargePercent,0) + '%
    '; } } }; if ((data.UPSInfo !== undefined) && (items(data.UPSInfo.UPS).length > 0)) { var html=""; var paramlist = {Model:70,StartTime:72,Status:73,BeeperStatus:133,Temperature:84,OutagesCount:74,LastOutage:75,LastOutageFinish:76,LineVoltage:77,LineFrequency:108,LoadPercent:78,BatteryDate:104,BatteryVoltage:79,BatteryChargePercent:80,TimeLeftMinutes:81}; try { datas = items(data.UPSInfo.UPS); for (i = 0; i < datas.length; i++) { html+=""; html+=""; html+=""; for (proc_param in paramlist) { if (datas[i]["@attributes"][proc_param] !== undefined) { html+=""; html+="" + genlang(paramlist[proc_param]) + ""; html+=""; html+=""; } } } } catch (err) { } if ((data.UPSInfo["@attributes"] !== undefined) && (data.UPSInfo["@attributes"].ApcupsdCgiLinks === "1")) { html+=""; html+="("+genlang(99)+")"; html+=""; } $("#ups-data").empty().append(html); try { datas = items(data.UPSInfo.UPS); for (i = 0; i < datas.length; i++) { $('#ups-'+ i).render(datas[i]["@attributes"], directives); for (proc_param in paramlist) { if (datas[i]["@attributes"][proc_param] !== undefined) { $('#ups-'+ i +'-'+proc_param).render(datas[i]["@attributes"], directives); } } } } catch (err) { } $('#ups').treegrid({ initialState: 'expanded', expanderExpandedClass: 'normalicon normalicon-down', expanderCollapsedClass: 'normalicon normalicon-right' }); $("#block_ups").show(); } else { $("#block_ups").hide(); } } function renderErrors(data) { try { var datas = items(data.Errors.Error); for (var i = 0; i < datas.length; i++) { $("#errors").append("
  • "+datas[i]["@attributes"].Function+" - "+datas[i]["@attributes"].Message.replace(/\n/g, "
    ")+"

  • "); } if (i > 0) { $("#errorbutton").attr('data-toggle', 'modal'); $("#errorbutton").css('cursor', 'pointer'); $("#errorbutton").css("visibility", "visible"); } } catch (err) { $("#errorbutton").css("visibility", "hidden"); $("#errorbutton").css('cursor', 'default'); $("#errorbutton").attr('data-toggle', ''); } } /** * format seconds to a better readable statement with days, hours and minutes * @param {Number} sec seconds that should be formatted * @return {String} html string with no breaking spaces and translation statemen */ function formatUptime(sec) { var txt = "", intMin = 0, intHours = 0, intDays = 0; intMin = sec / 60; intHours = intMin / 60; intDays = Math.floor(intHours / 24); intHours = Math.floor(intHours - (intDays * 24)); intMin = Math.floor(intMin - (intDays * 60 * 24) - (intHours * 60)); if (intDays) { txt += intDays.toString() + String.fromCharCode(160) + genlang(48) + String.fromCharCode(160); //days } if (intHours) { txt += intHours.toString() + String.fromCharCode(160) + genlang(49) + String.fromCharCode(160); //hours } return txt + intMin.toString() + String.fromCharCode(160) + genlang(50); //Minutes } /** * format a celcius temperature to fahrenheit and also append the right suffix * @param {String} degreeC temperature in celvius * @param {String} temperature format * @return {String} html string with no breaking spaces and translation statements */ function formatTemp(degreeC, tempFormat) { var degree = 0; if (tempFormat === undefined) { tempFormat = "c"; } degree = parseFloat(degreeC); if (isNaN(degreeC)) { return "---"; } else { switch (tempFormat.toLowerCase()) { case "f": return round((((9 * degree) / 5) + 32), 1) + String.fromCharCode(160) + genlang(61); case "c": return round(degree, 1) + String.fromCharCode(160) + genlang(60); case "c-f": return round(degree, 1) + String.fromCharCode(160) + genlang(60) + "
    (" + round((((9 * degree) / 5) + 32), 1) + String.fromCharCode(160) + genlang(61) + ")"; case "f-c": return round((((9 * degree) / 5) + 32), 1) + String.fromCharCode(160) + genlang(61) + "
    (" + round(degree, 1) + String.fromCharCode(160) + genlang(60) + ")"; } } } /** * format a given MHz value to a better readable statement with the right suffix * @param {Number} mhertz mhertz value that should be formatted * @return {String} html string with no breaking spaces and translation statements */ function formatHertz(mhertz) { if ((mhertz >= 0) && (mhertz < 1000)) { return mhertz.toString() + String.fromCharCode(160) + genlang(92); } else { if (mhertz >= 1000) { return round(mhertz / 1000, 2) + String.fromCharCode(160) + genlang(93); } else { return ""; } } } /** * format a given MT/s value to a better readable statement with the right suffix * @param {Number} mtps mtps value that should be formatted * @return {String} html string with no breaking spaces and translation statements */ function formatMTps(mtps) { if ((mtps >= 0) && (mtps < 1000)) { return mtps.toString() + String.fromCharCode(160) + genlang(131); } else { if (mtps >= 1000) { return round(mtps / 1000, 2) + String.fromCharCode(160) + genlang(132); } else { return ""; } } } /** * format the byte values into a user friendly value with the corespondenting unit expression
    support is included * for binary and decimal output
    user can specify a constant format for all byte outputs or the output is formated * automatically so that every value can be read in a user friendly way * @param {Number} bytes value that should be converted in the corespondenting format, which is specified in the phpsysinfo.ini * @param {String} byte format * @param {parenths} if true then add parentheses * @return {String} string of the converted bytes with the translated unit expression */ function formatBytes(bytes, byteFormat, parenths) { var show = ""; if (byteFormat === undefined) { byteFormat = "auto_binary"; } switch (byteFormat.toLowerCase()) { case "pib": show += round(bytes / Math.pow(1024, 5), 2); show += String.fromCharCode(160) + genlang(90); break; case "tib": show += round(bytes / Math.pow(1024, 4), 2); show += String.fromCharCode(160) + genlang(86); break; case "gib": show += round(bytes / Math.pow(1024, 3), 2); show += String.fromCharCode(160) + genlang(87); break; case "mib": show += round(bytes / Math.pow(1024, 2), 2); show += String.fromCharCode(160) + genlang(88); break; case "kib": show += round(bytes / Math.pow(1024, 1), 2); show += String.fromCharCode(160) + genlang(89); break; case "pb": show += round(bytes / Math.pow(1000, 5), 2); show += String.fromCharCode(160) + genlang(91); break; case "tb": show += round(bytes / Math.pow(1000, 4), 2); show += String.fromCharCode(160) + genlang(85); break; case "gb": show += round(bytes / Math.pow(1000, 3), 2); show += String.fromCharCode(160) + genlang(41); break; case "mb": show += round(bytes / Math.pow(1000, 2), 2); show += String.fromCharCode(160) + genlang(40); break; case "kb": show += round(bytes / Math.pow(1000, 1), 2); show += String.fromCharCode(160) + genlang(39); break; case "b": show += bytes; show += String.fromCharCode(160) + genlang(96); break; case "auto_decimal": if (bytes > Math.pow(1000, 5)) { show += round(bytes / Math.pow(1000, 5), 2); show += String.fromCharCode(160) + genlang(91); } else { if (bytes > Math.pow(1000, 4)) { show += round(bytes / Math.pow(1000, 4), 2); show += String.fromCharCode(160) + genlang(85); } else { if (bytes > Math.pow(1000, 3)) { show += round(bytes / Math.pow(1000, 3), 2); show += String.fromCharCode(160) + genlang(41); } else { if (bytes > Math.pow(1000, 2)) { show += round(bytes / Math.pow(1000, 2), 2); show += String.fromCharCode(160) + genlang(40); } else { if (bytes > Math.pow(1000, 1)) { show += round(bytes / Math.pow(1000, 1), 2); show += String.fromCharCode(160) + genlang(39); } else { show += bytes; show += String.fromCharCode(160) + genlang(96); } } } } } break; default: if (bytes > Math.pow(1024, 5)) { show += round(bytes / Math.pow(1024, 5), 2); show += String.fromCharCode(160) + genlang(90); } else { if (bytes > Math.pow(1024, 4)) { show += round(bytes / Math.pow(1024, 4), 2); show += String.fromCharCode(160) + genlang(86); } else { if (bytes > Math.pow(1024, 3)) { show += round(bytes / Math.pow(1024, 3), 2); show += String.fromCharCode(160) + genlang(87); } else { if (bytes > Math.pow(1024, 2)) { show += round(bytes / Math.pow(1024, 2), 2); show += String.fromCharCode(160) + genlang(88); } else { if (bytes > Math.pow(1024, 1)) { show += round(bytes / Math.pow(1024, 1), 2); show += String.fromCharCode(160) + genlang(89); } else { show += bytes; show += String.fromCharCode(160) + genlang(96); } } } } } } if (parenths === true) { show = "(" + show + ")"; } return "" + round(bytes,0) + "." + show; //span for sorting } function formatBPS(bps) { var show = ""; if (bps > Math.pow(1000, 5)) { show += round(bps / Math.pow(1000, 5), 2); show += String.fromCharCode(160) + 'Pb/s'; } else { if (bps > Math.pow(1000, 4)) { show += round(bps / Math.pow(1000, 4), 2); show += String.fromCharCode(160) + 'Tb/s'; } else { if (bps > Math.pow(1000, 3)) { show += round(bps / Math.pow(1000, 3), 2); show += String.fromCharCode(160) + 'Gb/s'; } else { if (bps > Math.pow(1000, 2)) { show += round(bps / Math.pow(1000, 2), 2); show += String.fromCharCode(160) + 'Mb/s'; } else { if (bps > Math.pow(1000, 1)) { show += round(bps / Math.pow(1000, 1), 2); show += String.fromCharCode(160) + 'Kb/s'; } else { show += bps; show += String.fromCharCode(160) + 'b/s'; } } } } } return show; } Array.prototype.pushIfNotExist = function(val) { if (typeof(val) == 'undefined' || val === '') { return; } val = $.trim(val); if ($.inArray(val, this) == -1) { this.push(val); } }; /** * generate a formatted datetime string of the current datetime * @return {String} formatted datetime string */ function datetime() { var date, day = 0, month = 0, year = 0, hour = 0, minute = 0, days = "", months = "", years = "", hours = "", minutes = ""; date = new Date(); day = date.getDate(); month = date.getMonth() + 1; year = date.getFullYear(); hour = date.getHours(); minute = date.getMinutes(); // format values smaller that 10 with a leading 0 days = (day < 10) ? "0" + day.toString() : day.toString(); months = (month < 10) ? "0" + month.toString() : month.toString(); years = (year < 1000) ? year.toString() : year.toString(); minutes = (minute < 10) ? "0" + minute.toString() : minute.toString(); hours = (hour < 10) ? "0" + hour.toString() : hour.toString(); return days + "." + months + "." + years + " - " + hours + ":" + minutes; } /** * round a given value to the specified precision, difference to Math.round() is that there * will be appended Zeros to the end if the precision is not reached (0.1 gets rounded to 0.100 when precision is set to 3) * @param {Number} x value to round * @param {Number} n precision * @return {String} */ function round(x, n) { var e = 0, k = ""; if (n < 0 || n > 14) { return 0; } if (n === 0) { return Math.round(x); } else { e = Math.pow(10, n); k = (Math.round(x * e) / e).toString(); if (k.indexOf('.') === -1) { k += '.'; } k += e.toString().substring(1); return k.substring(0, k.indexOf('.') + n + 1); } } phpsysinfo-3.4.4/js/vendor/000077500000000000000000000000001467431054600156475ustar00rootroot00000000000000phpsysinfo-3.4.4/js/vendor/README000066400000000000000000000040731467431054600165330ustar00rootroot00000000000000versions, links and simple description of used jquery files =========================================================== bootstrap-modal.js --------- VERSION : 4.3.1 URL : https://getbootstrap.com/ DESC : Bootstrap is the most popular HTML, CSS, and JS framework for developing responsive, mobile first projects on the web USED : used for the entire bootstrap userinterface bootstrap-util.js --------- VERSION : 4.3.1 URL : https://getbootstrap.com/ DESC : Bootstrap is the most popular HTML, CSS, and JS framework for developing responsive, mobile first projects on the web USED : used for the entire bootstrap userinterface transparency.js --------- VERSION : 0.10.0 URL : https://leonidas.github.io/transparency/ DESC : Transparency is a minimal template engine for jQuery. It maps JSON objects to DOM elements with zero configuration. Just call .render() USED : used for the entire bootstrap userinterface html5shiv-printshiv.js --------- VERSION : 3.7.3 URL : https://github.com/aFarkas/html5shiv/ DESC : Enabling HTML5 Shiv Script and Print Support on old IE6-9 Browser, Safari 4.x and Firefox 3.x USED : used for the entire bootstrap userinterface console-shim.js --------- VERSION : URL : https://github.com/liamnewmarch/console-shim/ DESC : Shim to make browsers store console messages without Dev Tools open (e.g. IE9) USED : used for the entire bootstrap userinterface sorttable.js --------- VERSION : 2+2014.12.25.12_fix-noinit-noforeach URL : https://www.kryogenix.org/code/browser/sorttable/ DESC : Make all your tables sortable USED : used for the entire bootstrap userinterface bootstrap-ie8.js --------- VERSION : 4.3.100 URL : https://namiltd.github.io/bootstrap-ie/ DESC : Bootstrap 4 compatibility module for IE8 USED : used for the entire bootstrap userinterface on IE8 bootstrap-ie9.js --------- VERSION : 4.3.100 URL : https://namiltd.github.io/bootstrap-ie/ DESC : Bootstrap 4 compatibility module for IE9 USED : used for the entire bootstrap userinterface on IE9 phpsysinfo-3.4.4/js/vendor/bootstrap-ie8.js000066400000000000000000000657071467431054600207240ustar00rootroot00000000000000/* Bootstrap 4 for IE8 - v4.3.100 */ /* https://github.com/namiltd/bootstrap-ie */ // create the nodeType constants if the Node object is not defined if (!window.Node){ var Node = { ELEMENT_NODE : 1, ATTRIBUTE_NODE : 2, TEXT_NODE : 3, CDATA_SECTION_NODE : 4, ENTITY_REFERENCE_NODE : 5, ENTITY_NODE : 6, PROCESSING_INSTRUCTION_NODE : 7, COMMENT_NODE : 8, DOCUMENT_NODE : 9, DOCUMENT_TYPE_NODE : 10, DOCUMENT_FRAGMENT_NODE : 11, NOTATION_NODE : 12 }; } (function() { if (!Object.keys) { Object.keys = function(obj) { if (obj !== Object(obj)) { throw new TypeError('Object.keys called on a non-object'); } var keys = []; for (var i in obj) { if (Object.prototype.hasOwnProperty.call(obj, i)) { keys.push(i); } } return keys; }; } }()); (function() { if (!Object.create) { Object.create = function(proto, props) { if (typeof props !== "undefined") { throw "The multiple-argument version of Object.create is not provided by this browser and cannot be shimmed."; } function ctor() { } ctor.prototype = proto; return new ctor(); }; } }()); (function() { if (!Array.prototype.forEach) { Array.prototype.forEach = function(fn, scope) { for(var i = 0, len = this.length; i < len; ++i) { fn.call(scope, this[i], i, this); } }; } }()); // ES 15.2.3.6 Object.defineProperty ( O, P, Attributes ) // Partial support for most common case - getters, setters, and values (function() { if (!Object.defineProperty || !(function () { try { Object.defineProperty({}, 'x', {}); return true; } catch (e) { return false; } } ())) { var orig = Object.defineProperty; Object.defineProperty = function (o, prop, desc) { // In IE8 try built-in implementation for defining properties on DOM prototypes. if (orig) { try { return orig(o, prop, desc); } catch (e) {} } if (o !== Object(o)) { throw TypeError("Object.defineProperty called on non-object"); } if (Object.prototype.__defineGetter__ && ('get' in desc)) { Object.prototype.__defineGetter__.call(o, prop, desc.get); } if (Object.prototype.__defineSetter__ && ('set' in desc)) { Object.prototype.__defineSetter__.call(o, prop, desc.set); } if ('value' in desc) { o[prop] = desc.value; } return o; }; } }()); (function() { if (!Function.prototype.bind) { Function.prototype.bind = function (oThis) { if (typeof this !== "function") { // closest thing possible to the ECMAScript 5 internal IsCallable function throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); } var aArgs = Array.prototype.slice.call(arguments, 1), fToBind = this, fNOP = function () {}, fBound = function () { return fToBind.apply(this instanceof fNOP && oThis ? this: oThis, aArgs.concat(Array.prototype.slice.call(arguments))); }; fNOP.prototype = this.prototype; fBound.prototype = new fNOP(); return fBound; }; } }()); (function() { if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(elt /*, from*/) { var len = this.length >>> 0; var from = Number(arguments[1]) || 0; from = (from < 0) ? Math.ceil(from) : Math.floor(from); if (from < 0) { from += len; } for (; from < len; from++) { if (from in this && this[from] === elt) { return from; } } return -1; }; } }()); (function() { var _slice = Array.prototype.slice; Array.prototype.slice = function() { if(this instanceof Array) { return _slice.apply(this, arguments); } else { var result = []; var start = (arguments.length >= 1) ? arguments[0] : 0; var end = (arguments.length >= 2) ? arguments[1] : this.length; for(var i=start; i 0) element.setAttribute('class', domTokenList.join(' ')); else element.removeAttribute('class'); } domTokenList.toggle=function(className,force){ if (force!==undefined){ if (force) domTokenList.add(className); else domTokenList.remove(className); } else { if (domTokenList.indexOf(className)!==-1) domTokenList.splice(domTokenList.indexOf(className),1); else domTokenList.push(className); } setClass(); }; domTokenList.add=function(){ var args=[].slice.call(arguments); for (var i=0,l=args.length;i #mq-test-1 { width: 42px; }'; docElem.insertBefore(fakeBody, refNode); bool = div.offsetWidth === 42; docElem.removeChild(fakeBody); return { matches: bool, media: q }; }; }(w.document); })(this); /* Respond.js: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs */ (function (w) { "use strict"; //exposed namespace var respond = {}; w.respond = respond; //define update even in native-mq-supporting browsers, to avoid errors respond.update = function () { }; //define ajax obj var requestQueue = [], xmlHttp = function () { var xmlhttpmethod = false; try { xmlhttpmethod = new w.XMLHttpRequest(); } catch (e) { xmlhttpmethod = new w.ActiveXObject("Microsoft.XMLHTTP"); } return function () { return xmlhttpmethod; }; }(), //tweaked Ajax functions from Quirksmode ajax = function (url, callback) { var req = xmlHttp(); if (!req) { return; } try { req.open("GET", url, true); req.onreadystatechange = function () { if (req.readyState !== 4 || req.status !== 200 && req.status !== 304) { return; } callback( remPolyfill.replaceCSS(req.responseText) ); }; if (req.readyState === 4) { return; } req.send(null); } catch ( e ) { } }, isUnsupportedMediaQuery = function (query) { return query.replace(respond.regex.minmaxwh, '').match(respond.regex.other); }; //expose for testing respond.ajax = ajax; respond.queue = requestQueue; respond.unsupportedmq = isUnsupportedMediaQuery; respond.regex = { media: /@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi, keyframes: /@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi, comments: /\/\*[^*]*\*+([^/][^*]*\*+)*\//gi, urls: /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g, findStyles: /@media *([^\{]+)\{([\S\s]+?)$/, only: /(only\s+)?([a-zA-Z]+)\s?/, minw: /\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/, maxw: /\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/, minmaxwh: /\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi, other: /\([^\)]*\)/g }; //expose media query support flag for external use respond.mediaQueriesSupported = w.matchMedia && w.matchMedia("only all") !== null && w.matchMedia("only all").matches; //if media queries are supported, exit here if (respond.mediaQueriesSupported) { return; } respond.callbackQueue = []; respond.addCallBackWhenReady = function (callback) { respond.callbackQueue.push(callback); }; respond.callback = function () { if (respond.callbackQueue.length) { for (var callback in respond.callbackQueue) { respond.callbackQueue[callback](); } } }; //define vars var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName("head")[0] || docElem, base = doc.getElementsByTagName("base")[0], links = head.getElementsByTagName("link"), lastCall, resizeDefer, //cached container for 1em value, populated the first time it's needed eminpx, // returns the value of 1em in pixels getEmValue = function () { var ret, div = doc.createElement('div'), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false; div.style.cssText = "position:absolute;font-size:1em;width:1em"; if (!body) { body = fakeUsed = doc.createElement("body"); body.style.background = "none"; } // 1em in a media query is the value of the default font size of the browser // reset docElem and body to ensure the correct value is returned docElem.style.fontSize = "100%"; body.style.fontSize = "100%"; body.appendChild(div); if (fakeUsed) { docElem.insertBefore(body, docElem.firstChild); } ret = div.offsetWidth; if (fakeUsed) { docElem.removeChild(body); } else { body.removeChild(div); } // restore the original values docElem.style.fontSize = originalHTMLFontSize; if (originalBodyFontSize) { body.style.fontSize = originalBodyFontSize; } //also update eminpx before returning ret = eminpx = parseFloat(ret); return ret; }, //enable/disable styles applyMedia = function (fromResize) { var name = "clientWidth", docElemProp = docElem[name], currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime(); //throttle resize calls if (fromResize && lastCall && now - lastCall < resizeThrottle) { w.clearTimeout(resizeDefer); resizeDefer = w.setTimeout(applyMedia, resizeThrottle); return; } else { lastCall = now; } for (var i in mediastyles) { if (mediastyles.hasOwnProperty(i)) { var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = "em"; if (!!min) { min = parseFloat(min) * (min.indexOf(em) > -1 ? ( eminpx || getEmValue() ) : 1); } if (!!max) { max = parseFloat(max) * (max.indexOf(em) > -1 ? ( eminpx || getEmValue() ) : 1); } // if there's no media query at all (the () part), or min or max is not null, and if either is present, they're true if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) { if (!styleBlocks[thisstyle.media]) { styleBlocks[thisstyle.media] = []; } styleBlocks[thisstyle.media].push(rules[thisstyle.rules]); } } } //remove any existing respond style element(s) for (var j in appendedEls) { if (appendedEls.hasOwnProperty(j)) { if (appendedEls[j] && appendedEls[j].parentNode === head) { head.removeChild(appendedEls[j]); } } } appendedEls.length = 0; //inject active styles, grouped by media type for (var k in styleBlocks) { if (styleBlocks.hasOwnProperty(k)) { var ss = doc.createElement("style"), css = styleBlocks[k].join("\n"); ss.type = "text/css"; ss.media = k; //originally, ss was appended to a documentFragment and sheets were appended in bulk. //this caused crashes in IE in a number of circumstances, such as when the HTML element had a bg image set, so appending beforehand seems best. Thanks to @dvelyk for the initial research on this one! head.insertBefore(ss, lastLink.nextSibling); if (ss.styleSheet) { ss.styleSheet.cssText = css; } else { ss.appendChild(doc.createTextNode(css)); } //push to appendedEls to track for later removal appendedEls.push(ss); } } }, //find media blocks in css text, convert to style blocks translate = function (styles, href, media) { var qs = styles.replace(respond.regex.comments, "") .replace(respond.regex.keyframes, "") .match(respond.regex.media), ql = qs && qs.length || 0; //try to get CSS path href = href.substring(0, href.lastIndexOf("/")); var repUrls = function (css) { return css.replace(respond.regex.urls, "$1" + href + "$2$3"); }, useMedia = !ql && media; //if path exists, tack on trailing slash if (href.length) { href += "/"; } //if no internal queries exist, but media attr does, use that //note: this currently lacks support for situations where a media attr is specified on a link AND //its associated stylesheet has internal CSS media queries. //In those cases, the media attribute will currently be ignored. if (useMedia) { ql = 1; } for (var i = 0; i < ql; i++) { var fullq, thisq, eachq, eql; //media attr if (useMedia) { fullq = media; rules.push(repUrls(styles)); //parse for styles } else { fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1; rules.push(RegExp.$2 && repUrls(RegExp.$2)); } eachq = fullq.split(","); eql = eachq.length; for (var j = 0; j < eql; j++) { thisq = eachq[j]; if (isUnsupportedMediaQuery(thisq)) { continue; } mediastyles.push({ media: thisq.split("(")[0].match(respond.regex.only) && RegExp.$2 || "all", rules: rules.length - 1, hasquery: thisq.indexOf("(") > -1, minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || ""), maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || "") }); } } applyMedia(); }, //recurse through request queue, get css text makeRequests = function () { if (requestQueue.length) { var thisRequest = requestQueue.shift(); ajax(thisRequest.href, function (styles) { translate(styles, thisRequest.href, thisRequest.media); parsedSheets[thisRequest.href] = true; // by wrapping recursive function call in setTimeout // we prevent "Stack overflow" error in IE7 w.setTimeout(function () { makeRequests(); }, 0); }); } else { respond.callback(); } }, //loop stylesheets, send text content to translate ripCSS = function () { for (var i = 0; i < links.length; i++) { var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet"; //only links plz and prevent re-parsing if (!!href && isCSS && !parsedSheets[href]) { // selectivizr exposes css through the rawCssText expando if (sheet.styleSheet && sheet.styleSheet.rawCssText) { translate(sheet.styleSheet.rawCssText, href, media); parsedSheets[href] = true; } else { if (!/^([a-zA-Z:]*\/\/)/.test(href) && !base || href.replace(RegExp.$1, "").split("/")[0] === w.location.host) { // IE7 doesn't handle urls that start with '//' for ajax request // manually add in the protocol if (href.substring(0, 2) === "//") { href = w.location.protocol + href; } requestQueue.push({ href: href, media: media }); } } } } makeRequests(); }; //translate CSS ripCSS(); //expose update for re-running respond later on respond.update = ripCSS; //expose getEmValue respond.getEmValue = getEmValue; //adjust on resize function callMedia() { applyMedia(true); } if (w.addEventListener) { w.addEventListener("resize", callMedia, false); } else if (w.attachEvent) { w.attachEvent("onresize", callMedia); } })(this); phpsysinfo-3.4.4/js/vendor/bootstrap-ie9.js000066400000000000000000000104771467431054600207170ustar00rootroot00000000000000/* Bootstrap 4 for IE9 - v4.3.100 */ /* https://github.com/namiltd/bootstrap-ie */ /** * Modified code based on remPolyfill.js (c) Nicolas Bouvrette https://github.com/nbouvrette/remPolyfill * * Customizations: * * 1) Added new method `addCallBackWhenReady` to perform callbacks once the polyfill has been applied (especially useful for * onload scrolling events. * 2) Added REM support. * **/ // adds classList support (as Array) to Element.prototype for IE8-9 (function() { Object.defineProperty(Element.prototype, 'classList', { get:function(){ var element=this,domTokenList=(element.getAttribute('class')||'').replace(/^\s+|\s$/g,'').split(/\s+/g); if (domTokenList[0]==='') domTokenList.splice(0,1); function setClass(){ if (domTokenList.length > 0) element.setAttribute('class', domTokenList.join(' ')); else element.removeAttribute('class'); } domTokenList.toggle=function(className,force){ if (force!==undefined){ if (force) domTokenList.add(className); else domTokenList.remove(className); } else { if (domTokenList.indexOf(className)!==-1) domTokenList.splice(domTokenList.indexOf(className),1); else domTokenList.push(className); } setClass(); }; domTokenList.add=function(){ var args=[].slice.call(arguments); for (var i=0,l=args.length;i document.documentElement.clientHeight; if (!this._isBodyOverflowing && isModalOverflowing) { this._element.style.paddingLeft = this._scrollbarWidth + "px"; } if (this._isBodyOverflowing && !isModalOverflowing) { this._element.style.paddingRight = this._scrollbarWidth + "px"; } }; _proto._resetAdjustments = function _resetAdjustments() { this._element.style.paddingLeft = ''; this._element.style.paddingRight = ''; }; _proto._checkScrollbar = function _checkScrollbar() { var rect = document.body.getBoundingClientRect(); this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; this._scrollbarWidth = this._getScrollbarWidth(); }; _proto._setScrollbar = function _setScrollbar() { var _this9 = this; if (this._isBodyOverflowing) { // Note: DOMNode.style.paddingRight returns the actual value or '' if not set // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)); var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding $(fixedContent).each(function (index, element) { var actualPadding = element.style.paddingRight; var calculatedPadding = $(element).css('padding-right'); $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); }); // Adjust sticky content margin $(stickyContent).each(function (index, element) { var actualMargin = element.style.marginRight; var calculatedMargin = $(element).css('margin-right'); $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); }); // Adjust body padding var actualPadding = document.body.style.paddingRight; var calculatedPadding = $(document.body).css('padding-right'); $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); } $(document.body).addClass(ClassName.OPEN); }; _proto._resetScrollbar = function _resetScrollbar() { // Restore fixed content padding var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)); $(fixedContent).each(function (index, element) { var padding = $(element).data('padding-right'); $(element).removeData('padding-right'); element.style.paddingRight = padding ? padding : ''; }); // Restore sticky content var elements = [].slice.call(document.querySelectorAll("" + Selector.STICKY_CONTENT)); $(elements).each(function (index, element) { var margin = $(element).data('margin-right'); if (typeof margin !== 'undefined') { $(element).css('margin-right', margin).removeData('margin-right'); } }); // Restore body padding var padding = $(document.body).data('padding-right'); $(document.body).removeData('padding-right'); document.body.style.paddingRight = padding ? padding : ''; }; _proto._getScrollbarWidth = function _getScrollbarWidth() { // thx d.walsh var scrollDiv = document.createElement('div'); scrollDiv.className = ClassName.SCROLLBAR_MEASURER; document.body.appendChild(scrollDiv); var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; document.body.removeChild(scrollDiv); return scrollbarWidth; } // Static ; Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { return this.each(function () { var data = $(this).data(DATA_KEY); var _config = _objectSpread({}, Default, $(this).data(), typeof config === 'object' && config ? config : {}); if (!data) { data = new Modal(this, _config); $(this).data(DATA_KEY, data); } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError("No method named \"" + config + "\""); } data[config](relatedTarget); } else if (_config.show) { data.show(relatedTarget); } }); }; _createClass(Modal, null, [{ key: "VERSION", get: function get() { return VERSION; } }, { key: "Default", get: function get() { return Default; } }]); return Modal; }(); /** * ------------------------------------------------------------------------ * Data Api implementation * ------------------------------------------------------------------------ */ $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { var _this10 = this; var target; var selector = Util.getSelectorFromElement(this); if (selector) { target = document.querySelector(selector); } var config = $(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data()); if (this.tagName === 'A' || this.tagName === 'AREA') { event.preventDefault(); } var $target = $(target).one(Event.SHOW, function (showEvent) { if (showEvent.isDefaultPrevented()) { // Only register focus restorer if modal will actually get shown return; } $target.one(Event.HIDDEN, function () { if ($(_this10).is(':visible')) { _this10.focus(); } }); }); Modal._jQueryInterface.call($(target), config, this); }); /** * ------------------------------------------------------------------------ * jQuery * ------------------------------------------------------------------------ */ $.fn[NAME] = Modal._jQueryInterface; $.fn[NAME].Constructor = Modal; $.fn[NAME].noConflict = function () { $.fn[NAME] = JQUERY_NO_CONFLICT; return Modal._jQueryInterface; }; return Modal; })); phpsysinfo-3.4.4/js/vendor/bootstrap-util.js000066400000000000000000000133141467431054600211770ustar00rootroot00000000000000/*! * Bootstrap util.js v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) : typeof define === 'function' && define.amd ? define(['jquery'], factory) : (global = global || self, global.Util = factory(global.jQuery)); }(this, function ($) { 'use strict'; $ = $ && $.hasOwnProperty('default') ? $['default'] : $; /** * -------------------------------------------------------------------------- * Bootstrap (v4.3.1): util.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * -------------------------------------------------------------------------- */ /** * ------------------------------------------------------------------------ * Private TransitionEnd Helpers * ------------------------------------------------------------------------ */ var TRANSITION_END = 'transitionend'; var MAX_UID = 1000000; var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) function toType(obj) { return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); } function getSpecialTransitionEndEvent() { return { bindType: TRANSITION_END, delegateType: TRANSITION_END, handle: function handle(event) { if ($(event.target).is(this)) { return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params } return undefined; // eslint-disable-line no-undefined } }; } function transitionEndEmulator(duration) { var _this = this; var called = false; $(this).one(Util.TRANSITION_END, function () { called = true; }); setTimeout(function () { if (!called) { Util.triggerTransitionEnd(_this); } }, duration); return this; } function setTransitionEndSupport() { $.fn.emulateTransitionEnd = transitionEndEmulator; $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); } /** * -------------------------------------------------------------------------- * Public Util Api * -------------------------------------------------------------------------- */ var Util = { TRANSITION_END: 'bsTransitionEnd', getUID: function getUID(prefix) { do { // eslint-disable-next-line no-bitwise prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here } while (document.getElementById(prefix)); return prefix; }, getSelectorFromElement: function getSelectorFromElement(element) { var selector = element.getAttribute('data-target'); if (!selector || selector === '#') { var hrefAttr = element.getAttribute('href'); selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; } try { return document.querySelector(selector) ? selector : null; } catch (err) { return null; } }, getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { if (!element) { return 0; } // Get transition-duration of the element var transitionDuration = $(element).css('transition-duration'); var transitionDelay = $(element).css('transition-delay'); var floatTransitionDuration = parseFloat(transitionDuration); var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found if (!floatTransitionDuration && !floatTransitionDelay) { return 0; } // If multiple durations are defined, take the first transitionDuration = transitionDuration.split(',')[0]; transitionDelay = transitionDelay.split(',')[0]; return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; }, reflow: function reflow(element) { return element.offsetHeight; }, triggerTransitionEnd: function triggerTransitionEnd(element) { $(element).trigger(TRANSITION_END); }, // TODO: Remove in v5 supportsTransitionEnd: function supportsTransitionEnd() { return Boolean(TRANSITION_END); }, isElement: function isElement(obj) { return (obj[0] || obj).nodeType; }, typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { for (var property in configTypes) { if (Object.prototype.hasOwnProperty.call(configTypes, property)) { var expectedTypes = configTypes[property]; var value = config[property]; var valueType = value && Util.isElement(value) ? 'element' : toType(value); if (!new RegExp(expectedTypes).test(valueType)) { throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); } } } }, findShadowRoot: function findShadowRoot(element) { if (!document.documentElement.attachShadow) { return null; } // Can find the shadow root otherwise it'll return the document if (typeof element.getRootNode === 'function') { var root = element.getRootNode(); return root instanceof ShadowRoot ? root : null; } if (element instanceof ShadowRoot) { return element; } // when we don't find a shadow root if (!element.parentNode) { return null; } return Util.findShadowRoot(element.parentNode); } }; setTransitionEndSupport(); return Util; })); phpsysinfo-3.4.4/js/vendor/console-shim.js000066400000000000000000000022351467431054600206070ustar00rootroot00000000000000/* https://github.com/liamnewmarch/console-shim 2014 CC-BY @liamnewmarch */ if (!('console' in window)) { (function() { var Console, __console; Console = function() { var check, key, log, methods, _i, _len, _ref; this.__buffer = []; log = function() { return this.__buffer.push(arguments); }; methods = 'assert count debug dir dirxml error exception info log trace warn'; _ref = methods.split(' '); for (_i = 0, _len = _ref.length; _i < _len; _i++) { key = _ref[_i]; this[key] = log; } check = setInterval(function() { var data, func, _j, _len1, _ref1, _ref2; if ((((_ref1 = window.console) != null ? _ref1.log : void 0) != null) && !console.__buffer) { clearInterval(check); func = Function.prototype.bind ? Function.prototype.bind.call(console.log, console) : console.log; _ref2 = __console.__buffer; for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { data = _ref2[_j]; func.apply(console, data); } } }, 1000); }; return __console = window.console = new Console(); })(); } phpsysinfo-3.4.4/js/vendor/html5shiv-printshiv.js000066400000000000000000000376141467431054600221670ustar00rootroot00000000000000/** * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed */ ;(function(window, document) { /*jshint evil:true */ /** version */ var version = '3.7.3'; /** Preset options */ var options = window.html5 || {}; /** Used to skip problem elements */ var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i; /** Not all elements can be cloned in IE **/ var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i; /** Detect whether the browser supports default html5 styles */ var supportsHtml5Styles; /** Name of the expando, to work with multiple documents or to re-shiv one document */ var expando = '_html5shiv'; /** The id for the the documents expando */ var expanID = 0; /** Cached data for each document */ var expandoData = {}; /** Detect whether the browser supports unknown elements */ var supportsUnknownElements; (function() { try { var a = document.createElement('a'); a.innerHTML = ''; //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles supportsHtml5Styles = ('hidden' in a); supportsUnknownElements = a.childNodes.length == 1 || (function() { // assign a false positive if unable to shiv (document.createElement)('a'); var frag = document.createDocumentFragment(); return ( typeof frag.cloneNode == 'undefined' || typeof frag.createDocumentFragment == 'undefined' || typeof frag.createElement == 'undefined' ); }()); } catch(e) { // assign a false positive if detection fails => unable to shiv supportsHtml5Styles = true; supportsUnknownElements = true; } }()); /*--------------------------------------------------------------------------*/ /** * Creates a style sheet with the given CSS text and adds it to the document. * @private * @param {Document} ownerDocument The document. * @param {String} cssText The CSS text. * @returns {StyleSheet} The style element. */ function addStyleSheet(ownerDocument, cssText) { var p = ownerDocument.createElement('p'), parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement; p.innerHTML = 'x'; return parent.insertBefore(p.lastChild, parent.firstChild); } /** * Returns the value of `html5.elements` as an array. * @private * @returns {Array} An array of shived element node names. */ function getElements() { var elements = html5.elements; return typeof elements == 'string' ? elements.split(' ') : elements; } /** * Extends the built-in list of html5 elements * @memberOf html5 * @param {String|Array} newElements whitespace separated list or array of new element names to shiv * @param {Document} ownerDocument The context document. */ function addElements(newElements, ownerDocument) { var elements = html5.elements; if(typeof elements != 'string'){ elements = elements.join(' '); } if(typeof newElements != 'string'){ newElements = newElements.join(' '); } html5.elements = elements +' '+ newElements; shivDocument(ownerDocument); } /** * Returns the data associated to the given document * @private * @param {Document} ownerDocument The document. * @returns {Object} An object of data. */ function getExpandoData(ownerDocument) { var data = expandoData[ownerDocument[expando]]; if (!data) { data = {}; expanID++; ownerDocument[expando] = expanID; expandoData[expanID] = data; } return data; } /** * returns a shived element for the given nodeName and document * @memberOf html5 * @param {String} nodeName name of the element * @param {Document} ownerDocument The context document. * @returns {Object} The shived element. */ function createElement(nodeName, ownerDocument, data){ if (!ownerDocument) { ownerDocument = document; } if(supportsUnknownElements){ return ownerDocument.createElement(nodeName); } if (!data) { data = getExpandoData(ownerDocument); } var node; if (data.cache[nodeName]) { node = data.cache[nodeName].cloneNode(); } else if (saveClones.test(nodeName)) { node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode(); } else { node = data.createElem(nodeName); } // Avoid adding some elements to fragments in IE < 9 because // * Attributes like `name` or `type` cannot be set/changed once an element // is inserted into a document/fragment // * Link elements with `src` attributes that are inaccessible, as with // a 403 response, will cause the tab/window to crash // * Script elements appended to fragments will execute when their `src` // or `text` property is set return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node; } /** * returns a shived DocumentFragment for the given document * @memberOf html5 * @param {Document} ownerDocument The context document. * @returns {Object} The shived DocumentFragment. */ function createDocumentFragment(ownerDocument, data){ if (!ownerDocument) { ownerDocument = document; } if(supportsUnknownElements){ return ownerDocument.createDocumentFragment(); } data = data || getExpandoData(ownerDocument); var clone = data.frag.cloneNode(), i = 0, elems = getElements(), l = elems.length; for(;i+~])(' + getElements().join('|') + ')(?=[[\\s,>+~#.:]|$)', 'gi'), replacement = '$1' + shivNamespace + '\\:$2'; while (index--) { pair = parts[index] = parts[index].split('}'); pair[pair.length - 1] = pair[pair.length - 1].replace(reElements, replacement); parts[index] = pair.join('}'); } return parts.join('{'); } /** * Removes the given wrappers, leaving the original elements. * @private * @params {Array} wrappers An array of printable wrappers. */ function removeWrappers(wrappers) { var index = wrappers.length; while (index--) { wrappers[index].removeNode(); } } /*--------------------------------------------------------------------------*/ /** * Shivs the given document for print. * @memberOf html5 * @param {Document} ownerDocument The document to shiv. * @returns {Document} The shived document. */ function shivPrint(ownerDocument) { var shivedSheet, wrappers, data = getExpandoData(ownerDocument), namespaces = ownerDocument.namespaces, ownerWindow = ownerDocument.parentWindow; if (!supportsShivableSheets || ownerDocument.printShived) { return ownerDocument; } if (typeof namespaces[shivNamespace] == 'undefined') { namespaces.add(shivNamespace); } function removeSheet() { clearTimeout(data._removeSheetTimer); if (shivedSheet) { shivedSheet.removeNode(true); } shivedSheet= null; } ownerWindow.attachEvent('onbeforeprint', function() { removeSheet(); var imports, length, sheet, collection = ownerDocument.styleSheets, cssText = [], index = collection.length, sheets = Array(index); // convert styleSheets collection to an array while (index--) { sheets[index] = collection[index]; } // concat all style sheet CSS text while ((sheet = sheets.pop())) { // IE does not enforce a same origin policy for external style sheets... // but has trouble with some dynamically created stylesheets if (!sheet.disabled && reMedia.test(sheet.media)) { try { imports = sheet.imports; length = imports.length; } catch(er){ length = 0; } for (index = 0; index < length; index++) { sheets.push(imports[index]); } try { cssText.push(sheet.cssText); } catch(er){} } } // wrap all HTML5 elements with printable elements and add the shived style sheet cssText = shivCssText(cssText.reverse().join('')); wrappers = addWrappers(ownerDocument); shivedSheet = addStyleSheet(ownerDocument, cssText); }); ownerWindow.attachEvent('onafterprint', function() { // remove wrappers, leaving the original elements, and remove the shived style sheet removeWrappers(wrappers); clearTimeout(data._removeSheetTimer); data._removeSheetTimer = setTimeout(removeSheet, 500); }); ownerDocument.printShived = true; return ownerDocument; } /*--------------------------------------------------------------------------*/ // expose API html5.type += ' print'; html5.shivPrint = shivPrint; // shiv for print shivPrint(document); if(typeof module == 'object' && module.exports){ module.exports = html5; } }(typeof window !== "undefined" ? window : this, document)); phpsysinfo-3.4.4/js/vendor/sorttable.js000066400000000000000000000351501467431054600202100ustar00rootroot00000000000000/* SortTable version 2+2014.12.25_fix-noinit-noforeach 7th April 2007 Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/ 25th December 2014 Fixed behavior of multiple sortable tables in same page. Redefinition of sortfwdind and sortrevind icons. Mieczyslaw Nalewaj (namiltd@users.sourceforge.net) 19th November 2015 Disabled autostart after loading. You have to run sorttable.init() at the beginning of the code, or makeSortable for each table. Mieczyslaw Nalewaj (namiltd@users.sourceforge.net) Instructions: Download this file Add to your HTML Add class="sortable" to any table you'd like to make sortable Click on the headers to sort Thanks to many, many people for contributions and suggestions. Licenced as X11: http://www.kryogenix.org/code/browser/licence.html This basically means: do what you want with it. */ sorttable = { init: function() { // quit if this function has already been called if (arguments.callee.done) return; // flag this function so we don't do the same thing twice arguments.callee.done = true; if (!document.createElement || !document.getElementsByTagName) return; sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/; allTables=document.getElementsByTagName('table'); for (var i=0; i < allTables.length; i++) { if (allTables[i].className.search(/\bsortable\b/) != -1) { sorttable.makeSortable(allTables[i]); } } }, makeSortable: function(table) { if (table.getElementsByTagName('thead').length == 0) { // table doesn't have a tHead. Since it should have, create one and // put the first table row in it. the = document.createElement('thead'); the.appendChild(table.rows[0]); table.insertBefore(the,table.firstChild); } // Safari doesn't support table.tHead, sigh if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0]; if (table.tHead.rows.length != 1) return; // can't cope with two header rows // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as // "total" rows, for example). This is B&R, since what you're supposed // to do is put them in a tfoot. So, if there are sortbottom rows, // for backwards compatibility, move them to tfoot (creating it if needed). sortbottomrows = []; for (var i=0; i 12) { // definitely dd/mm return sorttable.sort_ddmm; } else if (second > 12) { return sorttable.sort_mmdd; } else { // looks like a date, but we can't tell which, so assume // that it's dd/mm (English imperialism!) and keep looking sortfn = sorttable.sort_ddmm; } } } } return sortfn; }, getInnerText: function(node) { // gets the text we want to use for sorting for a cell. // strips leading and trailing whitespace. // this is *not* a generic getInnerText function; it's special to sorttable. // for example, you can override the cell text with a customkey attribute. // it also gets .value for fields. if (!node) return ""; hasInputs = (typeof node.getElementsByTagName == 'function') && node.getElementsByTagName('input').length; if (node.getAttribute("sorttable_customkey") != null) { return node.getAttribute("sorttable_customkey"); } else if (typeof node.textContent != 'undefined' && !hasInputs) { return node.textContent.replace(/^\s+|\s+$/g, ''); } else if (typeof node.innerText != 'undefined' && !hasInputs) { return node.innerText.replace(/^\s+|\s+$/g, ''); } else if (typeof node.text != 'undefined' && !hasInputs) { return node.text.replace(/^\s+|\s+$/g, ''); } else { switch (node.nodeType) { case 3: if (node.nodeName.toLowerCase() == 'input') { return node.value.replace(/^\s+|\s+$/g, ''); } case 4: return node.nodeValue.replace(/^\s+|\s+$/g, ''); break; case 1: case 11: var innerText = ''; for (var i = 0; i < node.childNodes.length; i++) { innerText += sorttable.getInnerText(node.childNodes[i]); } return innerText.replace(/^\s+|\s+$/g, ''); break; default: return ''; } } }, reverse: function(tbody) { // reverse the rows in a tbody newrows = []; for (var i=0; i=0; i--) { tbody.appendChild(newrows[i]); } delete newrows; }, /* sort functions each sort function takes two parameters, a and b you are comparing a[0] and b[0] */ sort_numeric: function(a,b) { aa = parseFloat(a[0].replace(/[^0-9.-]/g,'')); if (isNaN(aa)) aa = 0; bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); if (isNaN(bb)) bb = 0; return aa-bb; }, sort_alpha: function(a,b) { if (a[0]==b[0]) return 0; if (a[0] 0 ) { var q = list[i]; list[i] = list[i+1]; list[i+1] = q; swap = true; } } // for t--; if (!swap) break; for(var i = t; i > b; --i) { if ( comp_func(list[i], list[i-1]) < 0 ) { var q = list[i]; list[i] = list[i-1]; list[i-1] = q; swap = true; } } // for b++; } // while(swap) } }; // written by Dean Edwards, 2005 // with input from Tino Zijdel, Matthias Miller, Diego Perini // http://dean.edwards.name/weblog/2005/10/add-event/ function dean_addEvent(element, type, handler) { if (element.addEventListener) { element.addEventListener(type, handler, false); } else { // assign each event handler a unique ID if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++; // create a hash table of event types for the element if (!element.events) element.events = {}; // create a hash table of event handlers for each element/event pair var handlers = element.events[type]; if (!handlers) { handlers = element.events[type] = {}; // store the existing event handler (if there is one) if (element["on" + type]) { handlers[0] = element["on" + type]; } } // store the event handler in the hash table handlers[handler.$$guid] = handler; // assign a global event handler to do all the work element["on" + type] = handleEvent; } }; // a counter used to create unique IDs dean_addEvent.guid = 1; function removeEvent(element, type, handler) { if (element.removeEventListener) { element.removeEventListener(type, handler, false); } else { // delete the event handler from the hash table if (element.events && element.events[type]) { delete element.events[type][handler.$$guid]; } } }; function handleEvent(event) { var returnValue = true; // grab the event object (IE uses a global event object) event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event); // get a reference to the hash table of event handlers var handlers = this.events[event.type]; // execute each event handler for (var i in handlers) { this.$$handleEvent = handlers[i]; if (this.$$handleEvent(event) === false) { returnValue = false; } } return returnValue; }; function fixEvent(event) { // add W3C standard event methods event.preventDefault = fixEvent.preventDefault; event.stopPropagation = fixEvent.stopPropagation; return event; }; fixEvent.preventDefault = function() { this.returnValue = false; }; fixEvent.stopPropagation = function() { this.cancelBubble = true; }; phpsysinfo-3.4.4/js/vendor/transparency.js000066400000000000000000000540511467431054600207230ustar00rootroot00000000000000/* ======================================================================== * transparency.js v0.10.0 * http://leonidas.github.io/transparency/ * Licensed under MIT (https://github.com/leonidas/transparency/blob/master/LICENSE) * ======================================================================== */ (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 0 || element.el.name === key || element.el.getAttribute('data-bind') === key; }; Transparency.clone = function(node) { return $(node).clone()[0]; }; Transparency.jQueryPlugin = helpers.chainable(function(models, directives, options) { var context, _i, _len, _results; _results = []; for (_i = 0, _len = this.length; _i < _len; _i++) { context = this[_i]; _results.push(Transparency.render(context, models, directives, options)); } return _results; }); if ((typeof jQuery !== "undefined" && jQuery !== null) || (typeof Zepto !== "undefined" && Zepto !== null)) { $ = jQuery || Zepto; if ($ != null) { $.fn.render = Transparency.jQueryPlugin; } } if (typeof module !== "undefined" && module !== null ? module.exports : void 0) { module.exports = Transparency; } if (typeof window !== "undefined" && window !== null) { window.Transparency = Transparency; } if (typeof define !== "undefined" && define !== null ? define.amd : void 0) { define(function() { return Transparency; }); } },{"../lib/lodash.js":7,"./context":3,"./helpers":5}],2:[function(require,module,exports){ var Attribute, AttributeFactory, BooleanAttribute, Class, Html, Text, helpers, _, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; _ = require('../lib/lodash'); helpers = require('./helpers'); module.exports = AttributeFactory = { Attributes: {}, createAttribute: function(element, name) { var Attr; Attr = AttributeFactory.Attributes[name] || Attribute; return new Attr(element, name); } }; Attribute = (function() { function Attribute(el, name) { this.el = el; this.name = name; this.templateValue = this.el.getAttribute(this.name) || ''; } Attribute.prototype.set = function(value) { this.el[this.name] = value; return this.el.setAttribute(this.name, value.toString()); }; return Attribute; })(); BooleanAttribute = (function(_super) { var BOOLEAN_ATTRIBUTES, name, _i, _len; __extends(BooleanAttribute, _super); BOOLEAN_ATTRIBUTES = ['hidden', 'async', 'defer', 'autofocus', 'formnovalidate', 'disabled', 'autofocus', 'formnovalidate', 'multiple', 'readonly', 'required', 'checked', 'scoped', 'reversed', 'selected', 'loop', 'muted', 'autoplay', 'controls', 'seamless', 'default', 'ismap', 'novalidate', 'open', 'typemustmatch', 'truespeed']; for (_i = 0, _len = BOOLEAN_ATTRIBUTES.length; _i < _len; _i++) { name = BOOLEAN_ATTRIBUTES[_i]; AttributeFactory.Attributes[name] = BooleanAttribute; } function BooleanAttribute(el, name) { this.el = el; this.name = name; this.templateValue = this.el.getAttribute(this.name) || false; } BooleanAttribute.prototype.set = function(value) { this.el[this.name] = value; if (value) { return this.el.setAttribute(this.name, this.name); } else { return this.el.removeAttribute(this.name); } }; return BooleanAttribute; })(Attribute); Text = (function(_super) { __extends(Text, _super); AttributeFactory.Attributes['text'] = Text; function Text(el, name) { var child; this.el = el; this.name = name; this.templateValue = ((function() { var _i, _len, _ref, _results; _ref = this.el.childNodes; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { child = _ref[_i]; if (child.nodeType === helpers.TEXT_NODE) { _results.push(child.nodeValue); } } return _results; }).call(this)).join(''); this.children = _.toArray(this.el.children); if (!(this.textNode = this.el.firstChild)) { this.el.appendChild(this.textNode = this.el.ownerDocument.createTextNode('')); } else if (this.textNode.nodeType !== helpers.TEXT_NODE) { this.textNode = this.el.insertBefore(this.el.ownerDocument.createTextNode(''), this.textNode); } } Text.prototype.set = function(text) { var child, _i, _len, _ref, _results; while (child = this.el.firstChild) { this.el.removeChild(child); } this.textNode.nodeValue = text; this.el.appendChild(this.textNode); _ref = this.children; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { child = _ref[_i]; _results.push(this.el.appendChild(child)); } return _results; }; return Text; })(Attribute); Html = (function(_super) { __extends(Html, _super); AttributeFactory.Attributes['html'] = Html; function Html(el) { this.el = el; this.templateValue = ''; this.children = _.toArray(this.el.children); } Html.prototype.set = function(html) { var child, _i, _len, _ref, _results; while (child = this.el.firstChild) { this.el.removeChild(child); } this.el.innerHTML = html + this.templateValue; _ref = this.children; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { child = _ref[_i]; _results.push(this.el.appendChild(child)); } return _results; }; return Html; })(Attribute); Class = (function(_super) { __extends(Class, _super); AttributeFactory.Attributes['class'] = Class; function Class(el) { Class.__super__.constructor.call(this, el, 'class'); } return Class; })(Attribute); },{"../lib/lodash":7,"./helpers":5}],3:[function(require,module,exports){ var Context, Instance, after, before, chainable, cloneNode, _ref; _ref = require('./helpers'), before = _ref.before, after = _ref.after, chainable = _ref.chainable, cloneNode = _ref.cloneNode; Instance = require('./instance'); module.exports = Context = (function() { var attach, detach; detach = chainable(function() { this.parent = this.el.parentNode; if (this.parent) { this.nextSibling = this.el.nextSibling; return this.parent.removeChild(this.el); } }); attach = chainable(function() { if (this.parent) { if (this.nextSibling) { return this.parent.insertBefore(this.el, this.nextSibling); } else { return this.parent.appendChild(this.el); } } }); function Context(el, Transparency) { this.el = el; this.Transparency = Transparency; this.template = cloneNode(this.el); this.instances = [new Instance(this.el, this.Transparency)]; this.instanceCache = []; } Context.prototype.render = before(detach)(after(attach)(chainable(function(models, directives, options) { var children, index, instance, model, _i, _len, _results; while (models.length < this.instances.length) { this.instanceCache.push(this.instances.pop().remove()); } while (models.length > this.instances.length) { instance = this.instanceCache.pop() || new Instance(cloneNode(this.template), this.Transparency); this.instances.push(instance.appendTo(this.el)); } _results = []; for (index = _i = 0, _len = models.length; _i < _len; index = ++_i) { model = models[index]; instance = this.instances[index]; children = []; _results.push(instance.prepare(model, children).renderValues(model, children).renderDirectives(model, index, directives).renderChildren(model, children, directives, options)); } return _results; }))); return Context; })(); },{"./helpers":5,"./instance":6}],4:[function(require,module,exports){ var AttributeFactory, Checkbox, Element, ElementFactory, Input, Radio, Select, TextArea, VoidElement, helpers, _, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; _ = require('../lib/lodash.js'); helpers = require('./helpers'); AttributeFactory = require('./attributeFactory'); module.exports = ElementFactory = { Elements: { input: {} }, createElement: function(el) { var El, name; if ('input' === (name = el.nodeName.toLowerCase())) { El = ElementFactory.Elements[name][el.type.toLowerCase()] || Input; } else { El = ElementFactory.Elements[name] || Element; } return new El(el); } }; Element = (function() { function Element(el) { this.el = el; this.attributes = {}; this.childNodes = _.toArray(this.el.childNodes); this.nodeName = this.el.nodeName.toLowerCase(); this.classNames = this.el.className.split(' '); this.originalAttributes = {}; } Element.prototype.empty = function() { var child; while (child = this.el.firstChild) { this.el.removeChild(child); } return this; }; Element.prototype.reset = function() { var attribute, name, _ref, _results; _ref = this.attributes; _results = []; for (name in _ref) { attribute = _ref[name]; _results.push(attribute.set(attribute.templateValue)); } return _results; }; Element.prototype.render = function(value) { return this.attr('text', value); }; Element.prototype.attr = function(name, value) { var attribute, _base; attribute = (_base = this.attributes)[name] || (_base[name] = AttributeFactory.createAttribute(this.el, name, value)); if (value != null) { attribute.set(value); } return attribute; }; Element.prototype.renderDirectives = function(model, index, attributes) { var directive, name, value, _results; _results = []; for (name in attributes) { if (!__hasProp.call(attributes, name)) continue; directive = attributes[name]; if (!(typeof directive === 'function')) { continue; } value = directive.call(model, { element: this.el, index: index, value: this.attr(name).templateValue }); if (value != null) { _results.push(this.attr(name, value)); } else { _results.push(void 0); } } return _results; }; return Element; })(); Select = (function(_super) { __extends(Select, _super); ElementFactory.Elements['select'] = Select; function Select(el) { Select.__super__.constructor.call(this, el); this.elements = helpers.getElements(el); } Select.prototype.render = function(value) { var option, _i, _len, _ref, _results; value = value.toString(); _ref = this.elements; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { option = _ref[_i]; if (option.nodeName === 'option') { _results.push(option.attr('selected', option.el.value === value)); } } return _results; }; return Select; })(Element); VoidElement = (function(_super) { var VOID_ELEMENTS, nodeName, _i, _len; __extends(VoidElement, _super); function VoidElement() { return VoidElement.__super__.constructor.apply(this, arguments); } VOID_ELEMENTS = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr']; for (_i = 0, _len = VOID_ELEMENTS.length; _i < _len; _i++) { nodeName = VOID_ELEMENTS[_i]; ElementFactory.Elements[nodeName] = VoidElement; } VoidElement.prototype.attr = function(name, value) { if (name !== 'text' && name !== 'html') { return VoidElement.__super__.attr.call(this, name, value); } }; return VoidElement; })(Element); Input = (function(_super) { __extends(Input, _super); function Input() { return Input.__super__.constructor.apply(this, arguments); } Input.prototype.render = function(value) { return this.attr('value', value); }; return Input; })(VoidElement); TextArea = (function(_super) { __extends(TextArea, _super); function TextArea() { return TextArea.__super__.constructor.apply(this, arguments); } ElementFactory.Elements['textarea'] = TextArea; return TextArea; })(Input); Checkbox = (function(_super) { __extends(Checkbox, _super); function Checkbox() { return Checkbox.__super__.constructor.apply(this, arguments); } ElementFactory.Elements['input']['checkbox'] = Checkbox; Checkbox.prototype.render = function(value) { return this.attr('checked', Boolean(value)); }; return Checkbox; })(Input); Radio = (function(_super) { __extends(Radio, _super); function Radio() { return Radio.__super__.constructor.apply(this, arguments); } ElementFactory.Elements['input']['radio'] = Radio; return Radio; })(Checkbox); },{"../lib/lodash.js":7,"./attributeFactory":2,"./helpers":5}],5:[function(require,module,exports){ var ElementFactory, expando, html5Clone, _getElements; ElementFactory = require('./elementFactory'); exports.before = function(decorator) { return function(method) { return function() { decorator.apply(this, arguments); return method.apply(this, arguments); }; }; }; exports.after = function(decorator) { return function(method) { return function() { method.apply(this, arguments); return decorator.apply(this, arguments); }; }; }; exports.chainable = exports.after(function() { return this; }); exports.onlyWith$ = function(fn) { if ((typeof jQuery !== "undefined" && jQuery !== null) || (typeof Zepto !== "undefined" && Zepto !== null)) { return (function($) { return fn(arguments); })(jQuery || Zepto); } }; exports.getElements = function(el) { var elements; elements = []; _getElements(el, elements); return elements; }; _getElements = function(template, elements) { var child, _results; child = template.firstChild; _results = []; while (child) { if (child.nodeType === exports.ELEMENT_NODE) { elements.push(new ElementFactory.createElement(child)); _getElements(child, elements); } _results.push(child = child.nextSibling); } return _results; }; exports.ELEMENT_NODE = 1; exports.TEXT_NODE = 3; html5Clone = function() { return document.createElement('nav').cloneNode(true).outerHTML !== '<:nav>'; }; exports.cloneNode = (typeof document === "undefined" || document === null) || html5Clone() ? function(node) { return node.cloneNode(true); } : function(node) { var cloned, element, _i, _len, _ref; cloned = Transparency.clone(node); if (cloned.nodeType === exports.ELEMENT_NODE) { cloned.removeAttribute(expando); _ref = cloned.getElementsByTagName('*'); for (_i = 0, _len = _ref.length; _i < _len; _i++) { element = _ref[_i]; element.removeAttribute(expando); } } return cloned; }; expando = 'transparency'; exports.data = function(element) { return element[expando] || (element[expando] = {}); }; exports.nullLogger = function() {}; exports.consoleLogger = function() { return console.log(arguments); }; exports.log = exports.nullLogger; },{"./elementFactory":4}],6:[function(require,module,exports){ var Instance, chainable, helpers, _, __hasProp = {}.hasOwnProperty; _ = require('../lib/lodash.js'); chainable = (helpers = require('./helpers')).chainable; module.exports = Instance = (function() { function Instance(template, Transparency) { this.Transparency = Transparency; this.queryCache = {}; this.childNodes = _.toArray(template.childNodes); this.elements = helpers.getElements(template); } Instance.prototype.remove = chainable(function() { var node, _i, _len, _ref, _results; _ref = this.childNodes; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { node = _ref[_i]; _results.push(node.parentNode.removeChild(node)); } return _results; }); Instance.prototype.appendTo = chainable(function(parent) { var node, _i, _len, _ref, _results; _ref = this.childNodes; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { node = _ref[_i]; _results.push(parent.appendChild(node)); } return _results; }); Instance.prototype.prepare = chainable(function(model) { var element, _i, _len, _ref, _results; _ref = this.elements; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { element = _ref[_i]; element.reset(); _results.push(helpers.data(element.el).model = model); } return _results; }); Instance.prototype.renderValues = chainable(function(model, children) { var element, key, value, _results; if (_.isElement(model) && (element = this.elements[0])) { return element.empty().el.appendChild(model); } else if (typeof model === 'object') { _results = []; for (key in model) { if (!__hasProp.call(model, key)) continue; value = model[key]; if (value != null) { if (_.isString(value) || _.isNumber(value) || _.isBoolean(value) || _.isDate(value)) { _results.push((function() { var _i, _len, _ref, _results1; _ref = this.matchingElements(key); _results1 = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { element = _ref[_i]; _results1.push(element.render(value)); } return _results1; }).call(this)); } else if (typeof value === 'object') { _results.push(children.push(key)); } else { _results.push(void 0); } } } return _results; } }); Instance.prototype.renderDirectives = chainable(function(model, index, directives) { var attributes, element, key, _results; _results = []; for (key in directives) { if (!__hasProp.call(directives, key)) continue; attributes = directives[key]; if (!(typeof attributes === 'object')) { continue; } if (typeof model !== 'object') { model = { value: model }; } _results.push((function() { var _i, _len, _ref, _results1; _ref = this.matchingElements(key); _results1 = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { element = _ref[_i]; _results1.push(element.renderDirectives(model, index, attributes)); } return _results1; }).call(this)); } return _results; }); Instance.prototype.renderChildren = chainable(function(model, children, directives, options) { var element, key, _i, _len, _results; _results = []; for (_i = 0, _len = children.length; _i < _len; _i++) { key = children[_i]; _results.push((function() { var _j, _len1, _ref, _results1; _ref = this.matchingElements(key); _results1 = []; for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) { element = _ref[_j]; _results1.push(this.Transparency.render(element.el, model[key], directives[key], options)); } return _results1; }).call(this)); } return _results; }); Instance.prototype.matchingElements = function(key) { var el, elements, _base; elements = (_base = this.queryCache)[key] || (_base[key] = (function() { var _i, _len, _ref, _results; _ref = this.elements; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { el = _ref[_i]; if (this.Transparency.matcher(el, key)) { _results.push(el); } } return _results; }).call(this)); helpers.log("Matching elements for '" + key + "':", elements); return elements; }; return Instance; })(); },{"../lib/lodash.js":7,"./helpers":5}],7:[function(require,module,exports){ var _ = {}; _.toString = Object.prototype.toString; _.toArray = function(obj) { var arr = new Array(obj.length); for (var i = 0; i < obj.length; i++) { arr[i] = obj[i]; } return arr; }; _.isString = function(obj) { return _.toString.call(obj) == '[object String]'; }; _.isNumber = function(obj) { return _.toString.call(obj) == '[object Number]'; }; _.isArray = Array.isArray || function(obj) { return _.toString.call(obj) === '[object Array]'; }; _.isDate = function(obj) { return _.toString.call(obj) === '[object Date]'; }; _.isElement = function(obj) { return !!(obj && obj.nodeType === 1); }; _.isPlainValue = function(obj) { var type; type = typeof obj; return (type !== 'object' && type !== 'function') || exports.isDate(obj); }; _.isBoolean = function(obj) { return obj === true || obj === false; }; module.exports = _; },{}]},{},[1]); phpsysinfo-3.4.4/language/000077500000000000000000000000001467431054600155215ustar00rootroot00000000000000phpsysinfo-3.4.4/language/ar.xml000066400000000000000000000301541467431054600166500ustar00rootroot00000000000000 معلومات النظام حيوية النظام اسم المضيف اﻷساسي المراقب IP إصدار النواة اسم التوزيعة مدة التشغيل المستخدمين الحاليين متوسط التحميل معلومات الهاردوير المعالجات الموديل سرعة المعالج BUSال سرعة حجم ذاكرة التخزين المؤقت Bogomips النظام أجهزة PCI أجهزة IDE أجهزة SCSI أجهزة USB استخدام الشبكة الجهاز المستلمة المرسلة الخاطئة اتصالات الشبكة استخدام الذاكرة الذاكرة الحقيقة الذاكرة المبادلة أنظمة الملفات المحملة نقطة التحميل القسم الاستخدام النوع المتاح المستخدم الحجم الكلي كيلو بايت ميجا بايت جيجا بايت لا شيء السعة القالب اللغة تقديم تم اﻹنشاء بواسطة أيام ساعات دقائق درجة الحرارة الجهد الكهربى المراوح القيمة اﻷقل اﻷقصي التخلف الحد الاسم سليزيوس فهرنهايت فولت RPM النواة + البرمجيات المُخزن المخبأة القفز إلى معلومات الـ UPS الاسم الموديل الوضع بدء الحالة اﻹنقطاعات سبب آخر انقطاع الطابع الزمني ﻵخر انقطاع جهد الخط نسبة التحميل جهد البطارية شحن البطارية الوقت المتبقي على البطاريات فولت دقائق درجة الحرارة تيرا بايت تيبي بايت جيبي بايت ميبي بايت كيبي بايت بيبي بايت بيتا بايت ميجا هرتز جيجا هرتز الظاهرية آخر إقلاع بايت لغة النظام ترميز الصفحة التفاصيل سرعة المعالج القصوي سرعة المعالج الدنيا الطاقة وات تاريخ البطارية القراءة الحالية أمبير الجهاز تردد الخط هرتز العمليات جارية نائمة متوقفة زومبي منتظرة أخري أجهزة TB أجهزة I2C عدد المعالجات عدد اﻷجهزة أخري المُصنع المنتج الرقم التسلسلي المتاحة أجهزة NVMe OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/ast.xml000066400000000000000000000263111467431054600170350ustar00rootroot00000000000000 Información del sistema Vitales del sistema Nome del sirvidor Direiciones IP Versión del nucléu Nome de la distribución Tiempu operativu Usuarios anguaño Medies d'usu Información del hardware Procesadores Modelu Velocidá de la CPU Velocidá de BUS Tamamñu de la caché Sistema Bogomips Dispositivos PCI Dispositivos IDE Dispositivos SCSI Dispositivios USB Usu de la rede Dispositivu Recibíos Unvios Fallos/Perdes Conexones de rede feches Usu de la memoria Memoria física Memoria de volcáu Sistemes de ficheros montaos Puntu de monstaxe Partición Usu Tipu Llibre Usáu Tamañu Total kB MB GB nengún Capacidá Plantía Llingua Unviar Fechu con díes hores minutos Temperatura Voltaxe Ventiladoes Valor Min Max Causes Llimite Etiqueta C F V RPM Nucléu y aplicaciones Buffers En caché Saltar a Información UPS Nome Modelu Modu Entamó Estáu Cortes Causa del útlimu corte Fin del últimu corte Voltaxe de la llinia Carga en porcentaxe Voltaxe de la batería Carga de la batería Tiempu restante de les bateríes V minutos Temperatura TB TiB GiB MiB KiB PiB PB MHz GHz Virtualization Last boot B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other Dispositivios TB Dispositivios I2C Number of processors Number of devices Other Manufacturer Product Serial number Llibre Dispositivios NVMe OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/bg.xml000066400000000000000000000301461467431054600166370ustar00rootroot00000000000000 Системна информация Обща инфорамция Име на системата IP адрес Версия на ядрото Име на дистрибуцията Време на работа Активни потребители Средно натоварване Установен хардуер Процесори Модел Честота на CPU Честота на BUS Размер на кешa Bogomips за системата PCI устройства IDE устройства SCSI устройства USB устройства Ползваемост на мрежите Устройство Получени Изпратени Грешки/Изпуснати Установени мрежови връзки Ползваемост на оперативната памет Физическа памет Swap диск Монтирани файлови системи Монтирана Дял Процент на използване Тип Свободни Използвани Общ обем Всичко kB MB GB няма Капацитет Тема Език Изпрати Генерирано от дена часа минути Температура Напрежение Вентилатори Стойност Мин Макс Хистерезис Предел Име C F V Об/мин Ядро + приложения Буфери Кеширани Отиди на Информация за UPS Име Модел Режим Време на включване Състояние Прехвърляния към батерия Причина за последното прехвърляне Време на последното прехвърляне Напрежение на линията Процент на натовареност Напрежение на батерията Заряд на батерията Оставащо време на батерията V минути Температура TB TiB GiB MiB KiB PiB PB MHz GHz Virtualization Last boot B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other TB устройства I2C устройства Number of processors Number of devices Other Manufacturer Product Serial number Свободни NVMe устройства OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/ca.xml000066400000000000000000000263001467431054600166270ustar00rootroot00000000000000 Informació del Servidor Vitals Nom del Servidor Direccions IP Versió del Kernel Nom Distribució Temps en actiu Usuaris actuales Mitjana d'ús Informació del Hardware Procesadors Model Velocitat CPU Velocitat BUS Mida memòria CAU Sistema Bogomips Dispositius PCI Dispositius IDE Dispositius SCSI Dispositius USB Ús de la xarxa Dispositius Rebuts Enviats Err/Perduts Connexions de Xarxa Establertes Ús de la memòria Memòria Física Disc Swap Sistema d'arxius Muntats Punt de muntatge Partició Ús Tipus Lliure Usada Mida Total kB MB GB cap Mida Plantilla Llenguatge Enviat Creat per dies hores minuts Temperatura Voltaje Ventiladors Valor Mín Màx Histèresi Límit Etiqueta C F V RPM Kernel + aplicacions Buffers Memòria cau Saltar a Informació UPS Nom Model Mode Iniciat Estat Interrupcions Causa última interrupció Temps última interrupció Voltatge de la línia Percentatge carregat Voltatge bateria Càrrega de la bateria Vida restant de les bateries V minuts Temperatura TB TiB GiB MiB KiB PiB PB MHz GHz Virtualització Darrera arrencada B Idioma del Sistema Pàgina de Codi Detalls CPU Velocitat Màx CPU Velocitat Mín Energia W Data de la bateria Actual A Màquina Línia de freqüència Hz Processos corrent reposant aturat zombi esperant altre Dispositius TB Dispositius I2C Number of processors Number of devices Other Manufacturer Product Serial number Lliure Dispositius NVMe OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/cz.xml000066400000000000000000000265001467431054600166620ustar00rootroot00000000000000 Informace o systému Základní informace Kanonické jméno hostitele Poslouchající IP Verze jádra Název distribuce Čas od spuštění Přihlášení uživatelé Průměrné zatížení Informace o hardware Procesory Model Rychlost procesoru Rychlost sběrnice Velikost cache Bogomipsy systému PCI zařízení IDE zařízení SCSI zařízení USB zařízení Využití sítě Zařízení Přijaté Odeslané Chyby/Zahozené Navázaná síťová spojení Využití paměti Fyzická paměť Odkládací prostor na disku (Swap) Připojené souborové systémy Přípojný bod Oddíl Využití Typ Volné Použité Velikost Celkem kB MB GB nic Kapacita Šablona vzhledu Jazyk Odeslat Vytvořeno s dní hodin minut Teplota Napětí Ventilátory Hodnota Min Max Hystereze Limit Název C F V RPM Jádro + aplikace Zásobníky Mezipaměť Skoč na Záložní zdroj Název Model Režim Čas od spuštění Stav Výpadky Důvod posledního výpadku Čas posledního výpadku Vstupní napětí Aktuální zátížení Napětí na baterii Stav nabití Zbývající záložní čas V minuty Teplota TB TiB GiB MiB KiB PiB PB MHz GHz Virtualizace Poslední spuštění B Systémový jazyk Znaková stránka Podrobnosti Nejvyšší frekvence CPU Nejnižší frekvence CPU Výkon W Datum baterie Proud A Zařízení Frekvence sítě Hz Procesy aktivní neaktivní zastavené zombie čekající ostatní TB zařízení I2C zařízení Počet procesorů Počet zařízení Ostatní Výrobce Produkt Sériové číslo Volné NVMe zařízení Typ OS Počet paměťových čipů Rychlost Paměťové čipy MT/s GT/s Stav pípáku Virtualizer phpsysinfo-3.4.4/language/da.xml000066400000000000000000000260131467431054600166310ustar00rootroot00000000000000 Systeminformation Systemdetaljer Værtsnavn IP-adresse Kernelversion Distribution Oppetid Antal brugere Last gennemsnit Hardwareinformation Processorer Model CPU frekvens BUS frekvens Cachestørrelse System Bogomips PCI enheder IDE enheder SCSI enheder USB enheder Netværk Enhed Modtaget Sendt Fejl/Tabt Etablerede netværskforbindelser Hukommelsesforbrug Fysisk hukommelse Disk Swap Filsystemer Sti Partition I brug Type Ledig Brugt Størrelse Totalt kB MB GB ingen Kapasitet Tema Sprog Send Genereret med dage timer minutter Temperatur Spænding Blæsere Værdi Min Maks Hysterese Grænse Mærke C F V RPM Kernel + applikationer Buffere Cached Vis UPS information Navn Model Mode Startet Status Udfald Årsag til sidste udfald Tidspunkt for sidste udfald Forsyningspænding Procent belastet Batteri spænding Batteri ladning Tid tilbage for batteridrift V minutter Temperatur TB TiB GiB MiB KiB PiB PB MHz GHz Virtualisering Last boot B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other TB enheder I2C enheder Number of processors Number of devices Other Manufacturer Product Serial number Ledig NVMe enheder OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/de.xml000066400000000000000000000262531467431054600166430ustar00rootroot00000000000000 System Information System Übersicht Zugewiesener Hostname Überwachte IP Kernel Version Distributionsname Betriebszeit Eingeloggte Benutzer Auslastung Hardware Übersicht Prozessoren Modell Taktfrequenz BUS Speed Cachegröße System Bogomips PCI Geräte IDE Geräte SCSI Geräte USB Geräte Netzwerk-Auslastung Schnittstellen Empfangen Gesendet Fehler/Verworfen Aktive Netzwerkverbindungen Arbeitsspeicher-Auslastung Physikalischer Speicher Auslagerungsdatei Angemeldete Dateisysteme Mount Partition Prozentuale Auslastung Typ Frei Belegt Größe Gesamt kB MB GB keine Kapazität Designvorlage Sprache Ändern Erstellt von Tage Stunden Minuten Temperaturen Spannungen Lüfter Wert Min Max Hysteresis Limit Bezeichnung °C °F V Umin Kernel + Anwendungen Puffer Cache Springe zu USV Information Name Model Modus Startzeit Status Ausfälle Letzter Ausfallgrund Letzter Ausfallzeitpunkt Leitungsspannung Auslastung Batteriespannung Batterieladezustand Batterielaufzeit V Minuten Temperatur TB TiB GiB MiB KiB PiB PB MHz GHz Virtualisierung Letzter Start B System Sprache Codepage Details CPU-Geschwindigkeit Max CPU-Geschwindigkeit Min Leistung W Akku Datum Stromstärke A Maschine Netzfrequenz Hz Prozesse laufend schlafend gestoppt zombie wartend andere TB Geräte I2C Geräte Anzahl Prozessoren Anzahl Geräte Other Manufacturer Product Serial number Frei NVMe Geräte OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/en.xml000066400000000000000000000257411467431054600166560ustar00rootroot00000000000000 System information System Vital Canonical Hostname Listening IP Kernel Version Distro Name Uptime Current Users Load Averages Hardware Information Processors Model CPU Speed BUS Speed Cache Size System Bogomips PCI Devices IDE Devices SCSI Devices USB Devices Network Usage Device Received Sent Err/Drop Established Network Connections Memory Usage Physical Memory Disk Swap Mounted Filesystems Mountpoint Partition Usage Type Free Used Size Totals kB MB GB none Capacity Template Language Submit Created by days hours minutes Temperature Voltage Fans Value Min Max Hysteresis Limit Label C F V RPM Kernel + applications Buffers Cached Jump to UPS information Name Model Mode Started Status Outages Last outage cause Last outage timestamp Line voltage Load percent Battery voltage Battery charge Time left on batteries V minutes Temperature TB TiB GiB MiB KiB PiB PB MHz GHz Virtualization Last boot B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other TB Devices I2C Devices Number of processors Number of devices Other Manufacturer Product Serial number Free NVMe Devices OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/es.xml000066400000000000000000000262611467431054600166610ustar00rootroot00000000000000 Información del Servidor Vitales Nombre del Servidor Direcciones IP Versión del Kernel Nombre Distribución Último arranque Usuarios actuales Promedio de uso Información del Hardware Procesadores Modelo Velocidad CPU Velocidad BUS Tamaño Cache Sistema Bogomips Dispositivos PCI Dispositivos IDE Dispositivos SCSI Dispositivos USB Uso de la red Dispositivo Recibidos Enviados Errores/Perdidos Conexiones de Red Establecidas Uso de la memoria Memoria Física Disco Swap Sistema archivos Montados Punto de montaje Partición Uso Tipo Libre Usada Tamaño Total kB MB GB ninguno Tamaño Template Lenguaje Enviado Creado por días horas minutos Temperatura Voltaje Ventiladores Valor Min Max Histéresis Límite Etiqueta C F V RPM Kernel + aplicaciones Buffers Cache Bifurcación Información UPS Nombre Modelo Modo Iniciado Estado Interrupciones Causa última interrupción Tiempo última interrupción Voltaje de la línea Porcentaje cargado Voltaje batería Carga de la batería Vida restante de las baterías V minutos Temperatura TB TiB GiB MiB KiB PiB PB MHz GHz Virtualization Last boot B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other Dispositivos TB Dispositivos I2C Number of processors Number of devices Other Manufacturer Product Serial number Libre Dispositivos NVMe OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/et.xml000066400000000000000000000261771467431054600166700ustar00rootroot00000000000000 Süsteemi informatsioon Süsteemist Lühidalt Kanooniline masinanimi Kuulav IP Kerneli versioon Distributsioon Elusolek Kasutajaid hetkel Koormuse keskmised Riistvara Informatsioon Protsessoreid Mudel CPU Kiirus BUS Kiirus Puhvri Suurus Süsteemi Bogomips PCI Seadmed IDE Seadmed SCSI Seadmed USB Seadmed Võrgukasutus Seade Saadud Saadetud Vigu/Drop Established Network Connections Mälukasutus Füüsiline Mälu Saalemälu kettal Ühendatud Failisüsteemid Ühenduspunkt Kettaosa Kasutus Tüüp Vaba Kasutuses Suurus Kokku kB MB GB pole Mahutavus Väljanägemine Keel Submit Statistika toob teieni päeva tundi minutit Temperatuur Pinge Ventilaatorid Hetkeväärtus Min Max Hüsterees Piirväärtus Sõlmenimi C F V RPM Kernel + rakendused Puhvrid Vahepuhvrid/cache Hüppa UPS informatsioon Nimi Mudel Reshiim Käivitatud Staatus Katkestusi Viimase katkestuse põhjustas Viimase katkestuse ajatempel Liini pinge Koormuse Aku pinge Aku laetus Akudel töötamiseks jäänud aega V minutit Temperatuur TB TiB GiB MiB KiB PiB PB MHz GHz Virtualization Last boot B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other TB Seadmed I2C Seadmed Number of processors Number of devices Other Manufacturer Product Serial number Vaba NVMe Seadmed OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/fa.xml000066400000000000000000000273211467431054600166360ustar00rootroot00000000000000 اطلاعات سیستم سیستم پایه نام میزبان آی پی های فهرست شده ورژن کرنل نام توزیع آپتایم کاربران حاضر میانگین فشار پردازنده مشخصات سخت افزاری پردانزده مدل سرعت پردازنده سرعت باس ظرفیت کش System Bogomips PCI قطعات IDE قطعات SCSI قطعات USB قطعات شبکه مورد استفاده قطعات دریافت ارسال حطا/دراپ اتصالات فعال شبکه مصرف حافظه رم حفظه رم فیزیکی حافظه مجازی دیسک فایل سیستم های متصل نقاط اتصال پارتیشن ها مصرف گونه آزاد مصرف شده میزان جمع kB MB GB هیچ ظرفیت قالب زبان ارسال ایحاد شده توسط روز ساعت دقیقه درجه حرارت ولتاژ فن ها مقدار حداقل حداکثر هیسترزیس محدودیت برچسب C F V دور در دقیقه کرنل + برنامه بافر کش پرش به UPS اطلاعات نام مدل حالت شروع وضعیت خاموشی علت آخرین خاموشی زمان آخرین خاموشی ولتاژ خط درصد ولتاژ ولتاژ باطری شارژ باطری زمان بازی مانده باطری V دقیقه درجه حرارت TB TiB GiB MiB KiB PiB PB MHz GHz مجازی سازی آخرین راه اندازی B زبان سیستم صفحه کد جزئیات بیشترین سرعت پردازنده کمترین سرعت پردازنده قدرت W تاریخ باطری الان A ماشین فرکانس خط Hz پردازنده در حال اجرا معلق متوقف زامبی انتظار دیگر TB قطعات I2C قطعات تعداد پردازنده تعداد قطعات دیگر سازنده ساخت شماره سریال آزاد NVMe قطعات پونه سیستم عامل تعداد چیپ‌های حافظه سرعت چیپ‌های حافظه MT/s GT/s وضعیت آلارم مجازی‌ساز phpsysinfo-3.4.4/language/fi.xml000066400000000000000000000261371467431054600166520ustar00rootroot00000000000000 Järjestelmä Tärkeät tiedot Kanoninen isäntänimi IP-osoite Ytimen versio Distron nimi Uptime Nykyiset käyttäjät Keskimääräinen kuorma Laitteisto Prosessorit Malli CPU:n kellotaajuus BUS:n kellotaajuus Välimuistin koko Järjestelmän Bogomipsit PCI laitteet IDE laitteet SCSI laitteet USB laitteet Verkon käyttö Laite Vastaanotettu Lähetetty Err/Drop Vakiintuneet yhteydet Muistin käyttö Fyysinen muisti Levy Swap Kiinnitetyt tiedostojärjestelmät Kiinnitetty Partitiot Käytössä Tyyppi Vapaana Käytetty Koko Yhteensä kB MB GB ei Kapasiteetti Teema Kieli Muokkaa Luonut päivää tuntia minuuttia Lämpö Voltti Tuulettimet Arvo Min Max Hystereesi Rajoitus Leima C F V RPM Ydin + ohjelmistot Puskurit Välimuistissa Hyppää UPS tietoja Nimi Tyyppi Moodi Aloitettu Tila Katkoksia Viimeisen katkoksen syy Viimeisimmän katkoksen aikaleima Linjan jännite Kuorma prosentteina Akun jännite Akun kuorma Aikaa jäljellä akuissa V minuuttia Lämpö TB TiB GiB MiB KiB PiB PB MHz GHz Virtualization Last boot B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other TB laitteet I2C laitteet Number of processors Number of devices Other Manufacturer Product Serial number Vapaana NVMe laitteet OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/fr.xml000066400000000000000000000262531467431054600166620ustar00rootroot00000000000000 Informations système Système Nom d'hôte canonique Adresse IP Version du noyau Distribution Durée d'activité Utilisateurs Charge système Informations matériel Processeurs Modèle Fréquence CPU Fréquence BUS Taille cache Bogomips Périphériques PCI Péripériques IDE Périphériques SCSI Périphériques USB Réseau Périphérique Réception Envoi Err/Drop Connexions réseau établies Utilisation mémoire Mémoire physique Swap disque Systèmes de fichiers montés Point de montage Partition Utilisation Type Libre Occupé Taille Totaux ko Mo Go aucun Capacité Modèle Langue Validé Créé par jours heures minutes Température Tension Ventilateurs Valeur Min Max Hystérésis Limite Valeur C F V RPM Noyau + applications Buffers Cached Aller à Informations UPS Nom Modèle Mode Démarré Statut Interruptions Cause dernière interruption Fin dernière interruption Tension Charge Tension Batterie Charge Batterie Autonomie Batterie V minutes Température To Tio Gio Mio Kio Pio Po MHz GHz Virtualisation Dernier démarrage B Langue du système Codage de la page Détails Vitesse CPU Max Vitesse CPU Min Puissance W Date de la batterie Courant A Machine Line frequency Hz Processus running sleeping arrêté zombie en attente autre Périphériques TB Périphériques I2C Nombre de Processeurs Nombre de périphériques Other Manufacturer Product Serial number Libre Périphériques NVMe OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/gl.xml000066400000000000000000000262011467431054600166460ustar00rootroot00000000000000 Información do servidor Características principais Nome do servidor Direccións IP Versión do Kernel Nome da distribución Último arranque Usuarios actuais Promedio de uso Información do hardware Procesadores Modelo Velocidade CPU Velocidade BUS Tamaño Caché Sistema Bogomips Dispositivos PCI Dispositivos IDE Dispositivos SCSI Dispositivos USB Uso da rede Dispositivo Recibidos Enviados Erros/Perdidos Conexións de rede establecidas Uso da memoria Memoria Física Disco Swap Sistema archivos Montados Punto de montaxe Partición Uso Tipo Libre Usada Tamaño Total kB MB GB ningÚn Tamaño Tema Linguaxe Enviado Creado por días horas minutos Temperatura Voltaxe Ventiladores Valor Min Max Histéresis Límite Etiqueta C F V RPM Kernel + aplicaciones Buffers Cache Bifurcación UPS information Name Model Mode Started Status Outages Last outage cause Last outage timestamp Line voltage Load percent Battery voltage Battery charge Time left on batteries V minutes Temperature TB TiB GiB MiB KiB PiB PB MHz GHz Virtualization Last boot B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other Dispositivos TB Dispositivos I2C Number of processors Number of devices Other Manufacturer Product Serial number Libre Dispositivos NVMe OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/gr.xml000066400000000000000000000304561467431054600166630ustar00rootroot00000000000000 Πληροφορίες Συστήματος Στοιχεία Συστήματος Ονομασία Διεύθυνση IP Έκδοση Πυρήνα Διανομή Ενεργό για Ενεργοί χρήστες Φόρτος λειτουργίας Πληροφορίες Υλικού Επεξεργαστές Μοντέλο Ταχύτητα Επεξεργαστή Ταχύτητα Διαύλου Μέγεθος Λανθάνουσας Μνήμης Bogomips Συστήματος Συσκευές PCI Συσκευές IDE Συσκευές SCSI Συσκευές USB Χρήση Δικτύου Συσκευή Λήφθησαν Απεστάλησαν Λάθη/Απορριπτέα Ενεργές Δικτυακές Συνδέσεις Χρήση Μνήμης Φυσική Μνήμη Δίσκος Swap Ενεργές Αποθηκευτικές Μονάδες Σημείο Προσάρτησης Κατάτμηση Χρήση Τύπος Ελεύθερο Σε χρήση Μέγεθος Σύνολο kB MB GB κανένα Χωρητικότητα Εμφάνιση Γλώσσα Καταχώρηση Παράχθηκε με το ημέρες ώρες λεπτά Θερμοκρασίες Τάσεις Ανεμιστήρες Τιμή Eλάχιστο Μέγιστο Υστέρηση Όριο Υποσύστημα °C °F V RPM Πυρήνας + εφαρμογές Buffers Cached Μετάβαση στο Πληροφορίες UPS Όνομα Μοντέλο Mode Ενεργό από Κατάσταση Διακοπές Λόγος διακοπής Τελευταία διακοπή Τάση γραμμής Φόρτος Τάση μπαταρίας Φόρτιση μπαταρίας Διάρκεια μπαταρίας V λεπτά Θερμοκρασία TB TiB GiB MiB KiB PiB PB MHz GHz Εικονικοποίηση Τελευταία εκκίνηση B Γλώσσα Συστήματος Κωδικοποίηση Λεπτομέρειες Μέγιστη Ταχύτητα Επεξεργαστή Ελάχιστη Ταχύτητα Επεξεργαστή Ισχύς W Ημερομηνία Μπαταρίας Ρεύμα A Μηχανή Συχνότητα Γραμμής Hz Διεργασίες εκτελούνται σε ύπνωση σταματημένες zombie σε αναμονή άλλο Συσκευές TB Συσκευές I2C Αριθμός Επεξεργαστών Αριθμός Συσκευών Άλλο Κατασκευαστής Προϊόν Σειριακός αριθμός Ελεύθερη Συσκευές NVMe Τύπος Λ/Σ Αριθμός τσιπ μνήμης Ταχύτητα Τσιπ Μνήμης MT/s GT/s Κατάσταση Βομβητή Virtualizer phpsysinfo-3.4.4/language/he.xml000066400000000000000000000271421467431054600166450ustar00rootroot00000000000000 מידע המערכת נתוני מערכת שם השרת כתובת אינטר\אינרה-נט גרסת הליבה הפצה זמן ריצה משתמשים מחוברים עומס ממוצע מידע על החומרה מעבדים דגם מהירות מעבד מהירות חריץ הרחבה גודל מטמון System Bogomips התקני PCI התקני IDE שירותי SCSI התקנים אוניברסליים (USB) ניצולת רשת התקן התקבל נשלח נפילות\תקלות חיבורים קיימים זיכרון בשימוש זיכרון פיזי דיסק החלפה מערכות קבצים מחוברות נקודת חיבור מחיצה בשימוש סוג פנוי משומש גודל סה"כ kB MB GB none נפח תבנית שפה שליחה נוצר על ידי ימים שעות דקות טמפרטורה מתח מאווררים ערך מינימאלי מקסימאלי Hysteresis גבול תווית C F V RPM ליבה ותוכנה אוגר Cached קפוץ ל מידע אל פסק שם דגם מצב זמן הפעלה מצב הפסקות חשבמל הפסקת חשמל אחרונה חתימת זמן של הפסקת חשמל אחרונה מתח הקו אחוזי עומס מתח סוללה אחות טעינת סוללה זמן שנשאר לשימוש בסוללה V דקות טמפרטורה TB TiB GiB MiB KiB PiB PB MHz GHz הדמיה (וירטואליזציה) עליית מערכת אחרוה B שפת מערכת ההפעלה קוד שפה פרטים מהירות מעבד הגבוהה ביותר מהירות המעבד הנמוכה ביותר כוח W תאריך סוללה Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other התקני TB התקני I2C Number of processors Number of devices Other Manufacturer Product Serial number פנוי התקני NVMe OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/hr.xml000066400000000000000000000263051467431054600166620ustar00rootroot00000000000000 System Informacije za Pregled sistema Dodijeljeno ime servera Prateći IP Kernel verzija Ime distribucije Radno vrijeme Logirani korisnici Iskorištenost Hardverski pregled Prozesori Model Taktfrequenz BUS brzina Predmemorija veličina System Bogomips PCI Uređaji IDE Uređaji SCSI Uređaji USB Uređaji Iskorištenost mreže Mreža Primljeno Poslano Greška/odbačeno Aktivne mrežne veze Iskorištenost radne memorije Fizikalna memorija swap datoteku Datotečni sustavi (Particije) Mount Particija Postotak iskorištenost Vrsta Slobodno Zauzeto Veličina Ukupno kB MB GB Bez Kapacitet Dizajn predloška Jezik Izmjeni Scripta od Dana Sati Minuta Temperature tenzije Ventilatori Vrijednost Minimalno Maksimalno Hysteresis Limit Opis °C °F V Umin Jezgra + aplikacije Međuspremnike predmemorija Skačem na USV informacije Ime Model način Server startan Status Neuspjeh Razlog zadnjeg neuspjeha Zadnje vrijeme neuspjeha Napon mreže iskorištenost napon baterije Napunjenosti baterije Trajnost baterije V Minuta Temperatura TB TiB GiB MiB KiB PiB PB MHz GHz Virtualizacija Zadnji start B Jezik sistema CODE stranice Detalji CPU brzina Maksimalno CPU brzina minimalno performanse W Akku Datum Jačina struje A Uređaj Snaga frekvencije Hz Prozesi stalno spavajući Stopirano zombie Čekajući ostali TB Devices I2C Devices Number of processors Number of devices Other Manufacturer Product Serial number Free NVMe Devices OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/hu.xml000066400000000000000000000261641467431054600166700ustar00rootroot00000000000000 Rendszer információk Alapvető információk Hosztnév Figyelt IP Kernel Verzió Distro Név Uptime Jelenlegi Felhasználok Terheltség Hardver Információk Processzorok Model CPU Sebesség BUS Sebesség Cache Méret Rendszer Bogomips PCI Eszközök IDE Eszközök SCSI Eszközök USB Eszközök Hálózat Használat Eszköz Fogadott Küldött Hibás/Eldobott Hálózati Csatlakozások Memória Használat Fizikai Memória Lemez Swap Csatlakoztatott File Rendszerek Csatlakozási pont Partíció Használt Típus Szabad Felhasznált Méret Összes kB MB GB nincs Kapacitás Sablon Nyelv Rendben Készítette: nap óra perc Hőmérsékletek Feszültségek Ventilátorok Érték Min Max Hiszterézis Limit Címke C F V RPM Kernel + Alkalmazások Bufferek Cached Ugrás ide: UPS information Name Model Mode Started Status Outages Last outage cause Last outage timestamp Line voltage Load percent Battery voltage Battery charge Time left on batteries V minutes Temperature TB TiB GiB MiB KiB PiB PB MHz GHz Virtualization Last boot B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other TB Eszközök I2C Eszközök Number of processors Number of devices Other Manufacturer Product Serial number Szabad NVMe Eszközök OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/id.xml000066400000000000000000000257711467431054600166530ustar00rootroot00000000000000 Informasi Sistem Sistem Vital Canonical Hostname IP Pembaca Versi Kernel Nama Distro Waktu Hidup Pengguna Sekarang Beban Rata-rata Informasi Perangkat Keras Processors Model Kecepatan CPU Kecepatan BUS Ukuran Cache Sistem Bogomips Perangkat PCI Perangkat IDE Perangkat SCSI Perangkat USB Penggunaan Jaringan Perangkat Diterima Dikirim Kesalahan / Peringatan Koneksi Jaringan Tertera Penggunaan Memori Memori Fisik Disk Swap Sistem File Terpasang Mountpoint Partisi Pemakaian Tipe Bebas Digunakan Ukuran Keselurahan KB MB GB Nihil Kapasitas Template Bahasa Kirim Dibuat oleh hari jam menit Suhu Voltase Kipas Nilai Min Max Histeresis Pembatasan Label C F V RPM Kernel + Aplikasi Buffers Cached Jump to Informasi UPS Nama Model Mode Memulai Status Padam Penyebab Pemadaman Terakhir Waktu Pemadaman Terakhir Tegangan Saluran Persenan Beban Tegangan Baterai Pengisi Daya Baterai Sisa Waktu Baterai V Menit Suhu TB TiB GiB MiB KiB PiB PB MHz GHz Virtualisasi Boot Terakhir B Bahasa Sistem Halaman Kode Detail Kecepatan Max CPU Kecepatan Min CPU Daya W tanggal Baterai Arus A Mesin Frekuensi Jalur Hz Processes Berjalan Istirahat Berhenti zombie Menunggu Lainnya Perangkat TB Perangkat I2C Jumlah Prosesor Jumlah Perangkat Lainnya Pabrikan Produk Nomor Seri Bebas Perangkat NVMe OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/is.xml000066400000000000000000000264141467431054600166650ustar00rootroot00000000000000 Kerfisupplýsingar Aðalupplýsingar kerfis Vélarnafn IP tala vélar Útgáfa kjarna Nafn stýrikerfis Upptími Tengdir notendur Meðal álag vélar Upplýsingar um vélbúnað Örgjörvar Týpa Klukkuhraði örgjörva Brautarhraði Stærð flýtiminnis Örgjörvakjarni PCI jaðartæki IDE jaðartæki SCSI jaðartæki USB jaðartæki Notkun á neti Jaðartæki Móttekið Sent Villur/Pakkatap Upplýsingar nettengingar Minnisnotkun Vinnsluminni Sýndarminni Tengd skráarkerfi Tengipunktur Disksneið Hlutfall af heildarstærð Tegund Laust Notað Stærð Samtals kB MB GB Ekkert Heildarstærð Sniðmát Tungumál Senda Búið til af dagar klukkustundir mínútur Hitastig Spenna Viftur Gildi Lægst Hæst ðvörun lýkur Aðvörun byrjar Nafn mælis C F V RPM Kjarni + viðbætur Biðminni Skyndiminni Skoða Upplýsingar varaaflgjafa Nafn Týpa Hamur Byrjaði Staða Útsláttur rafmagns Ástæða síðasta rafmagnsútsláttar Tími síðasta rafmagnsútsláttar Línu spenna Tími notað af rafhlöðu Rafhlöðustraumur Rafhlöðuhleðsla Tími sem er eftir af rafhlöðu V mínútur Hitastig TB TiB GiB MiB KiB PiB PB MHz GHz Virtualization Last boot B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other TB jaðartæki I2C jaðartæki Number of processors Number of devices Other Manufacturer Product Serial number Laust NVMe jaðartæki OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/it.xml000066400000000000000000000261261467431054600166660ustar00rootroot00000000000000 Informazioni sul sistema Informazioni Vitali Nome del Server Indirizzo IP Verisione del Kernel Distribuzione Tempo di Esercizio Utenti Collegati Carico Medio Informazioni Hardware Processori Modello Velocità CPU Velocità BUS Dimensione Cache Bogomips del Sistema Unità PCI Unità IDE Unità SCSI Unità USB Utilizzo della Rete Dispositivo Recevuti Inviati Errori/Perdite Connessioni di Rete Stabilite Utilizzo della Memoria Memoria Fisica Disco di Swap Filesystems Montati Punto di Mount Partizione Uso Percentuale Tipo Libero Usato Dimensione Totali kB MB GB Nessuna presente Capacità Template Lingua Invia Creato da giorni ore minuti Temperatura Voltaggio Ventole Valore Min Max Isteresi Limite Etichetta C F V RPM Kernel + applicazioni Buffer Cache Vai A UPS information Name Model Mode Started Status Outages Last outage cause Last outage timestamp Line voltage Load percent Battery voltage Battery charge Time left on batteries V minutes Temperature TB TiB GiB MiB KiB PiB PB MHz GHz Virtualization Last boot B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other Unità TB Unità I2C Number of processors Number of devices Other Manufacturer Product Serial number Libero Unità NVMe OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/ja.xml000066400000000000000000000265261467431054600166500ustar00rootroot00000000000000 システム情報 システム基本情報 ホスト名 待受けIPアドレス カーネルバージョン ディストリビューション / OS 起動時間 ログインユーザー数 ロードアベレージ ハードウェア情報 プロセッサー数 モデル名 周波数 バススピード キャッシュサイズ システムBogomips PCIデバイス IDEデバイス SCSIデバイス USBデバイス ネットワーク使用状況 デバイス 受信 送信 エラー/破棄 接続中ネットワーク メモリー使用状況 物理メモリー ディスクスワップ マウント済みファイルシステム マウントポイント パーティション 使用率 タイプ 空き 使用中 サイズ 合計 kB MB GB 無し 容量 テンプレート 言語 Submit Created by 時間 温度 電圧 ファン Value Min Max Hysteresis Limit Label C F V RPM カーネル + アプリケーション バッファー キャッシュ Jump to UPS情報 UPS名 モデル名 モード 開始日時 状態 供給停止回数 最終供給停止理由 最終供給停止日時 Line voltage 負荷率 バッテリー電圧 バッテリー充電率 バッテリー残り時間 V 温度 TB TiB GiB MiB KiB PiB PB MHz GHz Virtualization Last boot B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other TBデバイス I2Cデバイス Number of processors Number of devices Other Manufacturer Product Serial number 空き NVMeデバイス OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/ko.xml000066400000000000000000000263041467431054600166610ustar00rootroot00000000000000 시스템 정보 현재 시스템 상황 Canonical 호스트명 할당된 IP 커널 버전 배포판 이름 사용 시간 현재 사용자들 평균 사용현황 하드웨어 정보 프로세서 모델 CPU 속도 BUS 속도 캐쉬 크기 BogoMIPS PCI 장치 IDE 장치 SCSI 장치 USB 장치 네트워크 사용량 장치 받음 보냄 오류 접속된 네트워크 메모리 사용량 물리 메모리 디스크 스왑 마운트된 파일시스템 마운트 지점 파티션 사용량 종류 남은 공간 사용 공간 크기 합계 kB MB GB 없음 용량 스킨 언어 제출 제작자 : 온도 전압 쿨링 팬 최소 최대 히스테리시스 제한 레이블 °C °F V RPM 커널 + 어플리케이션 버퍼 캐시 이동 : UPS 정보 이름 모델 모드 시작 시간 상태 작동 중단 마지막 작동 중단 사유 마지막 작동 중단 타임스탬프 라인 전압 부하율 배터리 전압 배터리 충전률 배터리 남은 시간 V 온도 TB TiB GiB MiB KiB PiB PB MHz GHz 가상화 마지막 부트 시간 B 시스템 언어 코드 페이지 세부 사항 CPU 최대 속도 CPU 최소 속도 전력 W 배터리 시간 전류 A 기기 라인 주파수 Hz 프로세스 실행 중 유휴 중 중지됨 좀비 대기 중 기타 프로세스 TB 장치 I2C 장치 프로세서 개수 디바이스 개수 기타 제조사 제품 시리얼 번호 남은 공간 NVMe 장치 OS 종류 메모리 갯수 속도 메모리 MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/language.php000066400000000000000000000036501467431054600200210ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: language.php 661 2012-08-27 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ // Set the correct content-type header. header('Content-Type: text/xml'); /** * default language * * @var String */ $lang = 'en'; /** * default pluginname * * @var String */ $plugin = ''; /** * application root path * * @var string */ define('PSI_APP_ROOT', realpath(dirname((__FILE__)).'/../')); include_once PSI_APP_ROOT.'/read_config.php'; if (defined('PSI_DEFAULT_LANG')) { $lang = PSI_DEFAULT_LANG; } if (isset($_GET['lang']) && (trim($_GET['lang'])!=="") && !preg_match('/[^A-Za-z\-]/', $_GET['lang']) && file_exists(PSI_APP_ROOT.'/language/'.$_GET['lang'].'.xml')) { $lang = strtolower($_GET['lang']); } if (isset($_GET['plugin'])) { if ((trim($_GET['plugin'])!=="") && !preg_match('/[^A-Za-z]/', $_GET['plugin'])) { $plugin = strtolower($_GET['plugin']); if (file_exists(PSI_APP_ROOT.'/plugins/'.$plugin.'/lang/'.$lang.'.xml')) { echo file_get_contents(PSI_APP_ROOT.'/plugins/'.$plugin.'/lang/'.$lang.'.xml'); } elseif (file_exists(PSI_APP_ROOT.'/plugins/'.$plugin.'/lang/en.xml')) { echo file_get_contents(PSI_APP_ROOT.'/plugins/'.$plugin.'/lang/en.xml'); } } } else { if (file_exists(PSI_APP_ROOT.'/language/'.$lang.'.xml')) { echo file_get_contents(PSI_APP_ROOT.'/language/'.$lang.'.xml'); } else { echo file_get_contents(PSI_APP_ROOT.'/language/en.xml'); } } phpsysinfo-3.4.4/language/nl.xml000066400000000000000000000260561467431054600166650ustar00rootroot00000000000000 Systeem Informatie Systeem Overzicht Toegewezen naam IP adres Kernelversie Distributie Uptime Huidige gebruikers Gemiddelde belasting Hardware overzicht Processors Model CPU snelheid BUS snelheid Cache grootte Systeem Bogomips PCI Apparaten IDE Apparaten SCSI Apparaten USB Apparaten Netwerkgebruik Apparaat Ontvangen Verzonden Err/Drop Aktieve Netwerkverbindingen Geheugengebruik Fysiek geheugen Swap geheugen Aangesloten bestandssystemen Mount Partitie Percentage gebruikt Type Vrij Gebruikt Grootte Totaal kB MB GB geen Capaciteit Opmaak Taal Toepassen Gegenereerd door dagen uren minuten Temperatuur Voltage Fans Waarde Min Max Hysteresis Limiet Omschrijving °C °F V RPM Kernel + Aplicaties Buffers Cached Ga naar UPS information Name Model Mode Started Status Outages Last outage cause Last outage timestamp Line voltage Load percent Battery voltage Battery charge Time left on batteries V minutes Temperature TB TiB GiB MiB KiB PiB PB MHz GHz Virtualization Last boot B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other TB Apparaten I2C Apparaten Number of processors Number of devices Other Manufacturer Product Serial number Vrij NVMe Apparaten OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/no.xml000066400000000000000000000257711467431054600166730ustar00rootroot00000000000000 Systeminformasjon Systemdetaljer Vertsnavn IP-adrssse Kjerneversjon Distribusjon Oppetid Antall brukere Last gjennomsnitt Maskinvareinformasjon Prosessorer Modell CPU frekvens BUS frekvens Mellomlagerstørrelse System Bogomips PCI enheter IDE enheter SCSI enhenter USB enheter Nettverk Enhet Mottatt Sendt Err/Drop Etablerte nettverkstilkoblinger Minnebruk Fysisk minne Disk Swap Filsystemer Bane Partisjon Bruk Type Ledig Brukt Størrelse Totalt kB MB GB ingen Kapasitet Tema Språk Send Generert med dager timer minutter Temperatur Spenning Vifter Verdi Min Maks Hysterese Grense Merke C F V RPM Kjerne + applikasjoner Buffere Mellomlagret Vis UPS informasjon Navn Modell Modus Startet Status Outages Last outage cause Last outage timestamp Line voltage Prosentvis belastning Batteri volt Batteri oppladning Gjenstående batteritid V minutter Temperatur TB TiB GiB MiB KiB PiB PB MHz GHz Virtualisering Siste oppstart B System Språk Tegnkoding Detaljer Maks CPU Hastighet Min CPU Hastighet Strøm W Batteridato Spenning A Maskin Linjefrekvens Hz Prosesser kjører dvale stoppet zombie venter annet TB enheter I2C enheter Antall prosessorer Antall enheter Other Manufacturer Product Serial number Ledig NVMe enheter OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/pl.xml000066400000000000000000000262711467431054600166660ustar00rootroot00000000000000 Informacja o systemie Stan systemu Nazwa kanoniczna hosta IP nasłuchujący Wersja jądra Nazwa dystrybucji Czas pracy Zalogowani użytkownicy Obciążenie średnie Informacja o sprzęcie Procesory Model Częstotliwość Szyna Rozmiar cache Liczba BogoMips Urządzenia PCI Urządzenia IDE Urządzenia SCSI Urządzenia USB Sieć Urządzenie Odebrano Wysłano Błędy/Porzucone Nawiązane połączenia sieciowe Wykorzystanie pamięci Pamięć fizyczna Pamięć swap Zamontowane systemy plików Punkt montowania Partycja Procentowo zajęte Typ Wolne Zajęte Rozmiar Łącznie kB MB GB brak Rozmiar Szablon Język Wyślij Utworzone przez dni godzin minut Temperatura Napięcie Wentylatory Wartość Min Max Histereza Limit Nazwa °C °F V RPM Jądro i aplikacje Bufory Cache Skocz do Informacja o UPS Nazwa Model Tryb Wystartował Status Zaniki Ostatni zanik Czas ostatniego zaniku Napięcie linii Procent obciążenia Napięcie baterii Naładowanie baterii Utrzyma na bateriach V minut Temperatura TB TiB GiB MiB KiB PiB PB MHz GHz Wirtualizacja Wystartował B Język systemu Strona kodowa Szczegóły Częstotliwość Max Częstotliwość Min Moc W Data baterii Prąd A Maszyna Częstotliwość linii Hz Procesy uruchomione uśpione zatrzymane zombi oczekujące inne Urządzenia TB Urządzenia I2C Liczba procesorów Liczba urządzeń Inne Producent Produkt Number seryjny Wolne Urządzenia NVMe Typ systemu Liczba chipów pamięci Prędkość Układy Pamięci MT/s GT/s Status brzęczka Wirtualizer phpsysinfo-3.4.4/language/pt-br.xml000066400000000000000000000263561467431054600173030ustar00rootroot00000000000000 Informação do Sistema Sistema Vital Nome do Host Canônico Ouvindo o IP Versão do Kernel Distribução Ativo Usuários Ativos Carga Média Informação do Hardware Processadores Modelo CPU velocidade BUS velocidade Tamanho do Cache Bogomips do Sistema Periféricos PCI Periféricos IDE Periféricos SCSI Periféricos USB Uso da Rede Dispositivo Recebido Enviado Erro/Perdido Conexões de Rede Estabilizadas Uso da Memória Memória Física Swap do Disco Sistemas de Arquivos Montados Ponto Montado Partição Percentual Tipo Livre Usado Tamanho Totais kB MB GB nenhum Capacidade Estilo Idioma Submeter Criado por dias horas minutos Temperatura Voltagem Ventiladores Valor Min Max Hysteresis Limite Rótulos C F V RPM Kernel + aplicações Buffers Cached Ir para Informação do UPS Nome Modelo Modo Iniciado Status Queda Causa da Última Queda Último registro de Queda Voltagem de linha Carga porcentual Voltagem da bateria Carga da bateria Tempo restante das baterias V minutos Temperatura TB TiB GiB MiB KiB PiB PB MHz GHz Virtualização Último boot B Idioma do Sistema Página de código Detalhes CPU Speed Max CPU Speed Min Power W Data da bateria Corrente A Máquina Frequência da linha Hz Processos executando dormindo parado zombie esperando outro Periféricos TB Periféricos I2C Number of processors Number of devices Other Manufacturer Product Serial number Livre Periféricos NVMe OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/pt-pt.xml000066400000000000000000000262151467431054600173150ustar00rootroot00000000000000 Informação do Sistema Sistema Hostname IP Versão do Kernel Distribuição Ativo Utilizadores Ativos Carga Média Informação de Hardware Processadores Modelo Velocidade CPU Velocidade BUS Tamanho da Cache Bogomips do Sistema Periféricos PCI Periféricos IDE Periféricos SCSI Periféricos USB Utilização da Rede Dispositivo Recebido Enviado Erro/Perdido Conexões de Rede Estabelecidas Utilização da Memória Memória Física Swap do Disco Sistemas de ficheiros Ponto Montado Partição Percentagem Tipo Livre Usado Tamanho Totais kB MB GB nenhum Capacidade Estilo Idioma Submeter Criado por dias horas minutos Temperatura Tensão Ventiladores Valor Min Max Hysteresis Limite Rótulos C F V RPM Kernel + aplicações Buffers Cached Ir para Informação da UPS Nome Modelo Modo Iniciado Estado Queda Causa da última falha Último registo de falha Tensão da linha Carga percentual Tensão da bateria Carga da bateria Tempo restante da bateria V minutos Temperatura TB TiB GiB MiB KiB PiB PB MHz GHz Virtualização Último arranque B Linguagem do sistema Codificação Detalhes Máx CPU freq Min CPU freq Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other Periféricos TB Periféricos I2C Number of processors Number of devices Other Manufacturer Product Serial number Livre Periféricos NVMe OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/ro.xml000066400000000000000000000263151467431054600166720ustar00rootroot00000000000000 Informații despre sistem Informații vitale Numele canonic Adresă IP Kernel Version Nume Distribuție Timp de Viață Utilizatori Curenți Încărcarea Sistemului Informații Hardware Procesoare Model Viteza CPU Viteză BUS Marime Cache Bogomips Sistem Dispozitive PCI Dispozitive IDE Dispozitive SCSI Dispozitive USB Utilizarea Rețelei Dispozitiv Recepționat Trimis Erori/Drop Conexiuni Rețea Stabilite Utilizarea Memoriei Memorie Fizică Swap Disc Sisteme de Fișiere Montate Punct Montare Partiție Procent Utilizare Tip Liber Utilizat Mărime Total kB MB GB Nici Unul Capacitate Model Limbă Actualizează Creat de zile ore minute Temperatură Tensiune Ventilatoare Valoare Minim Maxim Histeresis Limită Etichetă C F V RPM Kernel + applicații Buffers Cache-uit Sari la Informații UPS Nume Model Mod Pornit la Stare Număr Opriri Ultima cauză a opririi Data ultimei opriri Tensiunea Rețelei Procent Încărcare Tensiunea Bateriei Încărcarea Bateriei Timp rămas pe baterie V minute Temperatură TB TiB GiB MiB KiB PiB PB MHz GHz Virtualizare Ultima pornire B Limba Sistenului de Operare Code Page Detalii Viteză Maximă CPU Viteză Minimă CPU Power W Dată baterie Actual A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other Dispozitive TB Dispozitive I2C Number of processors Number of devices Other Manufacturer Product Serial number Liber Dispozitive NVMe OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/ru.xml000066400000000000000000000306531467431054600167000ustar00rootroot00000000000000 Системная информация Общая информация Имя системы IP-адрес Версия ядра Операционная система Время работы Активных пользователей Средняя загрузка Установленное оборудование Количество процессоров Модель Частота процессора Частота системной шины Размер кэша Производительность в bogomips PCI устройства IDE устройства SCSI устройства USB устройства Использование сети Устройство Получено Отправлено Ошибки/Падения Установлено сетевых подключений Использование памяти Физическая память Файл подкачки Смонтированные файловые системы Точка монтирования Устройство Использовано Тип Свободно Занято Общий размер Всего кб Мб Гб Отсутствуют Вместимость Шаблон Язык Применить Сгенерировано с помощью дней часов минут Температура Напряжение Вентиляторы Значение Минимум Максимум Гистерезис Лимит Значение C F В Об/мин Ядро + приложения Буферы Кэшировано Перейти к ИБП Название Модель Режим Время включения Состояние Переходы на батарею Причина последнего перехода Время последнего перехода Напряжение сети Нагрузка Напряжение батареи Уровень заряда батареи Время работы на батареях В мин. Температура TB TiB GiB MiB KiB PiB PB MHz GHz Виртуализация Система загружена B Язык системы Кодировка страницы Подробнее Максимальная скорость CPU Минимальная скорость CPU Мощность W Дата батареи Ток A Машина Чистота сети Гц Процессы работают спят остановлены повисли ждущие Другое TB устройства I2C устройства Number of processors Number of devices Other Manufacturer Product Serial number Свободно NVMe устройства OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/sk.xml000066400000000000000000000262631467431054600166710ustar00rootroot00000000000000 Informácie o systéme Základ Systému Kanonické Meno Hostiteľa Načúvajúca IP Verzia Jadra Meno Distribúcie Čas od Spustenia Súčasný Užívatelia Priemer Zaťaženia Informácie o Hardware Procesory Model Rýchlosť procesora Rýchlosť zbernice Veľkosť cache Bogomipy Systému PCI Zariadenia IDE Zariadenia SCSI Zariadenia USB Zariadenia Využitie Siete Zariadenie Prijatých Odoslaných Chyby/Zahodené Vytvorené Sieťove Spojenia Využitie Pamäte Fyzická Pamäť Odkladací Priestor na Disku (Swap) Pripojené Súborové Systémy Miesto pripojenia Partícia Využitie Typ Voľné Použité Veľkosť Spolu kB MB GB nič Kapacita Predloha Jazyk Odoslať Vytvorené s dní hodín minút Teplota Voltáž Ventilátory Hodnota Min Max Hysterézia Limit Názov C F V OZM(RPM) Jadro + aplikácie Buffery Cache Skoč na UPS information Name Model Mode Started Status Outages Last outage cause Last outage timestamp Line voltage Load percent Battery voltage Battery charge Time left on batteries V minutes Temperature TB TiB GiB MiB KiB PiB PB MHz GHz Virtualization Last boot B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other TB Zariadenia I2C Zariadenia Number of processors Number of devices Other Manufacturer Product Serial number Voľné NVMe Zariadenia OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/sl.xml000066400000000000000000000262541467431054600166720ustar00rootroot00000000000000 Sistemske informacije Stanje sistema Gostitelj IP naslov strežnika Verzija jedra Ime distribucije Čas neprekinjenega delovanja Trenutni uporabniki Povprečna obremenitev Informacije o strojni opremi Procesorji Oznaka Takt CPE Hitrost vodila Velikost predpomnilnika BogoMIPS PCI naprave IDE naprave SCSI naprave USB naprave Stanje omrežja Naprava Prejeto Poslano Napake/Zavrženo Vzpostavljena omrežna povezava Poraba pomnilnika Fizični pomnilnik (RAM) Izmenjalni pomnilnik (SWAP) Vpeti datotečni sistemi Priklopna točka Particija Poraba Tip Prosto Porabljeno Velikost Skupaj kB MB GB brez Kapaciteta Shema Jezik Potrdi Generirano s pomočjo dni ur minut Temperatura Napetost Ventilatorji Vrednost Min Max Histereza Omejitev Oznaka C F V RPM Jedro + programje Medpomnilniki Predpomnjeno Skoči na UPS informacije Ime Oznaka Način Zagnan Stanje Izpadi Razlog zadnjega izpada Čas zadnjega izpada Omrežna napetost Obremenitev (%) Napetost baterije Moč baterije Čas do izpraznitve V min Temparatura TB TiB GiB MiB KiB PiB PB MHz GHz Virtualizacija Zadnji zagon B Sistemski jezik Kodiranje Podrobnosti Takt CPE (max) Takt CPE (min) Moč W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other TB naprave I2C naprave Number of processors Number of devices Other Manufacturer Product Serial number Prosto NVMe naprave OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/sv.xml000066400000000000000000000261011467431054600166730ustar00rootroot00000000000000 Systeminformation Allmän information Värdnamn IP-adress Kernel-version Distribution Drifttid Aktuella användare Medelbelastning Hårdvaruinformation Processorer Modell Processorhastighet Busshastighet Cachestorlek Bogomips PCI-enheter IDE-enheter SCSI-enheter USB-enheter Nätverksanvändning Enhet Mottaget Skickat Fel/Tapp Upprättade nätverksanslutningar Minnesanvändning Fysiskt minne Växlingsfil Monterade filsystem Monteringspunkt Partition Användning Typ Ledigt Använt Storlek Totalt kB MB GB inga Kapacitet Mall Språk Skicka Skapad av dagar timmar minuter Temperatur Spänning Fläktar Värde Min Max Hysteresis Gräns Etikett C F V RPM Kärna + applikationer Buffrat Cachat Hoppa till UPS-information Namn Modell Läge Startad Status Avbrott Orsak senaste avbrott Tidpunkt senaste avbrott Nätspänning Belastning procent Batterispänning Batteriladdning Tid kvar på batteri V minuter Temperatur TB TiB GiB MiB KiB PiB PB MHz GHz Virtualisering Senaste uppstart B Systemets språk Kodtabell Detaljer Processorhastighet Max Processorhastighet Min Effekt W Batteridatum Ström A Maskin Nätfrekvens Hz Processer kör sover stoppade zombier väntande övriga TB-enheter I2C-enheter Antal processorer Antal enheter Other Manufacturer Product Serial number Ledigt NVMe-enheter OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/th.xml000066400000000000000000000275401467431054600166660ustar00rootroot00000000000000 รายละเอียดเครื่อง ข้อมูลระบบ ชื่อเครื่อง ไอพี Kernel Version ระบบปฏิบัติการ เวลารวมใช้งาน จำนวนผู้ใช้งานปัจจุบัน Load Averages ข้อมูลอุปกรณ์ โพรเซสเซอร์ โมเดล ความเร็ว ซีพียู คาวมเร็ว บัส ขนาดแคช System Bogomips อุปกรณ์ PCI อุปกรณ์ IDE อุปกรณ์ SCSI อุปกรณ์ USB การใช้งาน ระบบเน็ตเวิร์ค อุปกรณ์ รับ ส่ง Err/Drop Established Network Connections การใช้งาน แรม Physical Memory Disk Swap ข้อมูลการใช้งาน ฮาร์ดดิส ไดรว์ ตำแหน่ง ดิส การใช้งาน ชนิด คงเหลือ ใช้งาน ขนาด รวม kB MB GB none Capacity เทมเพลท ภาษา ตกลง สร้างโดย วัน ชั่วโมง นาที อุณหภูมิ Voltage Fans Value ต่ำสุด สูงสุด Hysteresis จำกัด Label C F V RPM Kernel + applications Buffers แคช Jump to ข้อมูล UPS ชื่อ โมเดล โหมด เริ่ม สถานะ Outages Last outage cause Last outage timestamp Line voltage Load percent Battery voltage Battery charge Time left on batteries V minutes Temperature TB TiB GiB MiB KiB PiB PB MHz GHz Virtualization เวลาการปิดเครื่องล่าสุด B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other อุปกรณ์ TB อุปกรณ์ I2C Number of processors Number of devices Other Manufacturer Product Serial number คงเหลือ อุปกรณ์NVMe OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/tr.xml000066400000000000000000000262531467431054600167000ustar00rootroot00000000000000 Sistem Bilgisi System Özeti Sunucu Adı IP Çekirdek Versiyonu Dağıtım Adı Çalışma Süresi Aktif Kullanıcı Yük Ortalamaları Donanım Bilgisi İşlemciler Model CPU Hızı BUS Hızı Önbellek Boyutu Sistem Bogomips PCI Aygıtlar IDE Aygıtlar SCSI Aygıtlar USB Aygıtlar Ağ Kullanımı Aygıt Alındı Yollandı Hata/Drop Kurulan Ağ Bağlantıları Hafıza kullanımı Fiziksel hafıza Takas Alanı Bağlı dosya sistemleri Bağlamanoktası Bölüm Kullanım Tip Boş Kullanım Boyut Toplam kB MB GB yok Kapasite Şablon Dil Gönder Oluşturan gün saat dakika Sıcaklık Voltaj Fanlar Değer Taban Tavan Geçikme Limit Etiket C F V RPM Çekirdek + uygulamalar Tamponlar Ön Belleğe Alındı Jump to UPS bilgisi Adı Model Modu Başlangıç Durum Kesintiler Son Kesinti Sebebi Son Kesinti Zamanı Hat voltajı Yük oranı Batarya voltajı Batarya şarj oranı Batarya kalan süre V dakika Sıcaklık TB TiB GiB MiB KiB PiB PB MHz GHz Sanallaştırma Son Açılış B Sistem Lisanı Kod Sayfa Detaylar CPU Tavan Hızı CPU Taban Hızı Güç W Batarya Tarihi Mevcut A Makine Hat Frekansı Hz İşlemciler çalışıyor uyuyor durduruldu zombie bekliyor diğer TB Aygıtlar I2C Aygıtlar İşlemcilerin numaralari Sürücülerin numaralari Other Manufacturer Product Serial number Boş NVMe Aygıtlar OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/translation-plugin.xsd000066400000000000000000000024741467431054600221020ustar00rootroot00000000000000 phpsysinfo-3.4.4/language/translation.xsd000066400000000000000000000024601467431054600206010ustar00rootroot00000000000000 phpsysinfo-3.4.4/language/tw.xml000066400000000000000000000260161467431054600167020ustar00rootroot00000000000000 系統資料 主要資料 主機名稱 連線 IP (Listen) 核心版本 Linux 名稱 運作時間 目前的使用者 平均負荷 硬體資料 處理器 型號 CPU 速度 BUS 速度 快取大小 系統 Bogomips PCI 設備 IDE 設備 SCSI 設備 USB 設備 網路使用率 設備 收到 送出 錯誤/訊號遺失 連結網路 記憶使用率 實體記憶 硬碟備存 (Disk Swap) 掛載檔案系統 掛載位置 硬碟分割 使用率 類型 可用 已用 大小 總共 kB MB GB 沒有 限制 佈景 語言 送出 建立於 小時 分鐘 溫度 電壓 風扇 數值 最小 最大 Hysteresis 限制 標籤 C F V RPM 核心跟軟體 緩衝 快取 跳到 電源資料 名稱 型號 模式 已啟動 狀態 中斷 上次中斷原因 上次中斷時間 線路電壓 負荷百分比 電池電壓 電池總額 電磁餘額時間 V 溫度 TB TiB GiB MiB KiB PiB PB MHz GHz 虛擬化 Last boot B System Language Code Page Details CPU Speed Max CPU Speed Min Power W Battery date Current A Machine Line frequency Hz Processes running sleeping stopped zombie waiting other TB 設備 I2C 設備 Number of processors Number of devices Other Manufacturer Product Serial number 可用 NVMe 設備 OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/uk.xml000066400000000000000000000303631467431054600166670ustar00rootroot00000000000000 Системна інформація Загальна інформація Ім'я системи IP-адреса Версія ядра Назва дистрибутиву Час роботи Користувачі Середнє навантаження Апаратні засоби Процесори Модель Частота Частота шини Розмір кешу Продуктивність у Bogomips PCI пристрої IDE пристрої SCSI пристрої USB пристрої Використання мережі Пристрій Отримано Відправлено Помилок/Дропів Встановлені мережеві з'єднання Використання пам'яті Фізична пам'ять Файл підкачки Змонтовані файлові системи Точка монтування Розділ диску Використання Тип Вільно Використано Розмір Загальний розмір Кб Мб Гб Відсутні Ємність Шаблон Мова Змінити Згенеровано за допомогою днів годин хвилин Температура Напруга Кулери Значення Мінімум Максимум Гістерезис Ліміт Назва C F В RPM Ядро + програми Буфери Закешовано Перейти до ДБЖ Ім'я Модель Режим Час увімкнення Стан Кількість переходів на батарею Причина останнього переходу Час останнього переходу Напруга мережі Навантаження Напруга батареї Рівень заряду батареї Час роботи на батареях В хвил. Температура TB TiB GiB MiB KiB PiB PB MHz GHz Віртуалізація Останнє завантаження B Мова системи Кодування Докладніше Максимальна швидкість CPU Мінімальна швидкість CPU Потужність W Дата батареї Струм A Машина Частота мережі Гц Процеси працюють сплять зупинено зомбі очікують інше TB пристрої I2C пристрої Кількість процесорів Кількість пристроїв Інше Manufacturer Product Serial number Вільно NVMe пристрої OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/language/zh.xml000066400000000000000000000260321467431054600166670ustar00rootroot00000000000000 系统信息 主要信息 主机名称 监听IP 内核版本 发行版名称 运行时间 当前用户 平均负载 硬件信息 处理器 型号 CPU 速度 BUS 速度 缓存大小 系统 Bogomips PCI 设备 IDE 设备 SCSI 设备 USB 设备 网络使用率 设备 已接收 已发送 错误/丢包 网络链接 内存使用率 物理内存 磁盘交换区 已挂载文件系统 挂载位置 硬盘分区 使用率 类型 可用 已用 大小 总共 kB MB GB 没有 限制 主题 语言 提交 创建于 小时 分钟 温度 电压 风扇 数值 最小 最大 滞后 限制 标签 C F V RPM 内核与应用 缓冲 缓存 跳转到 电源信息 名称 型号 模式 已启动 状态 中断 上次中断原因 上次中断时间 线路电压 负载百分比 电池电压 电池点亮总额 电池剩余时间 V 温度 TB TiB GiB MiB KiB PiB PB MHz GHz 虚拟化 上次启动 B 系统语言 系统编码 详细信息 最大CPU 速度 最小CPU 速度 电源 W 电池日期 Current A Machine Line frequency Hz 进程数 运行中 休眠中 已停止 zombie 等待中 other TB 设备 I2C 设备 Number of processors Number of devices Other 生产厂家 Product Serial number 可用 NVMe 设备 OS Type Number of memory chips Speed Memory Chips MT/s GT/s Beeper status Virtualizer phpsysinfo-3.4.4/phpsysinfo.ini.new000066400000000000000000001051071467431054600174350ustar00rootroot00000000000000; PSI Config File ; ; @category PHP ; @package PSI ; @author Michael Cramer ; @copyright 2009 phpSysInfo ; @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version ; @version SVN: $Id: phpsysinfo.ini.new 705 2012-11-11 00:33:29Z namiltd $ ; @link http://phpsysinfo.sourceforge.net [main] ; ******************************** ; MAIN PARAMETERS ; ******************************** ; Turn on debugging of some functions and include errors and warnings in xml and provide a popup for displaying errors ; - false : no debug information are stored in xml or displayed ; - true : debug information stored in xml and displayed *be careful if set this to true, may include sensitive information from your pc* ; DEBUG=false ; Turn on logging/unlogging of functions executeProgram() and rfts() ; example : executeProgram () and rfts () record the results to the "/tmp/phpsysinfo.log" file ; LOG="/tmp/phpsysinfo.log" ; example : executeProgram () and rfts () read the results from the "/tmp/phpsysinfo.log" file ; LOG="-/tmp/phpsysinfo.log" ; example : executeProgram () and rfts () read the results from the "/tmp/phpsysinfo.log" file ; LOG="+/tmp/phpsysinfo.log", if lack in the log file it runs normally ; LOG=false ; Turn on/off compression for JavaScript file ; - JS_COMPRESSION=false //no compression (recommended with slow processor) ; - JS_COMPRESSION="None" //code minimizing ; - JS_COMPRESSION="Normal" //code packing ; JS_COMPRESSION="Normal" ; Additional paths where to look for installed programs ; Example : ADD_PATHS="/opt/bin,/opt/sbin" ; ADD_PATHS=false ; List of IP addresses (IPv4) of clients authorized to run ; Example : ALLOWED="127.0.0.1,192.168.1.48,192.168.0.0/24" //allowed IP 127.0.0.1, 192.168.1.48 and 192.168.0.0/24 ; ALLOWED=false //no IP checking ; ALLOWED=false ; Enable JSONP data mode (e.g. /phpsysinfo/xml.php?plugin=complete&jsonp&callback=getData) ; Disabled by default for security reasons. ; - false : JSONP data mode disabled ; - true : JSONP data mode enabled ; ;JSONP=false ; List of sudo commands ; Example : SUDO_COMMANDS="iptables-save" //execute "sudo iptables-save" instead "iptables-save" ; SUDO_COMMANDS=false //no sudo commands ; SUDO_COMMANDS=false ; Order of data blocks ; Example : BLOCKS="vitals,hardware,memory,filesystem,network,voltage,current,temperature,fans,power,other,ups" or BLOCKS=true //default order ; BLOCKS=false //hide all blocks ; BLOCKS=true ; Maximum time in seconds a script is allowed to run before it is terminated by the parser ; ;MAX_TIMEOUT=30 ; executeProgram() timeout value in seconds ; ;EXEC_TIMEOUT=30 ; snmprealwalk() and executeProgram("snmpwalk") number of seconds until the first timeout ; ;SNMP_TIMEOUT=3 ; snmprealwalk() and executeProgram("snmpwalk") number of times to retry if timeouts occur ; ;SNMP_RETRY=0 ; Root path of the system ; Example : ROOTFS="/rootfs" ; ;ROOTFS="/" ; External Linux, GNU Hurd, DrayOS and FortiOS connection parameters via SSH ; For safety reasons make sure that phpsysinfo.ini cannot be read by the network or other users! ; These settings can also be entered for a specific plug-in so that only it connects to an external server ; For safety reasons make sure that phpsysinfo.ini cannot be read by the network or other users! ; ;SSH_HOSTNAME="hostname:22" ;SSH_USER="username" ;SSH_PASSWORD="password" ; ; Additional paths where to look for installed programs ; Example : SSH_ADD_PATHS="/sbin,/usr/sbin" ; ;SSH_ADD_PATHS=false ; ; Additional SSH options ; Example : SSH_ADD_OPTIONS="KexAlgorithms=+diffie-hellman-group1-sha1,HostKeyAlgorithms=+ssh-dss,Ciphers=+3des-cbc" ; ;SSH_ADD_OPTIONS="" ; External WinNT server connection parameters ; Possibility available for WinNT and partly for LINUX (if wmic tool from wmic-linux or openvas-smb package is installed) ; These settings can also be entered for a specific plug-in so that only it connects to an external server ; For safety reasons make sure that phpsysinfo.ini cannot be read by the network or other users! ; ;WMI_HOSTNAME="hostname" ;WMI_USER="username" ;WMI_PASSWORD="password" ; Plugins that should be included in xml and output ; List of plugins should look like "plugin,plugin,plugin". See /plugins directory ; - PLUGINS="Raid,PS" //list of plugins ; - PLUGINS=false //no plugins ; included plugins: ; - Raid - show the software, fake, zpool or megaraid RAID status ; - PS - show a process tree of all running processes ; - PSStatus - show a graphical representation if a process is running or not ; - Quotas - show a table with all quotas that are active and there current state ; - SMART - show S.M.A.R.T. information from drives that support it ; - BAT - show battery state on a laptop, tablet or phone ; - UpdateNotifier - show update notifications (only for Ubuntu server) ; - SNMPPInfo - show printers info via SNMP ; - Uprecords - show uprecords info ; - PingTest - show Ping Test info ; - StableBit - show StableBit Scanner info (WinNT) ; - DiskLoad - show Disk Load info (WinNT) ; - HyperV - show Hyper-V info (WinNT) ; - Docker - show docker stats ; - Viewer - show output of any command or file viewer.tmp contents ; PLUGINS=false ; ******************************** ; DISPLAY PARAMETERS ; ******************************** ; Define the default display mode ; auto: let user browser choose the mode ; dynamic: use javascript to refresh data ; static: static page (use metatag to reload page) ; bootstrap: use twitter bootstrap template ; DEFAULT_DISPLAY_MODE="auto" ; Define the default language ; DEFAULT_LANG="en" ; Define the default template ; DEFAULT_TEMPLATE="phpsysinfo" ; Define the default template for frontend "bootstrap" ; DEFAULT_BOOTSTRAP_TEMPLATE="phpsysinfo" ; Show or hide language picklist ; SHOW_PICKLIST_LANG=true ; Show or hide template picklist ; SHOW_PICKLIST_TEMPLATE=true ; Show CPU list expanded ; SHOW_CPULIST_EXPANDED=true ; Show CPU info expanded ; SHOW_CPUINFO_EXPANDED=false ; Show memory infos expanded ; SHOW_MEMORY_INFOS_EXPANDED=false ; Show virtualizer info for Linux, Android and WinNT ; SHOW_VIRTUALIZER_INFO=true ; Hide loader for frontend "bootstrap" ; HIDE_BOOTSTRAP_LOADER=false ; Increase the body width for the "dynamic" frontend by pixels. The value should be even ; - 0 : disabled ; - 200 : wider by 200px ; Default is 0 pixels ; INCREASE_WIDTH=0 ; Define the interval for refreshing data in ms ; - 0 : disabled ; - 1000 : 1 second ; Default is 60 seconds ; REFRESH=60000 ; Show a graph for current cpuload ; - true : displayed, but it's a performance hit (because we have to wait to get a value, 1 second) ; - "compact" : displayed like above but in compact mode ; - false : will not be displayed (also in Load Averages field) ; LOAD_BAR="compact" ; Display the virtual host name and address ; - Default is canonical host name and address ; - Use USE_VHOST=true to display virtual host name. ; USE_VHOST=false ; Controls the units & format for network, memory and filesystem ; - 1 KiB = 2^10 bytes = 1,024 bytes ; - 1 KB = 10^3 bytes = 1,000 bytes ; - "B" everything is in Byte ; - "PiB" everything is in PeBiByte ; - "TiB" everything is in TeBiByte ; - "GiB" everything is in GiBiByte ; - "MiB" everything is in MeBiByte ; - "KiB" everything is in KiBiByte ; - "auto_binary" everything is automatic done if value is to big for, e.g MiB then it will be in GiB ; - "PB" everything is in PetaByte ; - "TB" everything is in TeraByte ; - "GB" everything is in GigaByte ; - "MB" everything is in MegaByte ; - "KB" everything is in KiloByte ; - "auto_decimal" everything is automatic done if value is to big for, e.g MB then it will be in GB ; BYTE_FORMAT="auto_binary" ; Format in which temperature is displayed ; - "c" shown in celsius ; - "f" shown in fahrenheit ; - "c-f" both shown first celsius and fahrenheit in braces ; - "f-c" both shown first fahrenheit and celsius in braces ; TEMP_FORMAT="c" ; Show devices infos ; Example : SHOW_DEVICES_INFOS=true ; SHOW_DEVICES_INFOS=true ; Show devices serial number ; Example : SHOW_DEVICES_SERIAL=true ; SHOW_DEVICES_SERIAL=false ; Format in which datetime is displayed ; - "UTC" shown as UTC string ; - "locale" shown as Locale string ; DATETIME_FORMAT="UTC" ; ******************************** ; SENSORS PARAMETERS ; ******************************** ; Define the motherboard monitoring program ; We support the following programs so far ; - HDDtemp http://www.guzu.net/linux/hddtemp.php (Linux) ; - LMSensors http://www.lm-sensors.org/ (Linux) ; - Healthd http://healthd.thehousleys.net/ (FreeBSD) ; - HWSensors http://www.openbsd.org/ (OpenBSD) ; - MBMon http://www.nt.phys.kyushu-u.ac.jp/shimizu/download/download.html (FreeBSD/Linux/NetBSD/OpenBSD) ; - MBM5 http://mbm.livewiredev.com/ (data from file data/MBM5.csv - WinNT) ; - CpuMem No addon tool neded (FreeBSD/Linux/WinNT or others but with the dmidecode utility installed) ; - IPMItool http://ipmitool.sourceforge.net/ (Linux) ; - FreeIPMI http://www.gnu.org/software/freeipmi/ (FreeBSD/Linux/OpenBSD/SunOS) ; - IPMIutil http://ipmiutil.sourceforge.net/ (Darwin/FreeBSD/Linux/SunOS/WinNT) ; - IPMIcfg http://www.supermicro.com/en/solutions/management-software/ipmi-utilities (Linux/WinNT) ; - K8Temp http://hur.st/k8temp/ (DragonFly/FreeBSD/NetBSD/OpenBSD) ; - PiTemp No addon tool neded (Raspberry Pi and Banana Pi - Linux) ; - OHM http://openhardwaremonitor.org/ (WinNT) ; - ThermalZone No addon tool neded (WinNT/Linux/Android) ; - QTSsnmp SNMP service enabled and snmp-utils package installed: opkg install snmp-utils (QNAP - QTS Linux) ; - Hwmon No addon tool neded (Linux) ; - SpeedFan http://www.almico.com/speedfan.php (required tool packaged in: tools/speedfan/SpeedFanGet_bin.zip) (WinNT) ; - Thinkpad No addon tool neded (Lenovo Thinkpad - Linux) ; - NvidiaSMI Nvidia GPU drivers (FreeBSD/Linux/SunOS/WinNT) ; - FortiSensor No addon tool neded (Fortinet devices - FortiOS) ; ; Example: If you want to use lmsensors : SENSOR_PROGRAM="LMSensors" ; If you want to use lmsensors and IPMItool: SENSOR_PROGRAM="LMSensors,IPMItool" ; SENSOR_PROGRAM=false ; Show events of sensors ; - true : show events ; - false : do not show events ; SENSOR_EVENTS=true ; Sort sensors list ; SORT_SENSORS_LIST=false ; Hide sensors ; Example : HIDE_SENSORS="FAN2/PS (PMBus 1),VDIMM GH" ; HIDE_SENSORS="" ; Some sensors programs contain an additional configuration in the relevant sections [sensor_...] ; ******************************** ; FILESYSTEM PARAMETERS ; ******************************** ; Show mount point ; - true : show mount point ; - false : do not show mount point ; SHOW_MOUNT_POINT=true ; Show mount option ; - true : show mount option ; - false : do not show mount option ; SHOW_MOUNT_OPTION=true ; Show mount credentials ; - true : show mount credentials ; - false : do not show mount credentials ; SHOW_MOUNT_CREDENTIALS=false ; Show inode usage ; - true : display used inodes in percent ; - false : hide them ; SHOW_INODES=true ; Hide mounts ; Example : HIDE_MOUNTS="/home,/usr" ; HIDE_MOUNTS="" ; Filesystem usage warning threshold in percent ; - 0 : disabled ; - 90 : 90% ; Default is 90% ; FS_USAGE_THRESHOLD=90 ; Ignore usage and usage threshold for filesystem types ; Example : IGNORE_THRESHOLD_FS_TYPES="packagefs, iso9660, squashfs, devfs, devtmpfs, tmpfs, lxfs, udf, UDF, CDFS" ; IGNORE_THRESHOLD_FS_TYPES="packagefs, iso9660, squashfs, devfs, devtmpfs, tmpfs, lxfs, udf, UDF, CDFS" ; Ignore usage of mounts ; Example : IGNORE_USAGE="/root,/mnt/c" ; IGNORE_USAGE="" ; Ignore total size of mounts ; Example : IGNORE_TOTAL="/System/Volumes/VM,/System/Volumes/Prebot" ; IGNORE_TOTAL="" ; Ignore free space size of mounts ; Example : IGNORE_FREE="/zfs/space,/zfs/data" ; IGNORE_FREE="" ; Hide filesystem types ; Example : HIDE_FS_TYPES="tmpfs,devtmpfs,usbfs,bstfolder" ; HIDE_FS_TYPES="" ; Hide partitions ; Example : HIDE_DISKS="rootfs,/dev/sda1" ; HIDE_DISKS=true //hide all partitions ; HIDE_DISKS="" ; Hide totals information ; HIDE_TOTALS=false ; ******************************** ; NETWORK PARAMETERS ; ******************************** ; Hide network interfaces ; Example : HIDE_NETWORK_INTERFACE="eth0,sit0" ; HIDE_NETWORK_INTERFACE=true //hide all network interfaces ; HIDE_NETWORK_INTERFACE="" ; Use a regular expression in the name of a hidden network interface (e.g. HIDE_NETWORK_INTERFACE="docker.*") ; - true : use a regular expression ; - false : do not use a regular expression ; HIDE_NETWORK_INTERFACE_REGEX=false ; Show network interfaces infos for Linux, Android, FreeBSD, NetBSD, OpenBSD, Haiku, Darwin, SunOS, Minix, QNX and WinNT ; Example : SHOW_NETWORK_INFOS=true ; SHOW_NETWORK_INFOS=true ; Hide MAC address in the infos ; HIDE_NETWORK_MACADDR=false ; Show bridge info in the network interface name ; SHOW_NETWORK_BRIDGE=true ; Sort network interfaces list ; SORT_NETWORK_INTERFACES_LIST=false ; Show network infos expanded ; SHOW_NETWORK_INFOS_EXPANDED=false ; Show network active speed ; - true : display network active speed ; - "bps" : display network active speed in bits per second (b/s, Kb/s, etc...) ; - false : hide them ; SHOW_NETWORK_ACTIVE_SPEED=false ; ******************************** ; UPS PARAMETERS ; ******************************** ; Define the ups monitoring program ; We support the following programs so far ; - Apcupsd http://www.apcupsd.com/ ; - Nut http://www.networkupstools.org/ ; - SNMPups monitoring via Simple Network Management Protocol (SNMP) ; - PowerSoftPlus http://ever.eu/ ; - pmset based on the result of the command "pmset -g batt" on Darwin system ; ; Example: If you want to use Apcupsd : UPS_PROGRAM="Apcupsd" ; If you want to use Apcupsd and Nut : UPS_PROGRAM="Apcupsd,Nut" ; UPS_PROGRAM=false ; Apcupsd supports multiple UPSes ; You can specify comma delimited list in the form : or :. The defaults are: "127.0.0.1:3551" ; See the following parameters in apcupsd.conf: NETSERVER, NISIP, NISPORT ; It uses the defaults if not specified. ; UPS_APCUPSD_LIST=false ; define how to access the Apcupsd data ; - "command" execute apcaccess command ; - "data" for reading data from file data/upsapcupsd{ups_number}.tmp ; content is the output from "apcaccess status" ; UPS_APCUPSD_ACCESS="command" ; Apcupsd has a CGI monitoring utility called apcupsd-cgi ; You can set the parameter below to true if you have it installed - this will add apcupsd-cgi links to the UPS tree ; UPS_APCUPSD_CGI_ENABLE=false ; Nut supports multiple UPSes ; You can specify comma delimited list in the form : or :. The defaults are: "127.0.0.1:3493" ; See the following parameters in upsd.conf: LISTEN ; It uses the defaults if not specified. ; UPS_NUT_LIST=false ; define how to access the Nut data ; - "command" execute upsc command ; - "data" for reading data from file data/upsnut{ups_number}.tmp ; content is the output from "upsc {upsname}" ; UPS_NUT_ACCESS="command" ; SNMPups supports multiple UPSes ; You can specify comma delimited list in the form : or :. The default port is 161 ; List must be specified. ; UPS_SNMPUPS_LIST=false ; define how to access the SNMP data ; - "php-snmp" execute php snmprealwalk function (php-snmp module must be installed) ; - "command" execute snmpwalk command ; - "data" for reading data from file data/upssnmpups{ups_number}.tmp ; content is the output from: ; "snmpwalk -Ona -c public -v 1 -r 0 -t 3 {upsaddress} .1.3.6.1.4.1.318.1.1.1.1>upssnmpups{ups_number}.tmp ; snmpwalk -Ona -c public -v 1 -r 0 -t 3 {upsaddress} .1.3.6.1.4.1.318.1.1.1.2>>upssnmpups{ups_number}.tmp ; snmpwalk -Ona -c public -v 1 -r 0 -t 3 {upsaddress} .1.3.6.1.4.1.318.1.1.1.3>>upssnmpups{ups_number}.tmp ; snmpwalk -Ona -c public -v 1 -r 0 -t 3 {upsaddress} .1.3.6.1.4.1.318.1.1.1.4>>upssnmpups{ups_number}.tmp" ; UPS_SNMPUPS_ACCESS="php-snmp" ; define how to access the PowerSoftPlus data ; - "command" execute powersoftplus command ; - "data" for reading data from file data/upspowersoftplus.tmp ; content is the output from "powersoftplus -p" ; UPS_POWERSOFTPLUS_ACCESS="command" ; define how to access the pmset data ; - "command" execute pmset command ; - "data" for reading data from file data/upspmset.tmp ; content is the output from "pmset -g batt" ; UPS_PMSET_ACCESS="command" ; ******************************** ; MISC PARAMETERS ; ******************************** ; define how to access the dmidecode data ; - "data" read data from file data/dmidecode.tmp; content is the output from "dmidecode -t 17") ; - "command" execute command: dmidecode -t 17 ; If access error try execute first: chmod 4755 /usr/sbin/dmidecode ; This method is not recommended for safety reasons! ; DMIDECODE_ACCESS="command" ; ******************************** ; SENSORS PROGRAMS PARAMETERS ; ******************************** [sensor_hddtemp] ; Hddtemp motherboard monitoring program configuration ; ; If the hddtemp program is available we can read the temperature, if hdd is smart capable ; !!ATTENTION!! hddtemp might be a security issue ; - ACCESS="command" //read data from 'hddtemp' command (must be set suid) ; - ACCESS="tcp" //read data from hddtemp deamon (localhost:7634) ; ACCESS="command" [sensor_lmsensors] ; LMSensors motherboard monitoring program configuration ; ; - ACCESS="command" //read data from 'sensors' command ; - ACCESS="data" //read data from file data/lmsensors.tmp ; ACCESS="command" [sensor_healthd] ; Healthd motherboard monitoring program configuration ; ; - ACCESS="command" //read data from 'healthdc' command ; - ACCESS="data" //read data from file data/healthd.tmp ; ACCESS="command" [sensor_mbmon] ; MBMon motherboard monitoring program configuration ; ; - ACCESS="command" //read data from 'mbmon -c 1 -r' command ; - ACCESS="data" //read data from file data/mbmon.tmp ; - ACCESS="tcp" //read data from mbmon deamon (localhost:411) ; ACCESS="command" [sensor_ipmitool] ; IPMItool motherboard monitoring program configuration ; ; - ACCESS="command" //read data from 'ipmitool sensor -v' command ; //if access error execute first: chmod 666 /dev/ipmi0 ; - ACCESS="data" //read data from file data/ipmitool.tmp ; ACCESS="command" [sensor_freeipmi] ; FreeIPMI motherboard monitoring program configuration ; ; - ACCESS="command" //read data from 'ipmi-sensors --output-sensor-thresholds' program ; - ACCESS="data" //read data from file data/freeipmi.tmp ; ACCESS="command" [sensor_ipmiutil] ; IPMIutil motherboard monitoring program configuration ; ; - ACCESS="command" //read data from 'ipmiutil sensor -stw' command ; //if access error execute first: chmod 666 /dev/ipmi0 ; - ACCESS="data" //read data from file data/ipmiutil.tmp ; ACCESS="command" [sensor_ipmicfg] ; IPMIcfg motherboard monitoring program configuration ; ; - ACCESS="command" //read data from 'ipmicfg -sdr' and/or 'ipmicfg -psfruinfo' and/or 'ipmicfg -pminfo' commands ; - ACCESS="data" //read data from file data/ipmicfg.tmp (output from: "ipmicfg -sdr>ipmicfg.tmp; ipmicfg -psfruinfo>>ipmicfg.tmp; ipmicfg -pminfo>>ipmicfg.tmp") ; ACCESS="command" ; Execute command to view SDR records ; - true : execute 'ipmicfg -sdr' ; - false : don't execute 'ipmicfg -sdr' ; SDR=true ; Execute power supply FRU health info ; - true : execute 'ipmicfg -psfruinfo' ; - false : don't execute 'ipmicfg -psfruinfo' ; PSFRUINFO=true ; Execute Power supply PMBus health info ; - true : execute 'ipmicfg -pminfo' ; - false : don't execute 'ipmicfg -pminfo' ; PMINFO=true [sensor_k8temp] ; K8Temp motherboard monitoring program configuration ; ; - ACCESS="command" //read data from 'k8temp' command ; - ACCESS="data" //read data from file data/k8temp.tmp ; ACCESS="command" [sensor_thermalzone] ; ThermalZone motherboard monitoring program configuration ; ; - ACCESS="command" //on Linux information is retrieved everytime through system files / on WinNT information is retrieved everytime through WMI ; - ACCESS="data" //read data from file data/thermalzone.tmp (output of WinNT command "wmic /namespace:\\root\wmi PATH MSAcpi_ThermalZoneTemperature get CriticalTripPoint,CurrentTemperature,InstanceName") ; ACCESS="command" [sensor_speedfan] ; SpeedFan motherboard monitoring program configuration ; ; - ACCESS="command" //read data from 'speedfanget' command ; - ACCESS="data" //read data from file data/speedfan.tmp ; ACCESS="command" [sensor_nvidiasmi] ; NvidiaSMI motherboard monitoring program configuration ; ; - ACCESS="command" //read data from 'nvidia-smi -q' command ; - ACCESS="data" //read data from file data/nvidiasmi.tmp ; ACCESS="command" ;The path to nvidia-smi.exe for the WinNT system ; EXE_PATH="c:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe" ; ******************************** ; PLUGINS PARAMETERS ; ******************************** [bat] ; BAT Plugin configuration ; define how to access the battery statistic data ; - "command" on Linux and Android read data from /proc/acpi/battery/BAT*/info and /proc/acpi/battery/BAT*/state ; or on newer kernel from /sys/class/power_supply/ ; or from 'upower -d' command (only on Linux if UPOWER is true) ; on Darwin read data from 'ioreg -w0 -l -n AppleSmartBattery -r' command ; on FreeBSD read data from 'acpiconf -i batt' command ; on OpenBSD read data from 'sysctl hw.sensors.acpibat0' command ; - "data" (a file must be available in the data directory of the phpsysinfo installation ; with the filename "bat_info.tmp" and "bat_state.tmp"; content is the output ; from "cat /proc/acpi/battery/BAT*/info" and "cat /proc/acpi/battery/BAT*/state") ; ACCESS="command" ; on Lunux try executing 'upower -d' command ; UPOWER=false ; Show battery serial number ; SHOW_SERIAL=false [raid] ; Raid Plugin configuration ; define how to access the raid statistic data ; - "command" - mdstat: file "/proc/mdstat" is read (on Linux only) ; - dmraid: command "dmraid -s -vv 2>&1" is run (on Linux only) ; If access error try execute first: chmod 4755 /sbin/dmraid ; This method is not recommended for safety reasons! ; - megactl: command "megactl -vv" is run (on Linux only) ; downloaded from http://sourceforge.net/projects/megactl/ or http://github.com/hmage/megactl or http://github.com/namiltd/megactl ; If permission error try execute first: chmod 4755 /usr/sbin/megactl ; - megasasctl: command "megasasctl -vv" is run (on Linux only) ; downloaded from http://sourceforge.net/projects/megactl/ or http://github.com/hmage/megactl or http://github.com/namiltd/megactl ; If permission error try execute first: chmod 4755 /usr/sbin/megasasctl ; - megaclisas-status: command "megaclisas-status" is run (or "megaclisas-status.py" on WinNT) ; downloaded from http://hwraid.le-vert.net or https://github.com/eLvErDe/hwraid or https://github.com/ElCoyote27/hwraid ; - 3ware-status: command "3ware-status" is run (or 3ware-status.py" on WinNT) ; downloaded from http://hwraid.le-vert.net or https://github.com/eLvErDe/hwraid or https://github.com/ElCoyote27/hwraid ; - graid: command "graid list" is run (on FreeBSD only) ; - zpool: command "zpool status" is run ; - storcli: command "storcli64 /call show all; storcli64 /call /vall show all" or "storcli /call show all; storcli /call /vall show all" is run ; - perccli: command "perccli64 /call show all; perccli64 /call /vall show all" or "perccli /call show all; perccli /call /vall show all" is run ; - idrac: command "snmpwalk -Ona -c public -v 1 -r 0 -t 3 {device} .1.3.6.1.4.1.674.10892.5.5.1.20" is run ; - "php-snmp"- idrac: execute php snmprealwalk function (php-snmp module must be installed) ; - for others the option is inactive (uses "command" instead) ; - "data" (a file must be available in the data directory of the phpsysinfo installation ; with the filename "raidmdstat.tmp" or "raiddmraid.tmp" or "raidmegactl.tmp" or "raidmegasasctl.tmp" ; or "raidmegaclisas-status.tmp" or "raidgraid.tmp" or "raidzpool.tmp" or "raidstorcli.tmp" or "raidperccli.tmp" ; or "raididrac{device_number}.tmp") ; ACCESS="command" ; define possible programs PROGRAM="mdstat,dmraid,megactl,megasasctl,megaclisas-status,3ware-status,graid,zpool,storcli,perccli,idrac" ; Hide RAID devices ; Example : HIDE_DEVICES="md127" ; HIDE_DEVICES="" ; ; string contains a list of IDRAC devices that are checked ; Example : IDRAC_DEVICES="192.168.0.120" ; IDRAC_DEVICES="" [ps] ; PS Plugin configuration ; define how to access the ps statistic data ; - "command" ps command is run everytime the block gets refreshed or build / on WinNT ; information is retrieved everytime through WMI ; - "data" (a file must be available in the data directory of the phpsysinfo installation ; with the filename "ps.tmp"; content is the output from "ps -axo pid,ppid,pmem,pcpu,args") ; ACCESS="command" ; Memory Usage info ; MEMORY_USAGE=true ; CPU Usage info ; CPU_USAGE=true ; Show kthreadd child list expanded ; SHOW_KTHREADD_EXPANDED=false ; Show PID 1 child list expanded ; SHOW_PID1CHILD_EXPANDED=false [psstatus] ; PSStatus Plugin configuration ; define how to access the psstatus statistic data ; - "command" pidof command is run everytime the block gets refreshed or build ; / on WinNT information is retrieved everytime through WMI ; - "data" a file must be available in the data directory of the phpsysinfo installation ; with the filename "psstatus.tmp"; content is the output from ; for ps in "apache2" "mysqld" "sshd"; do echo $ps "|" `pidof -s -x "$ps"`; done ; ACCESS="command" ; Regular expression search in the process name (e.g. "ddclient.*") for non-WinNT systems ; - true : Regular expression search (used pgrep command) ; - false : Normal search (used pidof command) ; USE_REGEX=false ; controls which processes are checked if they are running ; ; string contains a list of process names that are checked, names are seperated by a comma (on WinNT names must end with '.exe') ; PROCESSES="mysqld, sshd, explorer.exe" [quotas] ; Quotas Plugin configuration ; define how to access the repquota statistic data ; - "command" repquota command is run everytime the block gets refreshed or build ; - "data" (a file must be available in the data directory of the phpsysinfo installation with the filename "quotas.tmp"; content is the output from "repquota -au") ; ACCESS="command" [smart] ; SMART Plugin configuration ; Smartctl program ; If the smartctl program is available we can read S.M.A.R.T informations ; - "command" smartctl command is run everytime the block gets refreshed or build ; if error: Smartctl open device: /dev/sda failed: Permission denied ; Not recommended method: ; execute: chmod 4755 /usr/sbin/smartctl ; Second method: ; try to set: SUDO_COMMANDS="smartctl" and add to file /etc/sudoers line: apache ALL = (ALL) NOPASSWD: /usr/sbin/smartctl ; - "data" (a file must be available in the data directory of the ; phpsysinfo installation with the filename "smart{disk_number}.tmp"; ; content is the output from "smartctl --all device" ; or on WinNT only from "wmic /namespace:\\root\wmi path MSStorageDriver_ATAPISmartData get VendorSpecific | more +{disk_number}") ; - "wmi" information is retrieved everytime through WMI (WinNT only) ; ACCESS="command" ; Smartctl devices to monitor ; If the smartctl support is enabled, those disks information will be displayed ; - DEVICES="/dev/hda,/dev/hdb" //Will display those two disks informations ; You also can specify --device option value for smartctl command surrounded by parentheses eg: ; - DEVICES="(marvell)/dev/sda" ; or ; - DEVICES="(megaraid.0)/dev/sda" //comma in --device option value is replaced by a dot ; DEVICES="/dev/sda, /dev/sdb" ; Smartctl ID# and column name from "Vendor Specific SMART Attributes with Thresholds" table ; If the smartctl support is enabled, enter the ID#-COLUMN_NAME from "Vendor Specific SMART Attributes with Thresholds" table from smartctl output. ; or for no SCSI devices: ID#-COLUMN_NAME-REPLACEMENT_ID# where REPLACEMENT_ID# is an alternative ID number. ; COLUMN_NAME of this ID# will be displayed in the phpsysinfo S.M.A.R.T table. If you want RAW_VALUE to be displayed for the temperature (ID# 194) enter 194-RAW_VALUE ; - IDS="194-VALUE,4-VALUE,009-RAW_VALUE" //ID#-COLUMN_NAME, ID#-COLUMN_NAME, etc... ; The additional attributes: ; ATA Error Count: - is marked as 0-RAW_VALUE ; Accumulated start-stop cycles: - is marked as 004-RAW_VALUE ; Elements in grown defect list: - is marked as 005-RAW_VALUE ; Power On Hours: - is marked as 009-RAW_VALUE ; Power Cycles: - is marked as 012-RAW_VALUE ; Data Units Read: - is marked as 032-RAW_VALUE and 032-VALUE ; Data Units Written: - is marked as 048-RAW_VALUE and 048-VALUE ; Media and Data Integrity Errors: - is marked as 187-RAW_VALUE ; Unsafe Shutdowns: - is marked as 192-RAW_VALUE ; Accumulated load-unload cycles: - is marked as 193-RAW_VALUE ; Temperature: - is marked as 194-RAW_VALUE ; Current Drive Temperature: - is marked as 194-RAW_VALUE ; Non-medium Error Count: - is marked as 255-RAW_VALUE ; IDS="005-RAW_VALUE,194-RAW_VALUE,009-RAW_VALUE,012-RAW_VALUE,193-RAW_VALUE-225,001-RAW_VALUE,007-RAW_VALUE,200-RAW_VALUE,197-RAW_VALUE,198-RAW_VALUE,0-RAW_VALUE" [snmppinfo] ; SNMPPInfo Plugin configuration ; define how to access the SNMP Printer Info statistic data ; - "php-snmp" execute php snmprealwalk function (php-snmp module must be installed) ; - "command" execute snmpwalk command ; - "data" a file must be available in the data directory of the ; phpsysinfo installation with the filename "snmppinfo{printer_number}.tmp"; ; content is the output from: ; LANG=C LC_ALL=C snmpwalk -On -c public -v 1 -r 0 -t 3 {printer_address} .1.3.6.1.2.1.1.5 > snmppinfo{printer_number}.tmp ; LANG=C LC_ALL=C snmpwalk -On -c public -v 1 -r 0 -t 3 {printer_address} .1.3.6.1.4.1.367.3.2.1.2.24.1.1 >> snmppinfo{printer_number}.tmp ; LANG=C LC_ALL=C snmpwalk -On -c public -v 1 -r 0 -t 3 {printer_address} .1.3.6.1.2.1.43.11.1.1 >> snmppinfo{printer_number}.tmp ; LANG=C LC_ALL=C snmpwalk -On -c public -v 1 -r 0 -t 3 {printer_address} .1.3.6.1.2.1.43.18.1.1 >> snmppinfo{printer_number}.tmp ; ACCESS="php-snmp" ;define the Printer devices ; ; string contains a list of printer addresses that are checked ; DEVICES="192.168.0.5, 192.168.0.9" [updatenotifier] ; Update Notifier Plugin configuration ; define how to access the updatenotifier statistic data ; - "command" execute command /usr/lib/update-notifier/apt-check ; - "data" reads data from file defined in FILE parameter ; ACCESS="data" ; define the update info file format ; - true: Ubuntu Landscape format (file: /var/lib/update-notifier/updates-available) ; - false: universal format (format: A;B) ; A: total packages to update ; B: security packages to update ; UBUNTU_LANDSCAPE_FORMAT=true ; define the update info file. The default is: /var/lib/update-notifier/updates-available ; FILE="/var/lib/update-notifier/updates-available" [uprecords] ; Uprecords Plugin configuration ; define how to access the uprecords statistic data ; - "command" uprecords command is run everytime the block gets refreshed or build ; if access error try execute first: chmod 4755 /usr/bin/uprecords ; This method is not recommended for safety reasons! ; - "data" (a file must be available in the data directory of the phpsysinfo installation ; with the filename "uprecords.tmp"; content is the output from "TZ=GMT uprecords -a -w") ; ACCESS="command" ; define the maximum number of entries to show (for command access) ; default is 10 ; MAX_ENTRIES = 10 ; define the short mode (do not print extra statistics) ; default is false ; SHORT_MODE = false ; denote current system session by asterisk (* at the end) instead by the arrow (-> at the beginning) ; default is false ; DENOTE_BY_ASTERISK = false [viewer] ; Viewer Plugin configuration ; define how to access the data ; - "command" COMMAND command is run everytime the block gets refreshed or build ; - "data" (a file must be available in the data directory of the phpsysinfo installation with the filename "viewer.tmp") ; ACCESS="command" ; define COMMAND name (for command access) ; eg: ; - "iptables-save" iptables-save command is run everytime the block gets refreshed or build (Linux) ; if access error try to set: SUDO_COMMANDS="iptables-save" and add to file /etc/sudoers line: apache ALL = (ALL) NOPASSWD: /sbin/iptables-save ; - "systeminfo" systeminfo command is run everytime the block gets refreshed or build (WinNT) ; COMMAND="" ; define COMMAND parameters (for command access) ; PARAMS="" [pingtest] ; PingTest Plugin configuration ; define how to access the psstatus statistic data ; - "command" ping command is run everytime the block gets refreshed or build ; - "data" (a file must be available in the data directory of the phpsysinfo installation ; with the filename "pingtest.tmp") ; ACCESS="command" ;define the Addresses ; ; string contains a list of addresses that are checked ; Example : ADDRESSES="127.0.0.1,8.8.8.8" ; ADDRESSES="" ; Define ping timeout in seconds ; - 0 : default ping command timeout ; - 3 : 3 seconds ; Default is 2 seconds ; TIMEOUT=2 [stablebit] ; StableBit Plugin configuration ; Show or hide disks serial number ; SHOW_SERIAL=false [hyperv] ; HyperV Plugin configuration ; define how to access the ps statistic data ; - "command" information is retrieved through WMI ; - "data" (a file must be available in the data directory of the phpsysinfo installation ; with the filename "hyperv.tmp") ; ACCESS="command" [docker] ; Docker Plugin configuration ; define how to access the docker statistic data ; - "command" docker command is run everytime the block gets refreshed or build ; - "data" (a file must be available in the data directory of the phpsysinfo installation ; with the filename "docker.tmp"; content is the output from "docker stats --no-stream --format 'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}\t{{.NetIO}}\t{{.BlockIO}}\t{{.PIDs}}'") ; ACCESS="command" phpsysinfo-3.4.4/phpsysinfo.xslt000066400000000000000000003342531467431054600170660ustar00rootroot00000000000000 <xsl:text>phpSysInfo</xsl:text>

    System information : ( )

    System Vital

    Canonical Hostname
    Listening IP
    Kernel Version
    Distro Name file:/// &nbsp; &nbsp;
    OS Type file:/// &nbsp; &nbsp;
    Uptime Days Hours Minutes
    Current Users
    Load Averages <br/>
    &nbsp;
    &nbsp; %
    System Language
    Code Page
    Processes

    Hardware Information

    Machine
    Virtualizer
    Processors
    Model
    CPU Speed MHz
    CPU Speed Max MHz
    CPU Speed Min MHz
    Cache Size KiB
    Virtualization
    Bus Speed MHz
    System Bogomips
    Voltage V
    Manufacturer
    Load Averages %

    Memory Chips

    • ( x) ( KiB)

    PCI Devices

    • ( x)

    IDE Devices

    • ( x) ( KiB)

    SCSI Devices

    • ( x) ( KiB)

    NVMe Devices

    • ( x) ( KiB)

    USB Devices

    • ( x)

    TB Devices

    • ( x)

    I2C Devices

    • ( x)

    Memory Usage

    Type Usage Free Used Size
    Physical Memory
    &nbsp;
    &nbsp; %
    KiB KiB KiB
    - Kernel + applications
    &nbsp;
    &nbsp; %
    KiB
    - Cached
    &nbsp;
    &nbsp; %
    KiB
    - Buffers
    &nbsp;
    &nbsp; %
    KiB
    Disk Swap
    &nbsp;
    &nbsp; %
    KiB KiB KiB
    -
    &nbsp;
    &nbsp; %
    KiB KiB KiB

    Mounted Filesystems

    Mountpoint Type Partition Usage Free Used Size
    &nbsp;
    &nbsp; % ( %)
    KiB KiB KiB

    Network Usage

    Device Received Send Err/Drop
    ( ) KiB &nbsp; KiB /
    phpsysinfo-3.4.4/phpsysinfo3.xsd000066400000000000000000000467621467431054600167620ustar00rootroot00000000000000 phpsysinfo-3.4.4/plugins/000077500000000000000000000000001467431054600154175ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/bat/000077500000000000000000000000001467431054600161655ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/bat/bat_bootstrap.html000066400000000000000000000016741467431054600217260ustar00rootroot00000000000000 phpsysinfo-3.4.4/plugins/bat/class.bat.inc.php000066400000000000000000001362061467431054600213300ustar00rootroot000000000000000) { $bufferWPB = WINNT::getWMI($_cim, 'Win32_PortableBattery', array('DesignVoltage', 'Chemistry', 'DesignCapacity', 'FullChargeCapacity', 'Manufacturer')); $bufferBS = WINNT::getWMI($_wmi, 'BatteryStatus', array('RemainingCapacity', 'Voltage')); $bufferBCC = WINNT::getWMI($_wmi, 'BatteryCycleCount', array('CycleCount')); $bufferBFCC = WINNT::getWMI($_wmi, 'BatteryFullChargedCapacity', array('FullChargedCapacity')); $sobWB = sizeof($bufferWB); if (sizeof($bufferWPB) != $sobWB) { $bufferWPB = array(); } if (sizeof($bufferBS) != $sobWB) { $bufferBS = array(); } if (sizeof($bufferBCC) != $sobWB) { $bufferBCC = array(); } if (sizeof($bufferBFCC) != $sobWB) { $bufferBFCC = array(); } for ($bi = 0; $bi < $sobWB; $bi++) { $buffer[$bi]['state'] = ''; $buffer[$bi]['info'] = ''; $capacity = ''; if (isset($bufferWB[$bi]['EstimatedChargeRemaining'])) { $capacity = $bufferWB[$bi]['EstimatedChargeRemaining']; } if (isset($bufferWB[$bi]['BatteryStatus'])) { switch ($bufferWB[$bi]['BatteryStatus']) { case 1: $batstat = 'Discharging'; break; case 2: $batstat = 'AC connected'; break; case 3: $batstat = 'Fully Charged'; break; case 4: $batstat = 'Low'; break; case 5: $batstat = 'Critical'; break; case 6: $batstat = 'Charging'; break; case 7: $batstat = 'Charging and High'; break; case 8: $batstat = 'Charging and Low'; break; case 9: $batstat = 'Charging and Critical'; break; case 10: $batstat = 'Undefined'; break; case 11: $batstat = 'Partially Charged'; break; default: $batstat = ''; } if ($batstat != '') $buffer[$bi]['state'] .= 'POWER_SUPPLY_STATUS='.$batstat."\n"; } if (isset($bufferWPB[$bi]['DesignVoltage']) && ($bufferWPB[$bi]['DesignVoltage'] > 0)) { $buffer[$bi]['info'] .= 'POWER_SUPPLY_VOLTAGE_MIN_DESIGN='.($bufferWPB[$bi]['DesignVoltage']*1000)."\n"; } if (isset($bufferWPB[$bi]['Manufacturer']) && ($bufferWPB[$bi]['Manufacturer'] !== '')) { $buffer[$bi]['info'] .= 'POWER_SUPPLY_MANUFACTURER='.$bufferWPB[$bi]['Manufacturer']."\n"; } $techn = ''; if (isset($bufferWB[$bi]['Chemistry'])) { switch ($bufferWB[$bi]['Chemistry']) { case 1: $techn = 'Other'; break; case 2: $techn = 'Unknown'; break; case 3: $techn = 'PbAc'; break; case 4: $techn = 'NiCd'; break; case 5: $techn = 'NiMH'; break; case 6: $techn = 'Li-ion'; break; case 7: $techn = 'Zinc-air'; break; case 8: $techn = 'Li-poly'; } } // sometimes Chemistry from Win32_Battery returns 2 but Win32_PortableBattery returns e.g. 6 if ((($techn == '') || ($techn == 'Unknown')) && isset($bufferWPB[$bi]['Chemistry'])) { switch ($bufferWPB[$bi]['Chemistry']) { case 1: $techn = 'Other'; break; case 2: $techn = 'Unknown'; break; case 3: $techn = 'PbAc'; break; case 4: $techn = 'NiCd'; break; case 5: $techn = 'NiMH'; break; case 6: $techn = 'Li-ion'; break; case 7: $techn = 'Zinc-air'; break; case 8: $techn = 'Li-poly'; } } if ($techn != '') $buffer[$bi]['info'] .= 'POWER_SUPPLY_TECHNOLOGY='.$techn."\n"; if (sizeof($bufferBS)>0) { $hasvolt = false; if (isset($bufferBS[$bi]['Voltage']) && ($bufferBS[$bi]['Voltage']>0)) { $buffer[$bi]['state'] .= 'POWER_SUPPLY_VOLTAGE_NOW='.($bufferBS[$bi]['Voltage']*1000)."\n"; $hasvolt = true; } elseif (isset($bufferWB[$bi]['DesignVoltage']) && ($bufferWB[$bi]['DesignVoltage']>0)) { $buffer[$bi]['state'] .= 'POWER_SUPPLY_VOLTAGE_NOW='.($bufferWB[$bi]['DesignVoltage']*1000)."\n"; $hasvolt = true; } if (isset($bufferBS[$bi]['RemainingCapacity']) && (($bufferBS[$bi]['RemainingCapacity']>0) || ($hasvolt && ($bufferBS[$bi]['RemainingCapacity']==0)))) { $buffer[$bi]['state'] .= 'POWER_SUPPLY_ENERGY_NOW='.($bufferBS[$bi]['RemainingCapacity']*1000)."\n"; $capacity = ''; } } if (isset($bufferWB[$bi]['Caption']) && ($bufferWB[$bi]['Caption'] !== '')) { $buffer[$bi]['state'] .= 'POWER_SUPPLY_NAME='.$bufferWB[$bi]['Caption']."\n"; } if (isset($bufferWB[$bi]['Name']) && ($bufferWB[$bi]['Name'] !== '') && ($bufferWB[$bi]['Name'] !== "1?\x0E")) { $buffer[$bi]['state'] .= 'POWER_SUPPLY_MODEL_NAME='.$bufferWB[$bi]['Name']."\n"; } if ((!isset($bufferWPB[$bi]['FullChargeCapacity']) || ($bufferWPB[$bi]['FullChargeCapacity'] == 0)) && isset($bufferBFCC[$bi]['FullChargedCapacity']) && ($bufferBFCC[$bi]['FullChargedCapacity'] > 0)) { $bufferWPB[$bi]['FullChargeCapacity'] = $bufferBFCC[$bi]['FullChargedCapacity']; } if (isset($bufferWPB[$bi]['FullChargeCapacity']) && ($bufferWPB[$bi]['FullChargeCapacity'] > 0)) { $buffer[$bi]['info'] .= 'POWER_SUPPLY_ENERGY_FULL='.($bufferWPB[$bi]['FullChargeCapacity']*1000)."\n"; if ($capacity != '') $buffer[$bi]['state'] .= 'POWER_SUPPLY_ENERGY_NOW='.(round($capacity*$bufferWPB[$bi]['FullChargeCapacity']*10)."\n"); if (isset($bufferWPB[$bi]['DesignCapacity']) && ($bufferWPB[$bi]['DesignCapacity'] > 0)) $buffer[$bi]['info'] .= 'POWER_SUPPLY_ENERGY_FULL_DESIGN='.($bufferWPB[$bi]['DesignCapacity']*1000)."\n"; } elseif (isset($bufferWPB[$bi]['DesignCapacity']) && ($bufferWPB[$bi]['DesignCapacity'] > 0)) { $buffer[$bi]['info'] .= 'POWER_SUPPLY_ENERGY_FULL_DESIGN='.($bufferWPB[$bi]['DesignCapacity']*1000)."\n"; if ($capacity != '') $buffer[$bi]['state'] .= 'POWER_SUPPLY_ENERGY_NOW='.(round($capacity*$bufferWPB[$bi]['DesignCapacity']*10)."\n"); } else { if ($capacity != '') $buffer[$bi]['state'] .= 'POWER_SUPPLY_CAPACITY='.$capacity."\n"; } if (isset($bufferBCC[$bi]['CycleCount']) && ($bufferBCC[$bi]['CycleCount'] > 0)) { $buffer[$bi]['info'] .= 'POWER_SUPPLY_CYCLE_COUNT='.$bufferBCC[$bi]['CycleCount']."\n"; } } } } elseif (PSI_OS == 'Darwin') { $buffer[0]['info'] = ''; CommonFunctions::executeProgram('ioreg', '-w0 -l -n AppleSmartBattery -r', $buffer[0]['info'], false); if ($buffer[0]['info'] !== '') { $buffer[0]['info'] .= "POWER_SUPPLY_NAME=AppleSmartBattery\n"; } } elseif (PSI_OS == 'FreeBSD') { $buffer[0]['info'] = ''; CommonFunctions::executeProgram('acpiconf', '-i batt', $buffer[0]['info'], false); if ($buffer[0]['info'] !== '') { $buffer[0]['info'] .= "POWER_SUPPLY_NAME=batt\n"; } } elseif (PSI_OS == 'OpenBSD') { $buffer[0]['info'] = ''; CommonFunctions::executeProgram('sysctl', 'hw.sensors.acpibat0', $buffer[0]['info'], false); if ($buffer[0]['info'] !== '') { $buffer[0]['info'] .= "POWER_SUPPLY_NAME=acpibat0\n"; } } elseif ((PSI_OS != 'WINNT') && (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT'))) { $itemcount = 0; if ((PSI_OS == 'Linux') && defined('PSI_PLUGIN_BAT_UPOWER') && PSI_PLUGIN_BAT_UPOWER) { $info = ''; CommonFunctions::executeProgram('upower', '-d', $info, false); if ($info !== '') { $infoarray = preg_split("/(?=^Device:|^Daemon:)/m", $info); foreach ($infoarray as $infoitem) { //upower detection if (preg_match('/^Device: \/org\/freedesktop\/UPower\/devices\//', $infoitem) && !preg_match('/^Device: \/org\/freedesktop\/UPower\/devices\/line_power/', $infoitem) && !preg_match('/^Device: \/org\/freedesktop\/UPower\/devices\/DisplayDevice/', $infoitem)) { $buffer[$itemcount++]['info'] = $infoitem; } } } } if ($itemcount == 0) { $batdevices = CommonFunctions::findglob('/proc/acpi/battery/BAT*/info', GLOB_NOSORT); if (is_array($batdevices) && (($total = count($batdevices)) > 0)) { for ($i = 0; $i < $total; $i++) { $infoitem = ''; $stateitem = ''; $rfts_bi = CommonFunctions::rfts($batdevices[$i], $infoitem, 0, 4096, false); $rfts_bs = CommonFunctions::rfts(preg_replace('/\/info$/', '/state', $batdevices[$i]), $stateitem, 0, 4096, false); if (($rfts_bi && ($infoitem!=='')) || ($rfts_bs && ($stateitem!==''))) { if (preg_match('/^\/proc\/acpi\/battery\/(.+)\/info$/', $batdevices[$i], $batname)) { if ($infoitem!=='') { $infoitem .= 'POWER_SUPPLY_NAME='.$batname[1]."\n"; } else { $stateitem.= 'POWER_SUPPLY_NAME='.$batname[1]."\n"; } } if ($infoitem!=='') { $buffer[$itemcount]['info'] = $infoitem; } if ($stateitem!=='') { $buffer[$itemcount]['state'] = $stateitem; } $itemcount++; } } } } if ($itemcount == 0) { $batdevices = CommonFunctions::findglob('/sys/class/power_supply/[Bb][Aa][Tt]*/present', GLOB_NOSORT); if (is_array($batdevices) && (($total = count($batdevices)) > 0)) { for ($i = 0; $i < $total; $i++) { $pbuffer = ''; if (CommonFunctions::rfts($batdevices[$i], $pbuffer, 1, 4096, false) && (trim($pbuffer) === '1')) { $infoitem = ''; $stateitem = ''; CommonFunctions::rfts(preg_replace('/\/present$/', '/uevent', $batdevices[$i]), $infoitem, 0, 4096, false); if ((($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/voltage_min_design'))!==null) || (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/voltage_max'))!==null)) { $stateitem .= 'POWER_SUPPLY_VOLTAGE_MIN_DESIGN='.$buffer1."\n"; } if (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/voltage_max_design'))!==null) { $stateitem .= 'POWER_SUPPLY_VOLTAGE_MAX_DESIGN='.$buffer1."\n"; } if (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/voltage_now'))!==null) { $stateitem .= 'POWER_SUPPLY_VOLTAGE_NOW='.$buffer1."\n"; } if (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/energy_full'))!==null) { $stateitem .= 'POWER_SUPPLY_ENERGY_FULL='.$buffer1."\n"; } if (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/energy_now'))!==null) { $stateitem .= 'POWER_SUPPLY_ENERGY_NOW='.$buffer1."\n"; } if (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/charge_full'))!==null) { $stateitem .= 'POWER_SUPPLY_CHARGE_FULL='.$buffer1."\n"; } if (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/charge_now'))!==null) { $stateitem .= 'POWER_SUPPLY_CHARGE_NOW='.$buffer1."\n"; } if (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/capacity'))!==null) { $stateitem .= 'POWER_SUPPLY_CAPACITY='.$buffer1."\n"; } if (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/technology'))!==null) { $stateitem .= 'POWER_SUPPLY_TECHNOLOGY='.$buffer1."\n"; } if (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/status'))!==null) { $stateitem .= 'POWER_SUPPLY_STATUS='.$buffer1."\n"; } if (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/batt_temp'))!==null) { $stateitem .= 'POWER_SUPPLY_TEMP='.$buffer1."\n"; } if (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/batt_vol'))!==null) { $stateitem .= 'POWER_SUPPLY_VOLTAGE_NOW='.$buffer1."\n"; } if (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/health'))!==null) { $stateitem .= 'POWER_SUPPLY_HEALTH='.$buffer1."\n"; } if (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/manufacturer'))!==null) { $stateitem .= 'POWER_SUPPLY_MANUFACTURER='.$buffer1."\n"; } if (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/temp'))!==null) { $stateitem .= 'POWER_SUPPLY_TEMP='.$buffer1."\n"; } if (defined('PSI_PLUGIN_BAT_SHOW_SERIAL') && PSI_PLUGIN_BAT_SHOW_SERIAL && (($buffer1 = CommonFunctions::rolv($batdevices[$i], '/\/present$/', '/serial_number'))!==null)) { $stateitem .= 'POWER_SUPPLY_SERIAL_NUMBER='.$buffer1."\n"; } if (($stateitem!=='') || ($infoitem!=='')) { if (preg_match('/^\/sys\/class\/power_supply\/(.+)\/present$/', $batdevices[$i], $batname)) { $stateitem .= 'POWER_SUPPLY_NAME='.$batname[1]."\n"; } if ($infoitem!=='') { $buffer[$itemcount]['info'] = $infoitem; } if ($stateitem!=='') { $buffer[$itemcount]['state'] = $stateitem; } $itemcount++; } } } } } } break; case 'data': if (!defined('PSI_EMU_HOSTNAME')) { CommonFunctions::rftsdata("bat_info.tmp", $info); $itemcount = 0; $infoarray = preg_split("/(?=^Device:|^Daemon:)/m", $info); foreach ($infoarray as $infoitem) { //upower detection if (preg_match('/^Device: \/org\/freedesktop\/UPower\/devices\//', $infoitem) && !preg_match('/^Device: \/org\/freedesktop\/UPower\/devices\/line_power/', $infoitem) && !preg_match('/^Device: \/org\/freedesktop\/UPower\/devices\/DisplayDevice/', $infoitem)) { $buffer[$itemcount++]['info'] = $infoitem; } } if ($itemcount == 0) { $buffer[0]['info'] = $info; } CommonFunctions::rftsdata("bat_state.tmp", $buffer[0]['state']); } break; default: $this->global_error->addConfigError("__construct()", "[bat] ACCESS"); } for ($bi = 0; $bi < sizeof($buffer); $bi++) { if (isset($buffer[$bi]['info'])) { $this->_filecontent[$bi]['info'] = preg_split("/\n/", $buffer[$bi]['info'], -1, PREG_SPLIT_NO_EMPTY); } if (isset($buffer[$bi]['state'])) { $this->_filecontent[$bi]['state'] = preg_split("/\n/", $buffer[$bi]['state'], -1, PREG_SPLIT_NO_EMPTY); } } } /** * doing all tasks to get the required informations that the plugin needs * result is stored in an internal array * * @return void */ public function execute() { if (empty($this->_filecontent)) { return; } for ($bi = 0; $bi < sizeof($this->_filecontent); $bi++) { $bat = array(); if (isset($this->_filecontent[$bi]['info'])) foreach ($this->_filecontent[$bi]['info'] as $roworig) { $roworig = trim($roworig); if (preg_match('/^[dD]esign capacity:\s*(.*) (.*)$/', $roworig, $data) || preg_match('/^energy-full-design:\s*(.*) (.*)$/', $roworig, $data)) { $bat['design_capacity'] = str_replace(',', '.', $data[1])+0; if (!isset($bat['capacity_unit'])) { $bat['capacity_unit'] = trim($data[2]); } elseif ($bat['capacity_unit'] != trim($data[2])) { $bat['capacity_unit'] = "???"; } } elseif (preg_match('/^[lL]ast full capacity:\s*(.*) (.*)$/', $roworig, $data) || preg_match('/^energy-full:\s*(.*) (.*)$/', $roworig, $data)) { $bat['full_capacity'] = str_replace(',', '.', $data[1])+0; if (!isset($bat['capacity_unit'])) { $bat['capacity_unit'] = trim($data[2]); } elseif ($bat['capacity_unit'] != trim($data[2])) { $bat['capacity_unit'] = "???"; } } elseif (preg_match('/^energy:\s*(.*) (.*)$/', $roworig, $data)) { $bat['remaining_capacity'] = str_replace(',', '.', $data[1])+0; if (!isset($bat['capacity_unit'])) { $bat['capacity_unit'] = trim($data[2]); } elseif ($bat['capacity_unit'] != trim($data[2])) { $bat['capacity_unit'] = "???"; } } elseif (preg_match('/^cycle count:\s*(.*)$/', $roworig, $data) && ($data[1]>0)) { $bat['cycle_count'] = $data[1]; } elseif (preg_match('/^[dD]esign voltage:\s*(.*) (.*)$/', $roworig, $data)) { if ($data[2]=="mV") { // uV or mV detection $bat['design_voltage'] = $data[1]; } else { $bat['design_voltage'] = round($data[1]/1000); } } elseif (preg_match('/^battery type:\s*(.*)$/', $roworig, $data) || preg_match('/^technology:\s*(.*)$/', $roworig, $data)) { $bat['battery_type'] = $data[1]; } elseif (preg_match('/^OEM info:\s*(.*)$/', $roworig, $data) || preg_match('/^vendor:\s*(.*)$/', $roworig, $data)) { $bat['manufacturer'] = $data[1]; } elseif (preg_match('/^state:\s*(.*)$/', $roworig, $data)) { $bat['charging_state'] = $data[1]; } elseif (preg_match('/^voltage:\s*(.*) V$/', $roworig, $data)) { $bat['present_voltage'] = str_replace(',', '.', $data[1])*1000; } elseif (preg_match('/^percentage:\s*(.*)%$/', $roworig, $data)) { $bat['capacity'] = $data[1]; } elseif (preg_match('/^Device:\s*\/org\/freedesktop\/UPower\/devices\/([^_]*)_/', $roworig, $data)) { $bat['name'] = $data[1]; } elseif (preg_match('/^native-path:\s*(.*)$/', $roworig, $data) && isset($data[1][0]) && ($data[1][0]!=='/')) { $bat['name'] = $data[1]; } elseif (preg_match('/^model:\s*(.*)$/', $roworig, $data) || preg_match('/^[Mm]odel number:\s*(.*)$/', $roworig, $data)) { $bat['model'] = $data[1]; } elseif (defined('PSI_PLUGIN_BAT_SHOW_SERIAL') && PSI_PLUGIN_BAT_SHOW_SERIAL && (preg_match('/^serial:\s*(.*)$/', $roworig, $data) || preg_match('/^[Ss]erial number:\s*(.*)$/', $roworig, $data))) { $bat['serialnumber'] = $data[1]; } elseif (preg_match('/^POWER_SUPPLY_CYCLE_COUNT=(.*)$/', $roworig, $data) && ($data[1]>0)) { $bat['cycle_count'] = $data[1]; } elseif (preg_match('/^POWER_SUPPLY_VOLTAGE_MIN_DESIGN=(.*)$/', $roworig, $data)) { if ($data[1]<100000) { // uV or mV detection $bat['design_voltage'] = $data[1]; } else { $bat['design_voltage'] = round($data[1]/1000); } } elseif (preg_match('/^POWER_SUPPLY_VOLTAGE_MAX_DESIGN=(.*)$/', $roworig, $data)) { if ($data[1]<100000) { // uV or mV detection $bat['design_voltage_max'] = $data[1]; } else { $bat['design_voltage_max'] = round($data[1]/1000); } } elseif (preg_match('/^POWER_SUPPLY_ENERGY_FULL=(.*)$/', $roworig, $data)) { $bat['full_capacity'] = ($data[1]/1000); if ($data[1]>=1000000000) { // µWh or nWh detection if (!isset($bat['capacity_unit'])) { $bat['capacity_unit'] = "µWh"; } elseif ($bat['capacity_unit'] != "µWh") { $bat['capacity_unit'] = "???"; } } else { if (!isset($bat['capacity_unit'])) { $bat['capacity_unit'] = "mWh"; } elseif ($bat['capacity_unit'] != "mWh") { $bat['capacity_unit'] = "???"; } } } elseif (preg_match('/^POWER_SUPPLY_CHARGE_FULL=(.*)$/', $roworig, $data)) { $bat['full_capacity'] = ($data[1]/1000); if (!isset($bat['capacity_unit'])) { $bat['capacity_unit'] = "mAh"; } elseif ($bat['capacity_unit'] != "mAh") { $bat['capacity_unit'] = "???"; } } elseif (preg_match('/^POWER_SUPPLY_ENERGY_NOW=(.*)$/', $roworig, $data)) { if (!isset($bat['capacity_unit']) || ($bat['capacity_unit'] == "mWh")) { $bat['capacity_unit'] = "mWh"; $bat['remaining_capacity'] = ($data[1]/1000); } } elseif (preg_match('/^POWER_SUPPLY_CHARGE_NOW=(.*)$/', $roworig, $data)) { if (!isset($bat['capacity_unit']) || ($bat['capacity_unit'] == "mAh")) { $bat['capacity_unit'] = "mAh"; $bat['remaining_capacity'] = ($data[1]/1000); } /* auxiary */ } elseif (preg_match('/^POWER_SUPPLY_ENERGY_FULL_DESIGN=(.*)$/', $roworig, $data)) { $bat['design_capacity'] = ($data[1]/1000); if ($data[1]>=1000000000) { // µWh or nWh detection if (!isset($bat['capacity_unit'])) { $bat['capacity_unit'] = "µWh"; } elseif ($bat['capacity_unit'] != "µWh") { $bat['capacity_unit'] = "???"; } } else { if (!isset($bat['capacity_unit'])) { $bat['capacity_unit'] = "mWh"; } elseif ($bat['capacity_unit'] != "mWh") { $bat['capacity_unit'] = "???"; } } } elseif (preg_match('/^POWER_SUPPLY_CHARGE_FULL_DESIGN=(.*)$/', $roworig, $data)) { $bat['design_capacity'] = ($data[1]/1000); if (!isset($bat['capacity_unit'])) { $bat['capacity_unit'] = "mAh"; } elseif ($bat['capacity_unit'] != "mAh") { $bat['capacity_unit'] = "???"; } } elseif (preg_match('/^POWER_SUPPLY_VOLTAGE_NOW=(.*)$/', $roworig, $data)) { if ($data[1]<100000) { // uV or mV detection $bat['present_voltage'] = $data[1]; } else { $bat['present_voltage'] = round($data[1]/1000); } } elseif (preg_match('/^POWER_SUPPLY_CAPACITY=(.*)$/', $roworig, $data)) { $bat['capacity'] = $data[1]; } elseif (preg_match('/^POWER_SUPPLY_TEMP=(.*)$/', $roworig, $data)) { $bat['battery_temperature'] = $data[1]/10; } elseif (preg_match('/^POWER_SUPPLY_TECHNOLOGY=(.*)$/', $roworig, $data)) { $bat['battery_type'] = $data[1]; } elseif (preg_match('/^POWER_SUPPLY_STATUS=(.*)$/', $roworig, $data)) { $bat['charging_state'] = $data[1]; } elseif (preg_match('/^POWER_SUPPLY_HEALTH=(.*)$/', $roworig, $data)) { $bat['battery_condition'] = $data[1]; } elseif (preg_match('/^POWER_SUPPLY_MANUFACTURER=(.*)$/', $roworig, $data)) { $bat['manufacturer'] = $data[1]; } elseif (preg_match('/^POWER_SUPPLY_NAME=(.*)$/', $roworig, $data)) { $bat['name'] = $data[1]; } elseif (preg_match('/^POWER_SUPPLY_MODEL_NAME=(.*)$/', $roworig, $data)) { $bat['model'] = $data[1]; } elseif (defined('PSI_PLUGIN_BAT_SHOW_SERIAL') && PSI_PLUGIN_BAT_SHOW_SERIAL && preg_match('/^POWER_SUPPLY_SERIAL_NUMBER=(.*)$/', $roworig, $data)) { $bat['serialnumber'] = $data[1]; /* Darwin */ } elseif (preg_match('/^"MaxCapacity"\s*=\s*(.*)$/', $roworig, $data)) { $bat['full_capacity'] = $data[1]; } elseif (preg_match('/^"CurrentCapacity"\s*=\s*(.*)$/', $roworig, $data)) { $bat['remaining_capacity'] = $data[1]; } elseif (preg_match('/^"Voltage"\s*=\s*(.*)$/', $roworig, $data)) { $bat['present_voltage'] = $data[1]; } elseif (preg_match('/^"BatteryType"\s*=\s*"(.*)"$/', $roworig, $data)) { $bat['battery_type'] = $data[1]; } elseif (preg_match('/^"Temperature"\s*=\s*(.*)$/', $roworig, $data)) { if ($data[1]>0) $bat['battery_temperature'] = $data[1]/100; } elseif (preg_match('/^"DesignCapacity"\s*=\s*(.*)$/', $roworig, $data)) { $bat['design_capacity'] = $data[1]; } elseif (preg_match('/^"CycleCount"\s*=\s*(.*)$/', $roworig, $data) && ($data[1]>0)) { $bat['cycle_count'] = $data[1]; } elseif (preg_match('/^"DeviceName"\s*=\s*\"?([^\"]*)\"?$/', $roworig, $data)) { $bat['model'] = $data[1]; } elseif (defined('PSI_PLUGIN_BAT_SHOW_SERIAL') && PSI_PLUGIN_BAT_SHOW_SERIAL && preg_match('/^"BatterySerialNumber"\s*=\s*\"?([^\"]*)\"?$/', $roworig, $data)) { $bat['serialnumber'] = $data[1]; /* auxiary */ } elseif (preg_match('/^"FullyCharged"\s*=\s*Yes$/', $roworig, $data)) { $bat['charging_state_f'] = true; } elseif (preg_match('/^"IsCharging"\s*=\s*Yes$/', $roworig, $data)) { $bat['charging_state_i'] = true; } elseif (preg_match('/^"ExternalConnected"\s*=\s*Yes$/', $roworig, $data)) { $bat['charging_state_e'] = true; /* FreeBSD */ } elseif (preg_match('/^Type:\s*(.*)$/', $roworig, $data)) { $bat['battery_type'] = $data[1]; } elseif (preg_match('/^State:\s*(.*)$/', $roworig, $data)) { $bat['charging_state'] = $data[1]; } elseif (preg_match('/^Present voltage:\s*(.*) (.*)$/', $roworig, $data)) { if ($data[2]=="mV") { // uV or mV detection $bat['present_voltage'] = $data[1]; } else { $bat['present_voltage'] = round($data[1]/1000); } } elseif (preg_match('/^Voltage:\s*(.*) (.*)$/', $roworig, $data)) { if ($data[2]=="mV") { // uV or mV detection $bat['present_voltage'] = $data[1]; } else { $bat['present_voltage'] = round($data[1]/1000); } } elseif (preg_match('/^Remaining capacity:\s*(.*)%$/', $roworig, $data)) { $bat['capacity'] = $data[1]; /* OpenBSD */ } elseif (preg_match('/^hw.sensors.acpibat0.volt0=(.*) VDC \(voltage\)$/', $roworig, $data)) { $bat['design_voltage'] = 1000*$data[1]; } elseif (preg_match('/^hw.sensors.acpibat0.volt1=(.*) VDC \(current voltage\)$/', $roworig, $data)) { $bat['present_voltage'] = 1000*$data[1]; } elseif (preg_match('/^hw.sensors.acpibat0.watthour0=(.*) Wh \(last full capacity\)$/', $roworig, $data)) { $bat['full_capacity'] = 1000*$data[1]; if (!isset($bat['capacity_unit'])) { $bat['capacity_unit'] = "mWh"; } elseif ($bat['capacity_unit'] != "mWh") { $bat['capacity_unit'] = "???"; } } elseif (preg_match('/^hw.sensors.acpibat0.watthour4=(.*) Wh \(design capacity\)$/', $roworig, $data)) { $bat['design_capacity'] = 1000*$data[1]; if (!isset($bat['capacity_unit'])) { $bat['capacity_unit'] = "mWh"; } elseif ($bat['capacity_unit'] != "mWh") { $bat['capacity_unit'] = "???"; } } elseif (preg_match('/^hw.sensors.acpibat0.watthour3=(.*) Wh \(remaining capacity\)/', $roworig, $data)) { $bat['remaining_capacity'] = 1000*$data[1]; if (!isset($bat['capacity_unit'])) { $bat['capacity_unit'] = "mWh"; } elseif ($bat['capacity_unit'] != "mWh") { $bat['capacity_unit'] = "???"; } } elseif (preg_match('/^hw.sensors.acpibat0.raw0=.* \((.*)\)/', $roworig, $data)) { $bat['charging_state'] = $data[1]; } } if (isset($this->_filecontent[$bi]['state'])) foreach ($this->_filecontent[$bi]['state'] as $roworig) { $roworig = trim($roworig); if (preg_match('/^remaining capacity:\s*(.*) (.*)$/', $roworig, $data)) { if (!isset($bat['capacity_unit']) || ($bat['capacity_unit'] == trim($data[2]))) { $bat['capacity_unit'] = trim($data[2]); $bat['remaining_capacity'] = $data[1]; } } elseif (preg_match('/^present voltage:\s*(.*) (.*)$/', $roworig, $data)) { if ($data[2]=="mV") { // uV or mV detection $bat['present_voltage'] = $data[1]; } else { $bat['present_voltage'] = round($data[1]/1000); } } elseif (preg_match('/^charging state:\s*(.*)$/', $roworig, $data)) { $bat['charging_state'] = $data[1]; } elseif (preg_match('/^POWER_SUPPLY_VOLTAGE_MIN_DESIGN=(.*)$/', $roworig, $data)) { if ($data[1]<100000) { // uV or mV detection $bat['design_voltage'] = $data[1]; } else { $bat['design_voltage'] = round($data[1]/1000); } } elseif (preg_match('/^POWER_SUPPLY_VOLTAGE_MAX_DESIGN=(.*)$/', $roworig, $data)) { if ($data[1]<100000) { // uV or mV detection $bat['design_voltage_max'] = $data[1]; } else { $bat['design_voltage_max'] = round($data[1]/1000); } } elseif (preg_match('/^POWER_SUPPLY_ENERGY_FULL=(.*)$/', $roworig, $data)) { $bat['full_capacity'] = ($data[1]/1000); if ($data[1]>=1000000000) { // µWh or nWh detection if (!isset($bat['capacity_unit'])) { $bat['capacity_unit'] = "µWh"; } elseif ($bat['capacity_unit'] != "µWh") { $bat['capacity_unit'] = "???"; } } else { if (!isset($bat['capacity_unit'])) { $bat['capacity_unit'] = "mWh"; } elseif ($bat['capacity_unit'] != "mWh") { $bat['capacity_unit'] = "???"; } } } elseif (preg_match('/^POWER_SUPPLY_CHARGE_FULL=(.*)$/', $roworig, $data)) { $bat['full_capacity'] = ($data[1]/1000); if (!isset($bat['capacity_unit'])) { $bat['capacity_unit'] = "mAh"; } elseif ($bat['capacity_unit'] != "mAh") { $bat['capacity_unit'] = "???"; } } elseif (preg_match('/^POWER_SUPPLY_ENERGY_NOW=(.*)$/', $roworig, $data)) { if (!isset($bat['capacity_unit']) || ($bat['capacity_unit'] == "mWh")) { $bat['capacity_unit'] = "mWh"; $bat['remaining_capacity'] = ($data[1]/1000); } } elseif (preg_match('/^POWER_SUPPLY_CHARGE_NOW=(.*)$/', $roworig, $data)) { if (!isset($bat['capacity_unit']) || ($bat['capacity_unit'] == "mAh")) { $bat['capacity_unit'] = "mAh"; $bat['remaining_capacity'] = ($data[1]/1000); } } elseif (preg_match('/^POWER_SUPPLY_VOLTAGE_NOW=(.*)$/', $roworig, $data)) { if ($data[1]<100000) { // uV or mV detection $bat['present_voltage'] = $data[1]; } else { $bat['present_voltage'] = round($data[1]/1000); } } elseif (preg_match('/^POWER_SUPPLY_CAPACITY=(.*)$/', $roworig, $data)) { $bat['capacity'] = $data[1]; } elseif (preg_match('/^POWER_SUPPLY_TEMP=(.*)$/', $roworig, $data)) { $bat['battery_temperature'] = $data[1]/10; } elseif (preg_match('/^POWER_SUPPLY_TECHNOLOGY=(.*)$/', $roworig, $data)) { $bat['battery_type'] = $data[1]; } elseif (preg_match('/^POWER_SUPPLY_STATUS=(.*)$/', $roworig, $data)) { $bat['charging_state'] = $data[1]; } elseif (preg_match('/^POWER_SUPPLY_HEALTH=(.*)$/', $roworig, $data)) { $bat['battery_condition'] = $data[1]; } elseif (preg_match('/^POWER_SUPPLY_MANUFACTURER=(.*)$/', $roworig, $data)) { $bat['manufacturer'] = $data[1]; } elseif (preg_match('/^POWER_SUPPLY_NAME=(.*)$/', $roworig, $data)) { $bat['name'] = $data[1]; } elseif (preg_match('/^POWER_SUPPLY_MODEL_NAME=(.*)$/', $roworig, $data)) { $bat['model'] = $data[1]; } elseif (defined('PSI_PLUGIN_BAT_SHOW_SERIAL') && PSI_PLUGIN_BAT_SHOW_SERIAL && preg_match('/^POWER_SUPPLY_SERIAL_NUMBER=(.*)$/', $roworig, $data)) { $bat['serialnumber'] = $data[1]; } } if (sizeof($bat)>0) $this->_result[$bi] = $bat; } } /** * generates the XML content for the plugin * * @return SimpleXMLElement entire XML content for the plugin */ public function xml() { foreach ($this->_result as $bat_item) { $xmlbat = $this->xml->addChild("Bat"); if (isset($bat_item['name'])) { $xmlbat->addAttribute("Name", $bat_item['name']); } if (isset($bat_item['model']) && ($bat_item['model'] !== '') && ($bat_item['model'] !== '1')) { $xmlbat->addAttribute("Model", $bat_item['model']); } if (defined('PSI_PLUGIN_BAT_SHOW_SERIAL') && PSI_PLUGIN_BAT_SHOW_SERIAL && isset($bat_item['serialnumber']) && ($bat_item['serialnumber'] !== "") && ($bat_item['serialnumber'] !== "0") && ($bat_item['serialnumber'] !== "0000")) { $xmlbat->addAttribute("SerialNumber", $bat_item['serialnumber']); } if (isset($bat_item['manufacturer']) && ($bat_item['manufacturer'] !== '') && ($bat_item['manufacturer'] !== '-Virtual Battery 0-')) { $xmlbat->addAttribute("Manufacturer", $bat_item['manufacturer']); } if (isset($bat_item['capacity_unit']) && ((($tmp_capacity_unit = $bat_item['capacity_unit']) === "Wh") || ($tmp_capacity_unit === "Ah")) && ((isset($bat_item['full_capacity']) && ($bat_item['full_capacity'] != round($bat_item['full_capacity']))) || (isset($bat_item['remaining_capacity']) && ($bat_item['remaining_capacity'] != round($bat_item['remaining_capacity']))) || (isset($bat_item['design_capacity']) && ($bat_item['design_capacity'] != round($bat_item['design_capacity']))))) { if (isset($bat_item['full_capacity'])) { $bat_item['full_capacity'] = $bat_item['full_capacity'] * 1000; } if (isset($bat_item['remaining_capacity'])) { $bat_item['remaining_capacity'] = $bat_item['remaining_capacity'] * 1000; } if (isset($bat_item['design_capacity'])) { $bat_item['design_capacity'] = $bat_item['design_capacity'] * 1000; } if ($tmp_capacity_unit === "Wh") { $bat_item['capacity_unit'] = "mWh"; } else { $bat_item['capacity_unit'] = "mAh"; } } if ((!isset($bat_item['remaining_capacity']) || (isset($bat_item['full_capacity']) && ($bat_item['full_capacity'] == 0))) && isset($bat_item['capacity']) && ($bat_item['capacity']>=0)) { if (isset($bat_item['capacity_unit']) && ($bat_item['capacity_unit'] !== "???") && (isset($bat_item['full_capacity']) && ($bat_item['full_capacity'] > 0))) { $xmlbat->addAttribute("CapacityUnit", $bat_item['capacity_unit']); $xmlbat->addAttribute("RemainingCapacity", round($bat_item['capacity']*$bat_item['full_capacity']/100)); $xmlbat->addAttribute("FullCapacity", $bat_item['full_capacity']); if (isset($bat_item['design_capacity'])) { $xmlbat->addAttribute("DesignCapacity", $bat_item['design_capacity']); } } else { $xmlbat->addAttribute("FullCapacity", 100); $xmlbat->addAttribute("RemainingCapacity", $bat_item['capacity']); $xmlbat->addAttribute("CapacityUnit", "%"); } } else { if (isset($bat_item['full_capacity'])) { if (isset($bat_item['design_capacity'])) { $xmlbat->addAttribute("DesignCapacity", $bat_item['design_capacity']); } $xmlbat->addAttribute("FullCapacity", $bat_item['full_capacity']); } elseif (isset($bat_item['design_capacity'])) { $xmlbat->addAttribute("FullCapacity", $bat_item['design_capacity']); } if (isset($bat_item['remaining_capacity'])) { $xmlbat->addAttribute("RemainingCapacity", $bat_item['remaining_capacity']); } if (isset($bat_item['capacity_unit'])) { $xmlbat->addAttribute("CapacityUnit", $bat_item['capacity_unit']); } } if (isset($bat_item['design_voltage']) && ($bat_item['design_voltage']>0)) { $xmlbat->addAttribute("DesignVoltage", $bat_item['design_voltage']); if (isset($bat_item['design_voltage_max']) && ($bat_item['design_voltage_max']>0) && ($bat_item['design_voltage_max'] != $bat_item['design_voltage'])) { $xmlbat->addAttribute("DesignVoltageMax", $bat_item['design_voltage_max']); } } elseif (isset($bat_item['design_voltage_max']) && ($bat_item['design_voltage_max']>0)) { $xmlbat->addAttribute("DesignVoltage", $bat_item['design_voltage_max']); } if (isset($bat_item['present_voltage'])) { $xmlbat->addAttribute("PresentVoltage", $bat_item['present_voltage']); } if (isset($bat_item['charging_state'])) { $xmlbat->addAttribute("ChargingState", $bat_item['charging_state']); } else { if (isset($bat_item['charging_state_i'])) { $xmlbat->addAttribute("ChargingState", 'Charging'); } elseif (!isset($bat_item['charging_state_e'])) { $xmlbat->addAttribute("ChargingState", 'Discharging'); } elseif (isset($bat_item['charging_state_f'])) { $xmlbat->addAttribute("ChargingState", 'Fully Charged'); } else { $xmlbat->addAttribute("ChargingState", 'Unknown state'); } } if (isset($bat_item['battery_type'])) { $xmlbat->addAttribute("BatteryType", $bat_item['battery_type']); } if (isset($bat_item['battery_temperature'])) { $xmlbat->addAttribute("BatteryTemperature", $bat_item['battery_temperature']); } if (isset($bat_item['battery_condition'])) { $xmlbat->addAttribute("BatteryCondition", $bat_item['battery_condition']); } if (isset($bat_item['cycle_count'])) { $xmlbat->addAttribute("CycleCount", $bat_item['cycle_count']); } } return $this->xml->getSimpleXmlElement(); } } phpsysinfo-3.4.4/plugins/bat/js/000077500000000000000000000000001467431054600166015ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/bat/js/bat.js000066400000000000000000000254611467431054600177150ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008 by phpSysInfo - A PHP System Information Script * * http://phpsysinfo.sourceforge.net/ * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ // // $Id: bat.js 661 2012-08-27 11:26:39Z namiltd $ // /*global $, jQuery, buildBlock, datetime, plugin_translate, genlang */ "use strict"; var bat_show = false; /** * build the table where content is inserted * @param {jQuery} xml plugin-XML */ function bat_buildTable(xml) { var html = "", tree = [], closed = [], batcount = 0, index = 0, hostname = ""; $("#Plugin_BAT #Plugin_BATTable").remove(); hostname = $("Plugins Plugin_BAT", xml).attr('Hostname'); if (hostname !== undefined) { $('span[class=Hostname_BAT]').html(hostname); } html += "
    \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; $("Plugins Plugin_Bat Bat", xml).each(function bat_getbats(id) { var name = "", DesignCapacity = 0, FullCapacity = 0, DesignVoltage = "", BatteryType = "", RemainingCapacity = 0, PresentVoltage = "", ChargingState = "", BatteryTemperature = "", BatteryCondition = "", CapacityUnit = "", CycleCount = "", DesignVoltageMax = "", Manufacturer = "", Model = "", SerialNumber = ""; name = $(this).attr("Name"); if (name === undefined) { name = "Battery"+(batcount++); } DesignCapacity = parseInt($(this).attr("DesignCapacity"), 10); FullCapacity = parseInt($(this).attr("FullCapacity"), 10); DesignVoltage = $(this).attr("DesignVoltage"); BatteryType = $(this).attr("BatteryType"); RemainingCapacity = parseInt($(this).attr("RemainingCapacity"), 10); PresentVoltage = $(this).attr("PresentVoltage"); ChargingState = $(this).attr("ChargingState"); BatteryTemperature = $(this).attr("BatteryTemperature"); BatteryCondition = $(this).attr("BatteryCondition"); CapacityUnit = $(this).attr("CapacityUnit"); CycleCount = $(this).attr("CycleCount"); DesignVoltageMax = $(this).attr("DesignVoltageMax"); Manufacturer = $(this).attr("Manufacturer"); Model = $(this).attr("Model"); SerialNumber = $(this).attr("SerialNumber"); html += " \n"; index = tree.push(0); if (Model !== undefined) { html += " \n"; tree.push(index); } if (Manufacturer !== undefined) { html += " \n"; tree.push(index); } if (SerialNumber !== undefined) { html += " \n"; tree.push(index); } if (CapacityUnit === undefined) { CapacityUnit = "mWh"; } if ((CapacityUnit == "%") && ($(this).attr("RemainingCapacity") !== undefined)) { if (!isNaN(RemainingCapacity)) { html += " \n"; tree.push(index); } } else { if (!isNaN(DesignCapacity)) { html += " \n"; tree.push(index); } if (isNaN(FullCapacity)) { if (!isNaN(RemainingCapacity)) { html += " \n"; tree.push(index); } } else { if (isNaN(DesignCapacity)) { html += " \n"; tree.push(index); } else { html += " \n"; tree.push(index); } if (!isNaN(RemainingCapacity)) { html += " \n"; tree.push(index); } } } if (ChargingState !== undefined) { html += " \n"; tree.push(index); } if (DesignVoltage !== undefined) { if (DesignVoltageMax !== undefined) { html += " \n"; tree.push(index); } else { html += " \n"; tree.push(index); } } else if (DesignVoltageMax !== undefined) { html += " \n"; tree.push(index); } if (PresentVoltage !== undefined) { html += " \n"; tree.push(index); } if (BatteryType !== undefined) { html += " \n"; tree.push(index); } if (BatteryTemperature !== undefined) { html += " \n"; tree.push(index); } if (BatteryCondition !== undefined) { html += " \n"; tree.push(index); } if (CycleCount !== undefined) { html += " \n"; tree.push(index); } bat_show = true; }); html += " \n"; html += "
    " + genlang(6, "BAT") + "" + genlang(7, "BAT") + "
    " + name + "
    " + genlang(15, "BAT") + "
    " + Model +"
    " + genlang(14, "BAT") + "
    " + Manufacturer +"
    " + genlang(16, "BAT") + "
    " + SerialNumber +"
    " + genlang(3, "BAT") + "
    " + createBar(RemainingCapacity) +"
    " + genlang(2, "BAT") + "
    " + DesignCapacity+' '+CapacityUnit +"
    " + genlang(3, "BAT") + "
    " + RemainingCapacity+' '+CapacityUnit +"
    " + genlang(13, "BAT") + "
    " + FullCapacity+' '+CapacityUnit +"
    " + genlang(13, "BAT") + "
    " + FullCapacity+' '+CapacityUnit +"" + createBar(DesignCapacity !== 0 ? round(FullCapacity / DesignCapacity * 100, 0) : 0) + "
    " + genlang(3, "BAT") + "
    " + RemainingCapacity+' '+CapacityUnit +"" + createBar(FullCapacity !== 0 ? round(RemainingCapacity / FullCapacity * 100, 0) : 0) + "
    " + genlang(8, "BAT") + "
    " + ChargingState +"
    " + genlang(4, "BAT") + "
    " + DesignVoltage+' mV' +"" + DesignVoltageMax+' mV'+ "
    " + genlang(4, "BAT") + "
    " + DesignVoltage+' mV' +"
    " + genlang(4, "BAT") + "
    " + DesignVoltageMax+' mV' +"
    " + genlang(5, "BAT") + "
    " + PresentVoltage+' mV' +"
    " + genlang(9, "BAT") + "
    " + BatteryType +"
    " + genlang(10, "BAT") + "
    " + formatTemp(BatteryTemperature, xml) +"
    " + genlang(11, "BAT") + "
    " + BatteryCondition +"
    " + genlang(12, "BAT") + "
    " + CycleCount +"
    \n"; html += "
    \n"; $("#Plugin_BAT").append(html); $("#Plugin_BATTable").jqTreeTable(tree, { openImg: "./gfx/treeTable/tv-collapsable.gif", shutImg: "./gfx/treeTable/tv-expandable.gif", leafImg: "./gfx/treeTable/tv-item.gif", lastOpenImg: "./gfx/treeTable/tv-collapsable-last.gif", lastShutImg: "./gfx/treeTable/tv-expandable-last.gif", lastLeafImg: "./gfx/treeTable/tv-item-last.gif", vertLineImg: "./gfx/treeTable/vertline.gif", blankImg: "./gfx/treeTable/blank.gif", collapse: closed, column: 0, striped: true, highlight: false, state: false }); } /** * load the xml via ajax */ function bat_request() { $("#Reload_BATTable").attr("title", "reload"); $.ajax({ url: "xml.php?plugin=BAT", dataType: "xml", error: function bat_error() { $.jGrowl("Error loading XML document for Plugin BAT!"); }, success: function bat_buildblock(xml) { populateErrors(xml); bat_buildTable(xml); if (bat_show) { plugin_translate("BAT"); $("#Plugin_BAT").show(); } } }); } $(document).ready(function bat_buildpage() { $("#footer").before(buildBlock("BAT", 1, true)); $("#Plugin_BAT").addClass("halfsize"); bat_request(); $("#Reload_BATTable").click(function bat_reload(id) { bat_request(); $(this).attr("title", datetime()); }); }); phpsysinfo-3.4.4/plugins/bat/js/bat_bootstrap.js000066400000000000000000000163001467431054600220020ustar00rootroot00000000000000function renderPlugin_bat(data) { var batcount = 0; var directives = { Name: { text: function () { return (this.Name !== undefined) ? this.Name : 'Battery'+(batcount++); } }, DesignCapacity: { html: function () { return this.DesignCapacity + String.fromCharCode(160) + this.CapacityUnit; } }, FullCapacity: { html: function () { return this.FullCapacity + String.fromCharCode(160) + this.CapacityUnit; } }, FullCapacityBar: { html: function () { if (( this.CapacityUnit !== "%" ) && (this.DesignCapacity !== undefined)){ var percent = (this.DesignCapacity > 0) ? round(100*this.FullCapacity/this.DesignCapacity, 0) : 0; return '
    ' + '
    ' + percent + '%
    '; } else { return ''; } } }, RemainingCapacity: { html: function () { if ( this.CapacityUnit === "%" ) { return '
    ' + '
    ' + this.RemainingCapacity + '%
    '; } else { return this.RemainingCapacity + String.fromCharCode(160) + this.CapacityUnit; } } }, RemainingCapacityBar: { html: function () { if (( this.CapacityUnit !== "%" ) && (this.FullCapacity !== undefined)){ var percent = (this.FullCapacity > 0) ? round(100*this.RemainingCapacity/this.FullCapacity, 0) : 0; return '
    ' + '
    ' + percent + '%
    '; } else { return ''; } } }, PresentVoltage: { text: function () { return this.PresentVoltage + String.fromCharCode(160) + 'mV'; } }, BatteryTemperature: { html: function () { return formatTemp(this.BatteryTemperature, data.Options["@attributes"].tempFormat); } }, DesignVoltage: { text: function () { return this.DesignVoltage + String.fromCharCode(160) + 'mV'; } }, DesignVoltageMax: { text: function () { return (this.DesignVoltageMax !== undefined) ? this.DesignVoltageMax + String.fromCharCode(160) + 'mV' : ''; } } }; if (data.Plugins.Plugin_BAT !== undefined) { var bats = items(data.Plugins.Plugin_BAT.Bat); if (bats.length > 0) { var html = ""; var paramlist = {Model:15,Manufacturer:14,SerialNumber:16,DesignCapacity:2,FullCapacity:13,RemainingCapacity:3,ChargingState:8,DesignVoltage:4,PresentVoltage:5,BatteryType:9,BatteryTemperature:10,BatteryCondition:11,CycleCount:12}; var paramlis2 = {FullCapacity:'FullCapacityBar',RemainingCapacity:'RemainingCapacityBar',DesignVoltage:'DesignVoltageMax'}; var i, proc_param; for (i = 0; i < bats.length; i++) { if (bats[i]["@attributes"].CapacityUnit === undefined) { bats[i]["@attributes"].CapacityUnit = 'mWh'; } else if ((bats[i]["@attributes"].CapacityUnit === '%') && (bats[i]["@attributes"].RemainingCapacity !== undefined)) { if (bats[i]["@attributes"].DesignCapacity !== undefined) { delete bats[i]["@attributes"].DesignCapacity; } if (bats[i]["@attributes"].FullCapacity !== undefined) { delete bats[i]["@attributes"].FullCapacity; } } if ((bats[i]["@attributes"].DesignCapacity !== undefined) && isNaN(bats[i]["@attributes"].DesignCapacity = parseInt(bats[i]["@attributes"].DesignCapacity, 10))) { delete bats[i]["@attributes"].DesignCapacity; } if ((bats[i]["@attributes"].FullCapacity !== undefined) && isNaN(bats[i]["@attributes"].FullCapacity = parseInt(bats[i]["@attributes"].FullCapacity, 10))) { delete bats[i]["@attributes"].FullCapacity; } if ((bats[i]["@attributes"].RemainingCapacity !== undefined) && isNaN(bats[i]["@attributes"].RemainingCapacity = parseInt(bats[i]["@attributes"].RemainingCapacity, 10))) { delete bats[i]["@attributes"].RemainingCapacity; } try { html+=""; html+=""; html+=""; for (proc_param in paramlist) { if (bats[i]["@attributes"][proc_param] !== undefined) { html+=""; html+="" + genlang(paramlist[proc_param], 'bat') + ""; html+=""; if (paramlis2[proc_param] !== undefined) { html+=""; } else { html+=""; } html+=""; } } } catch (err) { $("#bat-" + i).hide(); } } $("#bat-data").empty().append(html); for (i = 0; i < bats.length; i++) { try { $('#bat-'+ i).render(bats[i]["@attributes"], directives); $("#bat-" + i).show(); for (proc_param in paramlist) { if (bats[i]["@attributes"][proc_param] !== undefined) { $('#bat-'+ i+ "-" + proc_param).render(bats[i]["@attributes"], directives); } } } catch (err) { $("#bat-" + i).hide(); } } $('#bat').treegrid({ initialState: 'expanded', expanderExpandedClass: 'normalicon normalicon-down', expanderCollapsedClass: 'normalicon normalicon-right' }); $('#block_bat').show(); } else { $('#block_bat').hide(); } } else { $('#block_bat').hide(); } } phpsysinfo-3.4.4/plugins/bat/lang/000077500000000000000000000000001467431054600171065ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/bat/lang/cz.xml000066400000000000000000000042201467431054600202420ustar00rootroot00000000000000 Stav baterie Konstrukční kapacita Zbývající kapacita Konstrukční napětí Aktuální napětí Baterie Hodnota Stav nabíjení Battery Type Battery Temperature Battery Condition Cycle Count Plná kapacita Manufacturer Model Serial Number phpsysinfo-3.4.4/plugins/bat/lang/de.xml000066400000000000000000000041651467431054600202260ustar00rootroot00000000000000 Akku-Status Bemeskapazität Übrige Kapazität Bemessungsspannung Momentane Spannung Akku Wert Ladezustand Akku-Typ Akku-Temperatur Akku-Zustand Cycle Count Volle Kapazität Manufacturer Model Serial Number phpsysinfo-3.4.4/plugins/bat/lang/en.xml000066400000000000000000000041701467431054600202340ustar00rootroot00000000000000 Battery Status Design capacity Remaining capacity Design voltage Present voltage Battery Value Charging state Battery Type Battery Temperature Battery Condition Cycle Count Full capacity Manufacturer Model Serial Number phpsysinfo-3.4.4/plugins/bat/lang/fr.xml000066400000000000000000000041751467431054600202460ustar00rootroot00000000000000 Etat des batteries Capacité d'origine Capacité restante Tension d'origine Tension actuelle Elements Valeur Etat Battery Type Battery Temperature Battery Condition Cycle Count Capacité pleine Manufacturer Model Serial Number phpsysinfo-3.4.4/plugins/bat/lang/gr.xml000066400000000000000000000046311467431054600202440ustar00rootroot00000000000000 Κατάσταση Μπαταρίας Εργοστασιακή χωρητικότητα Εναπομείνουσα χωρητικότητα Εργοστασιακή τάση Τρέχουσα τάση Μπαταρία Τιμή Κατάσταση φόρτισης Τύπος Μπαταρίας Θερμοκρασία Μπαταρίας Κατάσταση Μπαταρίας Κύκλοι φόρτισης Πλήρης χωρητικότητα Κατασκευαστής Μοντέλο Σειριακός Αριθμός phpsysinfo-3.4.4/plugins/bat/lang/pl.xml000066400000000000000000000042201467431054600202410ustar00rootroot00000000000000 Status Baterii Pojemność znamionowa Pojemność aktualna Napięcie znamionowe Napięcie aktualne Bateria Wartość Stan ładowania Typ ogniw Temperatura ogniw Kondycja ogniw Cykli ładowania Pojemność pełna Producent Model Numer seryjny phpsysinfo-3.4.4/plugins/bat/lang/ro.xml000066400000000000000000000042011467431054600202450ustar00rootroot00000000000000 Stare Baterie Capacitate Design Capacitate rămasă Voltaj design Voltaj prezent Baterie valoare Stare de Încărcare Tip Baterie Temperatura Baterie Condiții Baterie Cycle Count Capacitate maximă Manufacturer Model Serial Number phpsysinfo-3.4.4/plugins/bat/lang/ru.xml000066400000000000000000000045351467431054600202650ustar00rootroot00000000000000 Состояние батареи Проектная мощность Оставшийся объем Проектное напряжение Фактическое напряжение Aккумулятор Значение Состояние зарядки Тип батареи Температура батареи Состояние аккумулятора Циклы Полная мощность Manufacturer Model Serial Number phpsysinfo-3.4.4/plugins/diskload/000077500000000000000000000000001467431054600172115ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/diskload/class.diskload.inc.php000066400000000000000000000054671467431054600234040ustar00rootroot00000000000000 * @copyright 2023 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version $Id: class.diskload.inc.php 661 2023-02-10 09:13:52Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ class DiskLoad extends PSI_Plugin { /** * variable, which holds the result before the xml is generated out of this array * @var array */ private $_result; /** * read the data into an internal array and also call the parent constructor * * @param String $enc encoding */ public function __construct($enc) { parent::__construct(__CLASS__, $enc); $this->_result = array(); } /** * doing all tasks to get the required informations that the plugin needs * result is stored in an internal array * * @return void */ public function execute() { if (((PSI_OS == 'WINNT') && !defined('PSI_EMU_HOSTNAME')) || (defined('PSI_EMU_HOSTNAME') && !defined('PSI_EMU_PORT'))) { $diskphys = array(); $disklogi = array(); try { $wmi = WINNT::getcimv2wmi(); $diskphys = WINNT::getWMI($wmi, 'Win32_PerfFormattedData_PerfDisk_PhysicalDisk', array('Name', 'PercentIdleTime')); $disklogi = WINNT::getWMI($wmi, 'Win32_PerfFormattedData_PerfDisk_LogicalDisk', array('Name', 'PercentIdleTime')); } catch (Exception $e) { } foreach ($diskphys as $disk_item) if (isset($disk_item['Name']) && (trim($disk_item['Name']) !== '') && (trim($disk_item['Name']) !== '_Total') && isset($disk_item['PercentIdleTime']) && (trim($disk_item['PercentIdleTime']) !== '')) { $this->_result[] = $disk_item; } foreach ($disklogi as $disk_item) if (isset($disk_item['Name']) && (trim($disk_item['Name']) !== '') && (trim($disk_item['Name']) !== '_Total') && isset($disk_item['PercentIdleTime']) && (trim($disk_item['PercentIdleTime']) !== '')) { $this->_result[] = $disk_item; } } } /** * generates the XML content for the plugin * * @return SimpleXMLElement entire XML content for the plugin */ public function xml() { foreach ($this->_result as $disk_item) { $xmldiskload_disk = $this->xml->addChild("Disk"); $xmldiskload_disk ->addAttribute('Name', trim($disk_item['Name'])); $xmldiskload_disk ->addAttribute('Load', min(max(100 - trim($disk_item['PercentIdleTime']), 0), 100)); } return $this->xml->getSimpleXmlElement(); } } phpsysinfo-3.4.4/plugins/diskload/diskload_bootstrap.html000066400000000000000000000022561467431054600237730ustar00rootroot00000000000000 phpsysinfo-3.4.4/plugins/diskload/js/000077500000000000000000000000001467431054600176255ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/diskload/js/diskload.js000066400000000000000000000103611467431054600217560ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008 by phpSysInfo - A PHP System Information Script * * http://phpsysinfo.sourceforge.net/ * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ // // $Id: diskload.js 661 2012-08-27 11:26:39Z namiltd $ // /*global $, jQuery, buildBlock, datetime, plugin_translate, genlang */ "use strict"; var diskload_show = false; /** * insert content into table * @param {jQuery} xml plugin-XML */ function diskload_populate(xml) { var html = "", datetimeFormat = "", hostname = ""; hostname = $("Plugins Plugin_DiskLoad", xml).attr('Hostname'); if (hostname !== undefined) { $('span[class=Hostname_diskload]').html(hostname); } $("Options", xml).each(function getByteFormat(id) { datetimeFormat = $(this).attr("datetimeFormat"); }); $("Plugins Plugin_DiskLoad Disk", xml).each(function diskload_getDisk(idp) { html += " \n"; html += " " + $(this).attr("Name") + "\n"; html += " " + createBar($(this).attr("Load")) + "\n"; html += " \n"; diskload_show = true; }); $("#Plugin_DiskLoadTable-tbody").empty().append(html); $('#Plugin_DiskLoadTable tr:nth-child(even)').addClass('even'); } /** * build the table where content is inserted * @param {jQuery} xml plugin-XML */ function diskload_buildTable(xml) { var html = ""; html += "
    \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += "
    " + genlang(2, "diskload") + "" + genlang(3, "diskload") + "
    \n"; html += "
    \n"; $("#Plugin_DiskLoad").append(html); } /** * load the xml via ajax */ function diskload_request() { $("#Reload_DiskLoadTable").attr("title", "reload"); $.ajax({ url: "xml.php?plugin=DiskLoad", dataType: "xml", error: function diskload_error() { $.jGrowl("Error loading XML document for Plugin DiskLoad!"); }, success: function diskload_buildblock(xml) { populateErrors(xml); diskload_populate(xml); if (diskload_show) { plugin_translate("DiskLoad"); $("#Plugin_DiskLoad").show(); } } }); } $(document).ready(function diskload_buildpage() { $("#footer").before(buildBlock("DiskLoad", 1, true)); $("#Plugin_DiskLoad").addClass("halfsize"); diskload_buildTable(); diskload_request(); $("#Reload_DiskLoadTable").click(function diskload_reload(id) { diskload_request(); $(this).attr("title", datetime()); }); }); phpsysinfo-3.4.4/plugins/diskload/js/diskload_bootstrap.js000066400000000000000000000017111467431054600240520ustar00rootroot00000000000000function renderPlugin_diskload(data) { var directives = { Load: { html: function () { return '
    ' + '
    ' + this.Load + '%
    '; } } }; if (data.Plugins.Plugin_DiskLoad !== undefined) { var disks = items(data.Plugins.Plugin_DiskLoad.Disk); if (disks.length > 0) { var do_disks = []; do_disks.push_attrs(disks); $('#diskload-data').render(do_disks, directives); //$('#diskload_Name').removeClass("sorttable_sorted"); // reset sort order //sorttable.innerSortFunction.apply($('#diskload_Name')[0], []); $('#block_diskload').show(); } else { $('#block_diskload').hide(); } } else { $('#block_diskload').hide(); } } phpsysinfo-3.4.4/plugins/diskload/lang/000077500000000000000000000000001467431054600201325ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/diskload/lang/en.xml000066400000000000000000000014731467431054600212630ustar00rootroot00000000000000 Disk Load Information Disk Load percent phpsysinfo-3.4.4/plugins/diskload/lang/pl.xml000066400000000000000000000015051467431054600212700ustar00rootroot00000000000000 Informacja o obciążeniu dysków Dysk Obciążenie phpsysinfo-3.4.4/plugins/docker/000077500000000000000000000000001467431054600166665ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/docker/class.docker.inc.php000066400000000000000000000120501467431054600225200ustar00rootroot00000000000000 * @copyright 2014 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 1.0 * @link http://phpsysinfo.sourceforge.net */ class Docker extends PSI_Plugin { private $_lines; public function __construct($enc) { parent::__construct(__CLASS__, $enc); $this->_lines = array(); } /** * get docker information * * @return array docker in array with label */ private function getDocker() { $result = array(); $i = 0; foreach ($this->_lines as $line) { if ($i > 0) { $buffer = preg_split("/\s\s+/", $line); $result[$i]['Name'] = $buffer[0]; $result[$i]['CPUUsage'] = str_replace(',', '.', trim($buffer[1], '%')); preg_match('/([\d\.]+)(B|KiB|MiB|GiB|TiB|PiB)\s+\/\s+([\d\.]+)(B|KiB|MiB|GiB|TiB|PiB)/', str_replace(',', '.', trim($buffer[2])), $tmpbuf); switch ($tmpbuf[2]) { case 'B': $result[$i]['MemoryUsed'] = $tmpbuf[1]; break; case 'KiB': $result[$i]['MemoryUsed'] = 1024*$tmpbuf[1]; break; case 'MiB': $result[$i]['MemoryUsed'] = 1024*1024*$tmpbuf[1]; break; case 'GiB': $result[$i]['MemoryUsed'] = 1024*1024*1024*$tmpbuf[1]; break; case 'TiB': $result[$i]['MemoryUsed'] = 1024*1024*1024*1024*$tmpbuf[1]; break; case 'PiB': $result[$i]['MemoryUsed'] = 1024*1024*1024*1024*1025*$tmpbuf[1]; } switch ($tmpbuf[4]) { case 'B': $result[$i]['MemoryLimit'] = $tmpbuf[3]; break; case 'KiB': $result[$i]['MemoryLimit'] = 1024*$tmpbuf[3]; break; case 'MiB': $result[$i]['MemoryLimit'] = 1024*1024*$tmpbuf[3]; break; case 'GiB': $result[$i]['MemoryLimit'] = 1024*1024*1024*$tmpbuf[3]; break; case 'TiB': $result[$i]['MemoryLimit'] = 1024*1024*1024*1024*$tmpbuf[3]; break; case 'PiB': $result[$i]['MemoryLimit'] = 1024*1024*1024*1024*1025*$tmpbuf[3]; } $result[$i]['MemoryUsage'] = str_replace(',', '.', trim($buffer[3], '%')); $result[$i]['NetIO'] = trim($buffer[4]); $result[$i]['BlockIO'] = trim($buffer[5]); $result[$i]['PIDs'] = trim($buffer[6]); } $i++; } return $result; } public function execute() { $this->_lines = array(); if ((PSI_OS != 'WINNT') && (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT'))) { switch (strtolower(PSI_PLUGIN_DOCKER_ACCESS)) { case 'command': $lines = ""; if (CommonFunctions::executeProgram('docker', 'stats --no-stream --format \'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}\t{{.NetIO}}\t{{.BlockIO}}\t{{.PIDs}}\'', $lines) && !empty($lines)) $this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); break; case 'data': if (!defined('PSI_EMU_HOSTNAME') && CommonFunctions::rftsdata("docker.tmp", $lines) && !empty($lines)) $this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); break; default: $this->global_error->addConfigError("execute()", "[docker] ACCESS"); } } } public function xml() { if (empty($this->_lines)) return $this->xml->getSimpleXmlElement(); $arrBuff = $this->getDocker(); if (sizeof($arrBuff) > 0) { $docker = $this->xml->addChild("Docker"); foreach ($arrBuff as $arrValue) { $item = $docker->addChild('Item'); $item->addAttribute('Name', $arrValue['Name']); $item->addAttribute('CPUUsage', $arrValue['CPUUsage']); $item->addAttribute('MemoryUsage', $arrValue['MemoryUsage']); $item->addAttribute('MemoryUsed', Round($arrValue['MemoryUsed'])); $item->addAttribute('MemoryLimit', Round($arrValue['MemoryLimit'])); $item->addAttribute('NetIO', $arrValue['NetIO']); $item->addAttribute('BlockIO', $arrValue['BlockIO']); $item->addAttribute('PIDs', $arrValue['PIDs']); } } return $this->xml->getSimpleXmlElement(); } } phpsysinfo-3.4.4/plugins/docker/docker_bootstrap.html000066400000000000000000000045111467431054600231210ustar00rootroot00000000000000 phpsysinfo-3.4.4/plugins/docker/js/000077500000000000000000000000001467431054600173025ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/docker/js/docker.js000066400000000000000000000136701467431054600211160ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008 by phpSysInfo - A PHP System Information Script * * http://phpsysinfo.sourceforge.net/ * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //$Id: docker.js 661 2014-01-08 11:26:39 aolah76 $ /*global $, jQuery, buildBlock, datetime, plugin_translate, genlang, createBar */ "use strict"; var docker_show = false, docker_table; /** * insert content into table * @param {jQuery} xml plugin-XML */ function docker_populate(xml) { var hostname = ""; docker_table.fnClearTable(); hostname = $("Plugins Plugin_Docker", xml).attr('Hostname'); if (hostname !== undefined) { $('span[class=Hostname_Docker]').html(hostname); } $("Plugins Plugin_Docker Docker Item", xml).each(function docker_getitem(id) { var name = "", cpuu= 0, memu = 0, used = 0, limit = 0, netio = "", blockio = "", pids = 0; name = $(this).attr("Name"); cpuu = parseInt($(this).attr("CPUUsage"), 10); memu = parseInt($(this).attr("MemoryUsage"), 10); used = parseInt($(this).attr("MemoryUsed"), 10); limit = parseInt($(this).attr("MemoryLimit"), 10); netio = $(this).attr("NetIO"); blockio = $(this).attr("BlockIO"); pids = parseInt($(this).attr("PIDs"), 10); docker_table.fnAddData(["" + name + "" + name, "" + cpuu + "" + createBar(cpuu), "" + memu + "" + createBar(memu), "" + used + "" + formatBytes(used, xml), "" + limit + "" + formatBytes(limit, xml), "" + netio + "" + netio, "" + blockio + "" + blockio, "" + pids + "" + pids]); docker_show = true; }); } function docker_buildTable() { var html = ""; html += "
    \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += "
    " + genlang(101, "docker") + "" + genlang(102, "docker") + "" + genlang(103, "docker") + "" + genlang(104, "docker") + "" + genlang(105, "docker") + "" + genlang(106, "docker") + "" + genlang(107, "docker") + "" + genlang(108, "docker") + "
    \n"; html += "
    \n"; $("#Plugin_Docker").append(html); docker_table = $("#Plugin_DockerTable").dataTable({ "bPaginate": false, "bLengthChange": false, "bFilter": false, "bSort": true, "bInfo": false, "bProcessing": true, "bAutoWidth": false, "bStateSave": true, "aoColumns": [{ "sType": 'span-string' }, { "sType": 'span-number' }, { "sType": 'span-number' }, { "sType": 'span-number', "sClass": "right" }, { "sType": 'span-number', "sClass": "right" }, { "sType": 'span-string', "sClass": "right" }, { "sType": 'span-string', "sClass": "right" }, { "sType": 'span-number', "sClass": "right" }] }); } /** * load the xml via ajax */ function docker_request() { $("#Reload_DockerTable").attr("title", "reload"); $.ajax({ url: "xml.php?plugin=docker", dataType: "xml", error: function docker_error() { $.jGrowl("Error loading XML document for Plugin docker!"); }, success: function docker_buildblock(xml) { populateErrors(xml); docker_populate(xml); if (docker_show) { plugin_translate("Docker"); $("#Plugin_Docker").show(); } } }); } $(document).ready(function docker_buildpage() { $("#footer").before(buildBlock("Docker", 1, true)); $("#Plugin_Docker").addClass("fullsize"); docker_buildTable(); docker_request(); $("#Reload_DockerTable").click(function docker_reload(id) { docker_request(); $(this).attr("title", datetime()); }); }); phpsysinfo-3.4.4/plugins/docker/js/docker_bootstrap.js000066400000000000000000000033611467431054600232070ustar00rootroot00000000000000function renderPlugin_docker(data) { var directives = { CPUUsage: { html: function () { return '
    ' + '
    ' + '
    ' + round(this.CPUUsage,2) + '%
    '; } }, MemoryUsage: { html: function () { return '
    ' + '
    ' + '
    ' + round(this.MemoryUsage,2) + '%
    '; } }, MemoryUsed: { html: function () { return formatBytes(this.MemoryUsed, data.Options["@attributes"].byteFormat); } }, MemoryLimit: { html: function () { return formatBytes(this.MemoryLimit, data.Options["@attributes"].byteFormat); } } }; if ((data.Plugins.Plugin_Docker !== undefined) && (data.Plugins.Plugin_Docker.Docker !== undefined)) { var doitems = items(data.Plugins.Plugin_Docker.Docker.Item); if (doitems.length > 0) { var do_memory = []; do_memory.push_attrs(doitems); $('#docker-data').render(do_memory, directives); $('#docker_Name').removeClass("sorttable_sorted"); // reset sort order sorttable.innerSortFunction.apply($('#docker_Name')[0], []); $('#block_docker').show(); } else { $('#block_docker').hide(); } } else { $('#block_docker').hide(); } } phpsysinfo-3.4.4/plugins/docker/lang/000077500000000000000000000000001467431054600176075ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/docker/lang/en.xml000066400000000000000000000026071467431054600207400ustar00rootroot00000000000000 Docker Container Name CPU Usage Memory Usage Memory Used Memory Limit Net I/O Block I/O PIDs phpsysinfo-3.4.4/plugins/docker/lang/gr.xml000066400000000000000000000027261467431054600207500ustar00rootroot00000000000000 Docker Όνομα Κοντέινερ Χρήση Επεξεργαστή Χρήση Μνήμης Μνήμη σε Χρήση Όριο Μνήμης I/O Δικτύου I/O Μπλοκ PIDs phpsysinfo-3.4.4/plugins/docker/lang/pl.xml000066400000000000000000000026301467431054600207450ustar00rootroot00000000000000 Docker Nazwa Kontenera Procent procesora Procent pamięci Pamięć Limit pamięci I/O sieci I/O bloków PIDów phpsysinfo-3.4.4/plugins/hyperv/000077500000000000000000000000001467431054600167345ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/hyperv/class.hyperv.inc.php000066400000000000000000000074251467431054600226460ustar00rootroot00000000000000 * @copyright 2017 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version $Id: class.hyperv.inc.php 661 2012-08-27 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ class HyperV extends PSI_Plugin { /** * variable, which holds the content of the command * @var array */ private $_filecontent = array(); /** * read the data into an internal array and also call the parent constructor * * @param String $enc target encoding */ public function __construct($enc) { parent::__construct(__CLASS__, $enc); } /** * doing all tasks to get the required informations that the plugin needs * result is stored in an internal array
    the array is build like a tree, * so that it is possible to get only a specific process with the childs * * @return void */ public function execute() { if (((PSI_OS == 'WINNT') && !defined('PSI_EMU_HOSTNAME')) || (defined('PSI_EMU_HOSTNAME') && !defined('PSI_EMU_PORT'))) switch (strtolower(PSI_PLUGIN_HYPERV_ACCESS)) { case 'command': try { $buffer = WINNT::_get_Win32_OperatingSystem(); if ($buffer && isset($buffer[0]) && isset($buffer[0]['Version'])) { if (version_compare($buffer[0]['Version'], "6.2", ">=")) { // minimal windows 2012 or windows 8 $wmi = WINNT::initWMI('root\virtualization\v2'); } elseif (version_compare($buffer[0]['Version'], "6.0", ">=")) { // minimal windows 2008 $wmi = WINNT::initWMI('root\virtualization'); } else { $this->global_error->addError("HyperV plugin", "Unsupported Windows version"); break; } } else { $this->global_error->addError("HyperV plugin", "Unsupported Windows version"); break; } $result = WINNT::getWMI($wmi, 'MSVM_ComputerSystem', array('InstallDate', 'EnabledState', 'ElementName')); foreach ($result as $machine) { if ($machine['InstallDate'] !== null) { $this->_filecontent[] = array($machine['ElementName'], $machine['EnabledState']); } } } catch (Exception $e) { } break; case 'data': if (!defined('PSI_EMU_HOSTNAME')) { CommonFunctions::rftsdata("hyperv.tmp", $buffer); $processes = preg_split("/\n/", $buffer, -1, PREG_SPLIT_NO_EMPTY); foreach ($processes as $process) { $ps = preg_split("/[\s]?\|[\s]?/", $process, -1, PREG_SPLIT_NO_EMPTY); if (count($ps) == 2) { $this->_filecontent[] = array(trim($ps[0]), trim($ps[1])); } } } break; default: $this->global_error->addConfigError("execute()", "[hyperv] ACCESS"); } } /** * generates the XML content for the plugin * * @return SimpleXMLElement entire XML content for the plugin */ public function xml() { foreach ($this->_filecontent as $machine) { $xmlmach = $this->xml->addChild("Machine"); $xmlmach->addAttribute("Name", $machine[0]); $xmlmach->addAttribute("State", $machine[1]); } return $this->xml->getSimpleXmlElement(); } } phpsysinfo-3.4.4/plugins/hyperv/css/000077500000000000000000000000001467431054600175245ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/hyperv/css/hyperv.css000066400000000000000000000001641467431054600215540ustar00rootroot00000000000000/* $Id: hyperv.css 661 2012-08-27 11:26:39Z namiltd $ */ #Plugin_HyperVTable thead tr th { cursor: pointer; } phpsysinfo-3.4.4/plugins/hyperv/gfx/000077500000000000000000000000001467431054600175205ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/hyperv/gfx/offline.gif000066400000000000000000000017401467431054600216330ustar00rootroot00000000000000GIF89aNL24nl"$BD^\~|JL*,BDfdVTvt&$FD􆄄><!,'H&
    \"online\""; } else { state = "" + status.toString() + "\"offline\""; } psstatus_table.fnAddData(["" + name + "" + name, state]); psstatus_show = true; }); } /** * fill the plugin block with table structure */ function psstatus_buildTable() { var html = ""; html += "
    \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += "
    " + genlang(2, "PSStatus") + "" + genlang(3, "PSStatus") + "
    \n"; html += "
    \n"; $("#Plugin_PSStatus").append(html); psstatus_table = $("#Plugin_PSStatusTable").dataTable({ "bPaginate": false, "bLengthChange": false, "bFilter": false, "bSort": true, "bInfo": false, "bProcessing": true, "bAutoWidth": false, "bStateSave": true, "aoColumns": [{ "sType": 'span-string' }, { "sType": 'span-number' }] }); } /** * load the xml via ajax */ function psstatus_request() { $("#Reload_PSStatusTable").attr("title", "reload"); $.ajax({ url: "xml.php?plugin=PSStatus", dataType: "xml", error: function psstatus_error() { $.jGrowl("Error loading XML document for Plugin PSStatus!"); }, success: function psstatus_buildblock(xml) { populateErrors(xml); psstatus_populate(xml); if (psstatus_show) { plugin_translate("PSStatus"); $("#Plugin_PSStatus").show(); } } }); } $(document).ready(function psstatus_buildpage() { $("#footer").before(buildBlock("PSStatus", 1, true)); $("#Plugin_PSStatus").addClass("halfsize"); psstatus_buildTable(); psstatus_request(); $("#Reload_PSStatusTable").click(function psstatus_reload(id) { psstatus_request(); $(this).attr("title", datetime()); }); }); phpsysinfo-3.4.4/plugins/psstatus/js/psstatus_bootstrap.js000066400000000000000000000017001467431054600242400ustar00rootroot00000000000000function renderPlugin_psstatus(data) { var directives = { Status1: { text: function () { return (this.Status === "1") ? "ON" : ""; } }, Status0: { text: function () { return (this.Status === "1") ? "" : "OFF"; } } }; if (data.Plugins.Plugin_PSStatus !== undefined) { var psitems = items(data.Plugins.Plugin_PSStatus.Process); if (psitems.length > 0) { var ps_memory = []; ps_memory.push_attrs(psitems); $('#psstatus-data').render(ps_memory, directives); $('#psstatus_Name').removeClass("sorttable_sorted"); // reset sort order sorttable.innerSortFunction.apply($('#psstatus_Name')[0], []); $('#block_psstatus').show(); } else { $('#block_psstatus').hide(); } } else { $('#block_psstatus').hide(); } } phpsysinfo-3.4.4/plugins/psstatus/lang/000077500000000000000000000000001467431054600202265ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/psstatus/lang/cz.xml000066400000000000000000000014371467431054600213710ustar00rootroot00000000000000 Stav procesů Název Stav phpsysinfo-3.4.4/plugins/psstatus/lang/de.xml000066400000000000000000000014361467431054600213440ustar00rootroot00000000000000 Prozess Status Name Status phpsysinfo-3.4.4/plugins/psstatus/lang/en.xml000066400000000000000000000014401467431054600213510ustar00rootroot00000000000000 Process Status Name Status phpsysinfo-3.4.4/plugins/psstatus/lang/fr.xml000066400000000000000000000014371467431054600213640ustar00rootroot00000000000000 Etat des processus Nom Etat phpsysinfo-3.4.4/plugins/psstatus/lang/gr.xml000066400000000000000000000015301467431054600213570ustar00rootroot00000000000000 Κατάσταση Κρίσιμων Διεργασιών Διεργασία Κατάσταση phpsysinfo-3.4.4/plugins/psstatus/lang/pl.xml000066400000000000000000000014451467431054600213670ustar00rootroot00000000000000 Status Procesów Nazwa Status phpsysinfo-3.4.4/plugins/psstatus/lang/ro.xml000066400000000000000000000014321467431054600213700ustar00rootroot00000000000000 Stare proces Nume Stare phpsysinfo-3.4.4/plugins/psstatus/lang/ru.xml000066400000000000000000000015121467431054600213750ustar00rootroot00000000000000 Статус служб Имя службы Статус phpsysinfo-3.4.4/plugins/psstatus/lang/uk.xml000066400000000000000000000015231467431054600213700ustar00rootroot00000000000000 Стан процесів Ім`я процесу Стан phpsysinfo-3.4.4/plugins/psstatus/psstatus_bootstrap.html000066400000000000000000000024411467431054600241570ustar00rootroot00000000000000 phpsysinfo-3.4.4/plugins/quotas/000077500000000000000000000000001467431054600167335ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/quotas/class.quotas.inc.php000066400000000000000000000116711467431054600226420ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Quotas extends PSI_Plugin { /** * variable, which holds the content of the command * @var array */ private $_filecontent = array(); /** * variable, which holds the result before the xml is generated out of this array * @var array */ private $_result = array(); /** * read the data into an internal array and also call the parent constructor * * @param String $enc target encoding */ public function __construct($enc) { parent::__construct(__CLASS__, $enc); $buffer = ""; if ((PSI_OS != 'WINNT') && (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT'))) switch (strtolower(PSI_PLUGIN_QUOTAS_ACCESS)) { case 'command': CommonFunctions::executeProgram("repquota", "-au", $buffer, PSI_DEBUG); break; case 'data': if (!defined('PSI_EMU_HOSTNAME')) { CommonFunctions::rftsdata("quotas.tmp", $buffer); } break; default: $this->global_error->addConfigError("__construct()", "[quotas] ACCESS"); } if (trim($buffer) != "") { $this->_filecontent = preg_split("/\n/", $buffer, -1, PREG_SPLIT_NO_EMPTY); unset($this->_filecontent[0]); } else { $this->_filecontent = array(); } } /** * doing all tasks to get the required informations that the plugin needs * result is stored in an internal array
    the array is build like a tree, * so that it is possible to get only a specific process with the childs * * @return void */ public function execute() { $i = 0; $quotas = array(); foreach ($this->_filecontent as $thisline) { $thisline = preg_replace("/([\s][-+][-+])/", "", $thisline); $thisline = preg_split("/(\s)/", $thisline, -1, PREG_SPLIT_NO_EMPTY); $params = array(); foreach ($thisline as $param) if (is_numeric($param)) { $params[] = $param; } if (($paramscount = count($params)) == 6) { $quotas[$i]['user'] = trim($thisline[0], " \t+-"); $quotas[$i]['byte_used'] = $params[0] * 1024; $quotas[$i]['byte_soft'] = $params[1] * 1024; $quotas[$i]['byte_hard'] = $params[2] * 1024; if ($quotas[$i]['byte_hard'] != 0) { $quotas[$i]['byte_percent_used'] = round((($quotas[$i]['byte_used'] / $quotas[$i]['byte_hard']) * 100), 1); } else { $quotas[$i]['byte_percent_used'] = 0; } $quotas[$i]['file_used'] = $params[3]; $quotas[$i]['file_soft'] = $params[4]; $quotas[$i]['file_hard'] = $params[5]; if ($quotas[$i]['file_hard'] != 0) { $quotas[$i]['file_percent_used'] = round((($quotas[$i]['file_used'] / $quotas[$i]['file_hard']) * 100), 1); } else { $quotas[$i]['file_percent_used'] = 0; } $i++; } } $this->_result = $quotas; } /** * generates the XML content for the plugin * * @return SimpleXMLElement entire XML content for the plugin */ public function xml() { foreach ($this->_result as $quota) { $quotaChild = $this->xml->addChild("Quota"); $quotaChild->addAttribute("User", $quota['user']); $quotaChild->addAttribute("ByteUsed", $quota['byte_used']); $quotaChild->addAttribute("ByteSoft", $quota['byte_soft']); $quotaChild->addAttribute("ByteHard", $quota['byte_hard']); $quotaChild->addAttribute("BytePercentUsed", $quota['byte_percent_used']); $quotaChild->addAttribute("FileUsed", $quota['file_used']); $quotaChild->addAttribute("FileSoft", $quota['file_soft']); $quotaChild->addAttribute("FileHard", $quota['file_hard']); $quotaChild->addAttribute("FilePercentUsed", $quota['file_percent_used']); } return $this->xml->getSimpleXmlElement(); } } phpsysinfo-3.4.4/plugins/quotas/css/000077500000000000000000000000001467431054600175235ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/quotas/css/quotas.css000066400000000000000000000002141467431054600215460ustar00rootroot00000000000000/* $Id: quotas.css 661 2012-08-27 11:26:39Z namiltd $ */ #Plugin_QuotasTable thead tr th { cursor: pointer; text-align: center; } phpsysinfo-3.4.4/plugins/quotas/js/000077500000000000000000000000001467431054600173475ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/quotas/js/quotas.js000066400000000000000000000142201467431054600212200ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008 by phpSysInfo - A PHP System Information Script * * http://phpsysinfo.sourceforge.net/ * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ // // $Id: quotas.js 661 2012-08-27 11:26:39Z namiltd $ // /*global $, jQuery, buildBlock, datetime, plugin_translate, genlang, formatBytes, createBar */ "use strict"; var quotas_show = false, quotas_table; //appendcss("./plugins/Quotas/css/Quotas.css"); /** * insert content into table * @param {jQuery} xml plugin-XML */ function quotas_populate(xml) { var hostname = ""; quotas_table.fnClearTable(); hostname = $("Plugins Plugin_Quotas", xml).attr('Hostname'); if (hostname !== undefined) { $('span[class=Hostname_Quotas]').html(hostname); } $("Plugins Plugin_Quotas Quota", xml).each(function quotas_getquota(id) { var user = "", bused = 0, bsoft = 0, bhard = 0, bpuse = 0, fpuse = 0, fused = 0, fsoft = 0, fhard = 0; user = $(this).attr("User"); bused = parseInt($(this).attr("ByteUsed"), 10); bsoft = parseInt($(this).attr("ByteSoft"), 10); bhard = parseInt($(this).attr("ByteHard"), 10); bpuse = parseInt($(this).attr("BytePercentUsed"), 10); fused = parseInt($(this).attr("FileUsed"), 10); fsoft = parseInt($(this).attr("FileSoft"), 10); fhard = parseInt($(this).attr("FileHard"), 10); fpuse = parseInt($(this).attr("FilePercentUsed"), 10); quotas_table.fnAddData(["" + user + "" + user, "" + bused + "" + formatBytes(bused, xml), "" + bsoft + "" + formatBytes(bsoft, xml), "" + bhard + "" + formatBytes(bhard, xml), "" + bpuse + "" + createBar(bpuse), "" + fused + "" + fused, "" + fsoft + "" + fsoft, "" + fhard + "" + fhard, "" + fpuse + "" + createBar(fpuse)]); quotas_show = true; }); } /** * fill the plugin block with table structure */ function quotas_buildTable() { var html = ""; html += "
    \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += "
    " + genlang(2, "Quotas") + "" + genlang(3, "Quotas") + "" + genlang(4, "Quotas") + "" + genlang(5, "Quotas") + "" + genlang(6, "Quotas") + "" + genlang(7, "Quotas") + "" + genlang(8, "Quotas") + "" + genlang(9, "Quotas") + "" + genlang(10, "Quotas") + "
    \n"; html += "
    \n"; $("#Plugin_Quotas").append(html); quotas_table = $("#Plugin_QuotasTable").dataTable({ "bPaginate": false, "bLengthChange": false, "bFilter": false, "bSort": true, "bInfo": false, "bProcessing": true, "bAutoWidth": false, "bStateSave": true, "aoColumns": [{ "sType": 'span-string' }, { "sType": 'span-number' }, { "sType": 'span-number' }, { "sType": 'span-number' }, { "sType": 'span-number' }, { "sType": 'span-number' }, { "sType": 'span-number' }, { "sType": 'span-number' }, { "sType": 'span-number' }] }); } /** * load the xml via ajax */ function quotas_request() { $("#Reload_QuotasTable").attr("title", "reload"); $.ajax({ url: "xml.php?plugin=Quotas", dataType: "xml", error: function quotas_error() { $.jGrowl("Error loading XML document for Plugin quotas!"); }, success: function quotas_buildblock(xml) { populateErrors(xml); quotas_populate(xml); if (quotas_show) { plugin_translate("Quotas"); $("#Plugin_Quotas").show(); } } }); } $(document).ready(function quotas_buildpage() { $("#footer").before(buildBlock("Quotas", 1, true)); $("#Plugin_Quotas").addClass("fullsize"); quotas_buildTable(); quotas_request(); $("#Reload_QuotasTable").click(function quotas_reload(id) { quotas_request(); $(this).attr("title", datetime()); }); }); phpsysinfo-3.4.4/plugins/quotas/js/quotas_bootstrap.js000066400000000000000000000034261467431054600233230ustar00rootroot00000000000000function renderPlugin_quotas(data) { var directives = { ByteUsed: { html: function () { return formatBytes(this.ByteUsed, data.Options["@attributes"].byteFormat); } }, ByteSoft: { html: function () { return formatBytes(this.ByteSoft, data.Options["@attributes"].byteFormat); } }, ByteHard: { html: function () { return formatBytes(this.ByteHard, data.Options["@attributes"].byteFormat); } }, BytePercentUsed: { html: function () { return '
    ' + '
    ' + this.BytePercentUsed + '%
    '; } }, FilePercentUsed: { html: function () { return '
    ' + '
    ' + this.FilePercentUsed + '%
    '; } } }; if (data.Plugins.Plugin_Quotas !== undefined) { var qtitems = items(data.Plugins.Plugin_Quotas.Quota); if (qtitems.length > 0) { var qt_memory = []; qt_memory.push_attrs(qtitems); $('#quotas-data').render(qt_memory, directives); $('#quotas_User').removeClass("sorttable_sorted"); // reset sort order sorttable.innerSortFunction.apply($('#quotas_User')[0], []); $('#block_quotas').show(); } else { $('#block_quotas').hide(); } } else { $('#block_quotas').hide(); } } phpsysinfo-3.4.4/plugins/quotas/lang/000077500000000000000000000000001467431054600176545ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/quotas/lang/cz.xml000066400000000000000000000030451467431054600210140ustar00rootroot00000000000000 Stav kvót Uživatel Využité místo Měkký limit Tvrdý limit Procento využití Počet soouborů Měkký souborový limit Tvrdý souborový limit Procento využití souborů phpsysinfo-3.4.4/plugins/quotas/lang/de.xml000066400000000000000000000030651467431054600207720ustar00rootroot00000000000000 Quota Status Benutzer Bytes (Belegt) Bytes (Soft Limit) Bytes (Hard Limit) Bytes (Belegt Prozent) Dateien (Benutzt) Dateien (Soft Limit) Dateien (Hard Limit) Dateien (Benutzt Prozent) phpsysinfo-3.4.4/plugins/quotas/lang/en.xml000066400000000000000000000027551467431054600210110ustar00rootroot00000000000000 Quota Status User Bytes Used Bytes Soft Bytes Hard Bytes Used Percent Files Used Files Soft Files Hard Files Used Percent phpsysinfo-3.4.4/plugins/quotas/lang/fr.xml000066400000000000000000000031001467431054600207770ustar00rootroot00000000000000 Etat des quotas Utilisateurs Espace utilisés Espace limite souple Espace limite stricte Pourcentage espace utilisés Inodes utilisés Inodes limite souple Inodes limite stricte Pourcentage inodes utilisés phpsysinfo-3.4.4/plugins/quotas/lang/gr.xml000066400000000000000000000031161467431054600210070ustar00rootroot00000000000000 Κατάσταση Quota Χρήστης Bytes σε Χρήση Bytes Soft Bytes Hard Ποσοστό Χρήσης Bytes Αρχεία σε χρήση Αρχεία Soft Αρχεία Hard Ποσοστό Χρήσης Αρχείων phpsysinfo-3.4.4/plugins/quotas/lang/pl.xml000066400000000000000000000030701467431054600210110ustar00rootroot00000000000000 Status Quoty Użytkownik Bajtów wykorzystanych Miękki limit bajtów Twardy limit bajtów Procentowo bajtów Plików wykorzystanych Miękki limit plików Twardy limit plików Procentowo plików phpsysinfo-3.4.4/plugins/quotas/lang/ro.xml000066400000000000000000000030141467431054600210140ustar00rootroot00000000000000 Stare Quota Utilizator Bytes Folositi Bytes Soft Bytes Hard Bytes Percent Folosiți Fișiere Folosite Fișiere Soft Fișiere Hard Fișiere Percent Folosite phpsysinfo-3.4.4/plugins/quotas/lang/ru.xml000066400000000000000000000032271467431054600210300ustar00rootroot00000000000000 Состояние Квоты Пользователь Используется Программы Жесткий диск Процентов Файлы Используется Файлов программ Файлы на жестком диске Проценты файлов phpsysinfo-3.4.4/plugins/quotas/quotas_bootstrap.html000066400000000000000000000053351467431054600232400ustar00rootroot00000000000000 phpsysinfo-3.4.4/plugins/raid/000077500000000000000000000000001467431054600163365ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/raid/class.raid.inc.php000066400000000000000000005147611467431054600216600ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class Raid extends PSI_Plugin { /** * variable, which holds the content of the command * @var array */ private $_filecontent = array(); /** * variable, which holds the result before the xml is generated out of this array * @var array */ private $_result = array(); private $prog_items = array('mdstat','dmraid','megactl','megasasctl','megaclisas-status','3ware-status','graid','zpool','storcli','perccli','idrac'); /** * read the data into an internal array and also call the parent constructor * * @param String $enc encoding */ public function __construct($enc) { parent::__construct(__CLASS__, $enc); $this->prog_items = array(); if (defined('PSI_PLUGIN_RAID_PROGRAM') && is_string(PSI_PLUGIN_RAID_PROGRAM)) { if (is_string(PSI_PLUGIN_RAID_PROGRAM)) { if (preg_match(ARRAY_EXP, PSI_PLUGIN_RAID_PROGRAM)) { $this->prog_items = eval(strtolower(PSI_PLUGIN_RAID_PROGRAM)); } else { $this->prog_items = array(strtolower(PSI_PLUGIN_RAID_PROGRAM)); } } else { $this->global_error->addConfigError("__construct()", "[raid] PROGRAM"); return; } } $notwas = true; switch (strtolower(PSI_PLUGIN_RAID_ACCESS)) { case 'command': case 'php-snmp': if (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT')) { if ((PSI_OS == 'Linux') && in_array('mdstat', $this->prog_items)) { CommonFunctions::rfts("/proc/mdstat", $this->_filecontent['mdstat'], 0, 4096, PSI_DEBUG); $notwas = false; } if ((PSI_OS == 'Linux') && in_array('dmraid', $this->prog_items)) { CommonFunctions::executeProgram("dmraid", "-s -vv 2>&1", $this->_filecontent['dmraid'], PSI_DEBUG); $notwas = false; } if ((PSI_OS == 'Linux') && in_array('megactl', $this->prog_items)) { CommonFunctions::executeProgram("megactl", "-vv", $this->_filecontent['megactl'], PSI_DEBUG); $notwas = false; } if ((PSI_OS == 'Linux') && in_array('megasasctl', $this->prog_items)) { CommonFunctions::executeProgram("megasasctl", "-vv", $this->_filecontent['megasasctl'], PSI_DEBUG); $notwas = false; } if (in_array('megaclisas-status', $this->prog_items)) { if (PSI_OS == 'WINNT') { if (!WINNT::isAdmin()) { if (CommonFunctions::_findProgram("megaclisas-status.py")) { $this->global_error->addError("RAID megaclisas-status.py error", "Program allowed for users with administrator privileges (run as administrator)"); } elseif (PSI_DEBUG) { $this->global_error->addError('find_program("megaclisas-status.py")', "program not found on the machine"); } } else { CommonFunctions::executeProgram("megaclisas-status.py", "", $this->_filecontent['megaclisas-status'], PSI_DEBUG); } } else { CommonFunctions::executeProgram("megaclisas-status", "", $this->_filecontent['megaclisas-status'], PSI_DEBUG); } $notwas = false; } if (in_array('3ware-status', $this->prog_items)) { if (PSI_OS == 'WINNT') { if (!WINNT::isAdmin()) { if (CommonFunctions::_findProgram("3ware-status.py")) { $this->global_error->addError("RAID 3ware-status.py error", "Program allowed for users with administrator privileges (run as administrator)"); } elseif (PSI_DEBUG) { $this->global_error->addError('find_program("3ware-status.py")', "program not found on the machine"); } } else { CommonFunctions::executeProgram("3ware-status.py", "", $this->_filecontent['3ware-status'], PSI_DEBUG); } } else { CommonFunctions::executeProgram("3ware-status", "", $this->_filecontent['3ware-status'], PSI_DEBUG); } $notwas = false; } if ((PSI_OS == 'FreeBSD') && in_array('graid', $this->prog_items)) { CommonFunctions::executeProgram("graid", "list", $this->_filecontent['graid'], PSI_DEBUG); $notwas = false; } if (in_array('zpool', $this->prog_items)) { CommonFunctions::executeProgram("zpool", "status", $this->_filecontent['zpool'], PSI_DEBUG); $notwas = false; } if (in_array('storcli', $this->prog_items)) { if ((PSI_OS == 'WINNT') && !WINNT::isAdmin() && (CommonFunctions::_findProgram("storcli64") || CommonFunctions::_findProgram("storcli"))) { $this->global_error->addError("RAID storcli error", "Program allowed for users with administrator privileges (run as administrator)"); } $call = ""; $vall = ""; $raidcmd = ""; if (!(CommonFunctions::_findProgram("storcli64") && CommonFunctions::executeProgram($raidcmd = "storcli64", "/call show all", $call, PSI_DEBUG))) { if (!CommonFunctions::executeProgram($raidcmd = "storcli", "/call show all", $call, PSI_DEBUG)) { $raidcmd = ""; } } if ($raidcmd !== "") { CommonFunctions::executeProgram($raidcmd, "/call /vall show all", $vall, PSI_DEBUG); } $this->_filecontent['storcli'] = $call.$vall; $notwas = false; } if (in_array('perccli', $this->prog_items)) { if ((PSI_OS == 'WINNT') && !WINNT::isAdmin() && (CommonFunctions::_findProgram("perccli64") || CommonFunctions::_findProgram("perccli"))) { $this->global_error->addError("RAID perccli error", "Program allowed for users with administrator privileges (run as administrator)"); } $call = ""; $vall = ""; $raidcmd = ""; if (!(CommonFunctions::_findProgram("perccli64") && CommonFunctions::executeProgram($raidcmd = "perccli64", "/call show all", $call, PSI_DEBUG))) { if (!CommonFunctions::executeProgram($raidcmd = "perccli", "/call show all", $call, PSI_DEBUG)) { $raidcmd = ""; } } if ($raidcmd !== "") { CommonFunctions::executeProgram($raidcmd, "/call /vall show all", $vall, PSI_DEBUG); } $this->_filecontent['perccli'] = $call.$vall; $notwas = false; } } if (in_array('idrac', $this->prog_items)) { if (defined('PSI_PLUGIN_RAID_IDRAC_DEVICES') && is_string(PSI_PLUGIN_RAID_IDRAC_DEVICES)) { if (preg_match(ARRAY_EXP, PSI_PLUGIN_RAID_IDRAC_DEVICES)) { $devices = eval(PSI_PLUGIN_RAID_IDRAC_DEVICES); } else { $devices = array(PSI_PLUGIN_RAID_IDRAC_DEVICES); } if (strtolower(PSI_PLUGIN_RAID_ACCESS)=="command") { foreach ($devices as $device) { CommonFunctions::executeProgram("snmpwalk", "-Ona -c public -v 1 -t ".PSI_SNMP_TIMEOUT_INT." -r ".PSI_SNMP_RETRY_INT." ".$device." .1.3.6.1.4.1.674.10892.5.5.1.20", $buffer, PSI_DEBUG); if (strlen($buffer) > 0) { $this->_filecontent['idrac'][$device] = $buffer; } } } else { snmp_set_valueretrieval(SNMP_VALUE_LIBRARY); snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC); foreach ($devices as $device) { if (! PSI_DEBUG) { restore_error_handler(); /* default error handler */ $old_err_rep = error_reporting(); error_reporting(E_ERROR); /* fatal errors only */ } $bufferarr=snmprealwalk($device, "public", ".1.3.6.1.4.1.674.10892.5.5.1.20", 1000000 * PSI_SNMP_TIMEOUT_INT, PSI_SNMP_RETRY_INT); if (! PSI_DEBUG) { error_reporting($old_err_rep); /* restore error level */ set_error_handler('errorHandlerPsi'); /* restore error handler */ } if (! empty($bufferarr)) { $buffer=""; foreach ($bufferarr as $id=>$string) { $buffer .= $id." = ".$string."\n"; } if (strlen($buffer) > 0) { $this->_filecontent['idrac'][$device] = $buffer; } } } } } $notwas = false; } if ($notwas) { $this->global_error->addConfigError("__construct()", "[raid] PROGRAM"); } break; case 'data': if (!defined('PSI_EMU_HOSTNAME')) foreach ($this->prog_items as $item) { if (in_array($item, $this->prog_items)) { if ($item !== 'idrac') { CommonFunctions::rftsdata("raid".$item.".tmp", $this->_filecontent[$item], 0, 4096, false); } elseif (defined('PSI_PLUGIN_RAID_IDRAC_DEVICES') && is_string(PSI_PLUGIN_RAID_IDRAC_DEVICES)) { if (preg_match(ARRAY_EXP, PSI_PLUGIN_RAID_IDRAC_DEVICES)) { $devices = eval(PSI_PLUGIN_RAID_IDRAC_DEVICES); } else { $devices = array(PSI_PLUGIN_RAID_IDRAC_DEVICES); } $pn=0; foreach ($devices as $device) { $buffer=""; if (CommonFunctions::rftsdata("raid".$item.$pn.".tmp", $buffer) && !empty($buffer)) { $this->_filecontent['idrac'][$device] = $buffer; } $pn++; } } $notwas = false; } } if ($notwas) { $this->global_error->addConfigError("__construct()", "[raid] PROGRAM"); } break; default: $this->global_error->addConfigError("__construct()", "[raid] ACCESS"); } } private function execute_mdstat($buffer) { $raiddata = preg_split("/\r?\n/", $buffer, -1, PREG_SPLIT_NO_EMPTY); if (!empty($raiddata)) { // get the supported types $supported = ''; if (preg_match('/^[a-zA-Z]+ :( \[[a-z0-9]+\])+/', $raiddata[0], $res)) { $parts = preg_split("/ : /", $res[0]); if (isset($parts[1]) && (trim($parts[1]) !== '')) { $supported = preg_replace('/[\[\]]/', '', trim($parts[1])); } } // get disks if (preg_match("/^read_ahead/", $raiddata[1])) { $count = 2; } else { $count = 1; } $cnt_filecontent = count($raiddata); do { $parts = preg_split("/ : /", $raiddata[$count]); $dev = trim($parts[0]); if (count($parts) == 2) { if ($supported !== '') $this->_result['mdstat'][$dev]['supported'] = $supported; $this->_result['mdstat'][$dev]['items'][0]['raid_index'] = -1; //must by first $details = preg_split('/ /', $parts[1]); if (!strstr($details[0], 'inactive')) { if (isset($details[2]) && strstr($details[1], '(auto-read-only)')) { $this->_result['mdstat'][$dev]['level'] = $details[2]; $this->_result['mdstat'][$dev]['status'] = $details[0]." ".$details[1]; //$this->_result['mdstat'][$dev]['items'][0]['name'] = $dev." ".$details[2]; $this->_result['mdstat'][$dev]['items'][0]['name'] = $details[2]; $this->_result['mdstat'][$dev]['items'][0]['status'] = "W"; $i = 3; } else { $this->_result['mdstat'][$dev]['level'] = $details[1]; $this->_result['mdstat'][$dev]['status'] = $details[0]; //$this->_result['mdstat'][$dev]['items'][0]['name'] = $dev." ".$details[1]; $this->_result['mdstat'][$dev]['items'][0]['name'] = $details[1]; $this->_result['mdstat'][$dev]['items'][0]['status'] = "ok"; $i = 2; } } else { $this->_result['mdstat'][$dev]['level'] = "none"; $this->_result['mdstat'][$dev]['status'] = $details[0]; $this->_result['mdstat'][$dev]['items'][0]['name'] = $dev; $this->_result['mdstat'][$dev]['items'][0]['status'] = "F"; $i = 1; } $this->_result['mdstat'][$dev]['items'][0]['parentid'] = 0; for ($cnt_details = count($details); $i < $cnt_details; $i++) { preg_match('/(([a-z0-9])+)(\[([0-9]+)\])(\([SF ]\))?/', trim($details[$i]), $partition); if (count($partition) == 5 || count($partition) == 6) { $this->_result['mdstat'][$dev]['items'][$partition[1]]['raid_index'] = intval(substr(trim($partition[3]), 1, -1)); if (isset($partition[5])) { $search = array("(", ")"); $replace = array("", ""); $dstat = str_replace($search, $replace, trim($partition[5])); $this->_result['mdstat'][$dev]['items'][$partition[1]]['status'] = $dstat; if (($dstat === "F") && ($this->_result['mdstat'][$dev]['items'][0]['status'] === "ok")) $this->_result['mdstat'][$dev]['items'][0]['status'] = "W"; } else { $this->_result['mdstat'][$dev]['items'][$partition[1]]['status'] = "ok"; } $this->_result['mdstat'][$dev]['items'][$partition[1]]['name'] = $partition[1]; $this->_result['mdstat'][$dev]['items'][$partition[1]]['parentid'] = 1; $this->_result['mdstat'][$dev]['items'][$partition[1]]['type'] = "disk"; } } $optionline = $raiddata[$count].$raiddata[$count+1]; $count++; if (preg_match('/(\d+)k chunk/', $optionline, $chunksize)) { $this->_result['mdstat'][$dev]['chunk_size'] = $chunksize[1]; } if ($pos = strpos($optionline, "super non-persistent")) { $this->_result['mdstat'][$dev]['pers_superblock'] = 0; } else { $this->_result['mdstat'][$dev]['pers_superblock'] = 1; } if ($pos = strpos($optionline, "algorithm")) { $this->_result['mdstat'][$dev]['algorithm'] = trim(substr($optionline, $pos + 9, 2)); } if (preg_match('/\[([0-9]+)\/([0-9]+)\]/', $optionline, $res)) { $this->_result['mdstat'][$dev]['registered'] = $res[1]; $this->_result['mdstat'][$dev]['active'] = $res[2]; } if (isset($this->_result['mdstat'][$dev]['items'])) { asort($this->_result['mdstat'][$dev]['items']); } if ((!isset($this->_result['mdstat'][$dev]['registered']) || ($this->_result['mdstat'][$dev]['registered']<24)) && preg_match('/\[([_U]+)\]/', $optionline, $res) && (($reslen=strlen($res[1])) > 0)) { $notsparecount = 0; foreach ($this->_result['mdstat'][$dev]['items'] as $diskkey=>$disk) { if (($diskkey!==0) && ($this->_result['mdstat'][$dev]['items'][$diskkey]['status']!=="S")) { $notsparecount++; } } if ($notsparecount == $reslen) { $partnr = 0; foreach ($this->_result['mdstat'][$dev]['items'] as $diskkey=>$disk) { if (($diskkey!==0) && ($this->_result['mdstat'][$dev]['items'][$diskkey]['status']!=="S")) { if (($res[1][$partnr]=='_') && ($this->_result['mdstat'][$dev]['items'][$diskkey]['status']=="ok")) { $this->_result['mdstat'][$dev]['items'][$diskkey]['status']="W"; if ($this->_result['mdstat'][$dev]['items'][0]['status'] === "ok") $this->_result['mdstat'][$dev]['items'][0]['status'] = "W"; } $partnr++; } } } elseif ($reslen-$notsparecount == 1) { $partnr = 0; foreach ($this->_result['mdstat'][$dev]['items'] as $diskkey=>$disk) { if (($diskkey!==0) && ($this->_result['mdstat'][$dev]['items'][$diskkey]['status']!=="S")) { if ($res[1][$partnr]=='_') { $this->_result['mdstat'][$dev]['items']['none']['raid_index']=$this->_result['mdstat'][$dev]['items'][$diskkey]['raid_index']-1; $this->_result['mdstat'][$dev]['items']['none']['status']="E"; $this->_result['mdstat'][$dev]['items']['none']['name']="none"; $this->_result['mdstat'][$dev]['items']['none']['parentid'] = 1; $this->_result['mdstat'][$dev]['items']['none']['type'] = "disk"; } $partnr++; } } if ($res[1][$partnr]=='_') { $this->_result['mdstat'][$dev]['items']['none']['raid_index']=$this->_result['mdstat'][$dev]['items'][$diskkey]['raid_index']+1; $this->_result['mdstat'][$dev]['items']['none']['status']="E"; $this->_result['mdstat'][$dev]['items']['none']['name']="none"; $this->_result['mdstat'][$dev]['items']['none']['parentid'] = 1; $this->_result['mdstat'][$dev]['items']['none']['type']="disk"; if ($this->_result['mdstat'][$dev]['items'][0]['status'] === "ok") $this->_result['mdstat'][$dev]['items'][0]['status'] = "W"; } asort($this->_result['mdstat'][$dev]['items']); foreach ($this->_result['mdstat'][$dev]['items'] as $diskkey=>$disk) { if ($diskkey=="none") { $this->_result['mdstat'][$dev]['items'][$diskkey]['raid_index']="unknown"; } } } else { foreach ($this->_result['mdstat'][$dev]['items'] as $diskkey=>$disk) { if ($this->_result['mdstat'][$dev]['items'][$diskkey]['status']=="ok") { $this->_result['mdstat'][$dev]['items'][$diskkey]['status']="W"; } } for ($partnr=0; $partnr<$reslen-$notsparecount; $partnr++) { $this->_result['mdstat'][$dev]['items']['none'.$partnr]['raid_index']="unknown"; $this->_result['mdstat'][$dev]['items']['none'.$partnr]['status']="E"; $this->_result['mdstat'][$dev]['items']['none'.$partnr]['name'] = "none".$partnr; $this->_result['mdstat'][$dev]['items']['none'.$partnr]['parentid'] = 1; $this->_result['mdstat'][$dev]['items']['none'.$partnr]['type'] = "disk"; } } } if (preg_match(('/([a-z]+)( *)=( *)([0-9\.]+)%/'), $raiddata[$count + 1], $res) || (preg_match(('/([a-z]+)( *)=( *)([0-9\.]+)/'), $optionline, $res))) { list($this->_result['mdstat'][$dev]['action']['name'], $this->_result['mdstat'][$dev]['action']['percent']) = preg_split("/=/", str_replace("%", "", $res[0])); if (preg_match(('/([a-z]*=[0-9\.]+[a-z]+)/'), $raiddata[$count + 1], $res)) { $time = preg_split("/=/", $res[0]); list($this->_result['mdstat'][$dev]['action']['finish_time'], $this->_result['mdstat'][$dev]['action']['finish_unit']) = sscanf($time[1], '%f%s'); } } elseif (preg_match(('/^( *)([a-z]+)( *)=( *)([A-Z]+)$/'), $raiddata[$count + 1], $res)) { $this->_result['mdstat'][$dev]['status'] .= " ".trim($raiddata[$count + 1]); } } else { $count++; } } while ($cnt_filecontent > $count); $lastline = $raiddata[$cnt_filecontent - 1]; if (strpos($lastline, "unused devices") !== false) { $parts = preg_split("/:/", $lastline); $unused = trim($parts[1]); if ($unused !== "") { $details = preg_split('/ /', $parts[1], -1, PREG_SPLIT_NO_EMPTY); $this->_result['mdstat']['spare']['status'] = "spare"; $this->_result['mdstat']['spare']['items'][0]['name'] = "spare"; $this->_result['mdstat']['spare']['items'][0]['parentid'] = 0; $this->_result['mdstat']['spare']['items'][0]['status'] = "S"; foreach ($details as $id=>$disk) { $this->_result['mdstat']['spare']['items'][$id+1]['name'] = $disk; $this->_result['mdstat']['spare']['items'][$id+1]['parentid'] = 1; $this->_result['mdstat']['spare']['items'][$id+1]['status'] = "S"; $this->_result['mdstat']['spare']['items'][$id+1]['type'] = "disk"; } } } } } private function execute_dmraid($buffer) { $raiddata = preg_split("/(\r?\n\*\*\* )|(\r?\n--> )/", $buffer, -1, PREG_SPLIT_NO_EMPTY); if (!empty($raiddata)) { $group = ""; foreach ($raiddata as $block) { if (preg_match('/^(NOTICE: )|(ERROR: )/m', $block)) { $group = ""; $lines = preg_split("/\r?\n/", $block, -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { if (preg_match('/^NOTICE: added\s+\/dev\/(.+)\s+to RAID set\s+\"(.+)\"/', $line, $partition)) { if (!isset($this->_result['dmraid'][$partition[2]]['items'][0]['parentid'])) { $this->_result['dmraid'][$partition[2]]['items'][0]['parentid'] = 0; $this->_result['dmraid'][$partition[2]]['items'][0]['name'] = $partition[2]; } $this->_result['dmraid'][$partition[2]]['items'][$partition[1]]['status'] = "ok"; $this->_result['dmraid'][$partition[2]]['items'][$partition[1]]['type'] = "disk"; $this->_result['dmraid'][$partition[2]]['items'][$partition[1]]['parentid'] = 1; $this->_result['dmraid'][$partition[2]]['items'][$partition[1]]['name'] = $partition[1]; $this->_result['dmraid'][$partition[2]]['status'] = "ok"; $this->_result['dmraid'][$partition[2]]['level'] = "unknown"; } elseif (preg_match('/^ERROR: .* device\s+\/dev\/(.+)\s+(.+)\s+in RAID set\s+\"(.+)\"/', $line, $partition)) { if (!isset($this->_result['dmraid'][$partition[3]]['items'][0]['parentid'])) { $this->_result['dmraid'][$partition[3]]['items'][0]['parentid'] = 0; $this->_result['dmraid'][$partition[3]]['items'][0]['name'] = $partition[3]; } $this->_result['dmraid'][$partition[3]]['level'] = "unknown"; $this->_result['dmraid'][$partition[3]]['items'][$partition[1]]['type'] = "disk"; $this->_result['dmraid'][$partition[3]]['items'][$partition[1]]['parentid'] = 1; if ($partition[2]=="broken") { $this->_result['dmraid'][$partition[3]]['items'][$partition[1]]['status'] = "F"; $this->_result['dmraid'][$partition[3]]['status'] = "F"; } else { $this->_result['dmraid'][$partition[3]]['items'][$partition[1]]['status'] = "W"; $this->_result['dmraid'][$partition[3]]['status'] = "W"; } $this->_result['dmraid'][$partition[3]]['items'][$partition[1]]['name'] = $partition[1]; } } } else { if (preg_match('/^Group superset\s+(.+)/m', $block, $arrname)) { $group = trim($arrname[1]); } if (preg_match('/^name\s*:\s*(.*)/m', $block, $arrname)) { if ($group=="") { $group = trim($arrname[1]); } $this->_result['dmraid'][$group]['name'] = trim($arrname[1]); $this->_result['dmraid'][$group]['items'][0]['name'] = trim($arrname[1]); if (preg_match('/^size\s*:\s*(.*)/m', $block, $capacity)) { $this->_result['dmraid'][$group]['capacity'] = trim($capacity[1]); } if (preg_match('/^stride\s*:\s*(.*)/m', $block, $stride)) { $this->_result['dmraid'][$group]['stride'] = trim($stride[1]); } if (preg_match('/^type\s*:\s*(.*)/m', $block, $type)) { $this->_result['dmraid'][$group]['level'] = trim($type[1]); //$this->_result['dmraid'][$group]['items'][0]['name'] .= " ".trim($type[1]); $this->_result['dmraid'][$group]['items'][0]['name'] = trim($type[1]); } if (preg_match('/^status\s*:\s*(.*)/m', $block, $status)) { $this->_result['dmraid'][$group]['status'] = trim($status[1]); switch (trim($status[1])) { case "broken": $this->_result['dmraid'][$group]['items'][0]['status'] = "F"; break; case "inconsistent": $this->_result['dmraid'][$group]['items'][0]['status'] = "W"; break; default: $this->_result['dmraid'][$group]['items'][0]['status'] = trim($status[1]); } } if (preg_match('/^subsets\s*:\s*(.*)/m', $block, $subsets)) { $this->_result['dmraid'][$group]['subsets'] = trim($subsets[1]); } if (preg_match('/^devs\s*:\s*(.*)/m', $block, $devs)) { $this->_result['dmraid'][$group]['devs'] = trim($devs[1]); } if (preg_match('/^spares\s*:\s*(.*)/m', $block, $spares)) { $this->_result['dmraid'][$group]['spares'] = trim($spares[1]); } if (!isset($this->_result['dmraid'][$group]['items'][0]['parentid'])) { $this->_result['dmraid'][$group]['items'][0]['parentid'] = 0; } $group = ""; } } } if (isset($this->_result['dmraid'])) { foreach ($this->_result['dmraid'] as $gid=>$group) { $id = 1; if (isset($group['devs']) && ($group['devs']>0) && (!isset($group['items']) || (count($group['items'])<$group['devs'])) && isset($group['subsets']) && ($group['subsets']>0)) for ($i = 0; $i < $group['subsets']; $i++) { if (isset($this->_result['dmraid'][$gid."-".$i]['items'][0]['parentid'])) { foreach ($this->_result['dmraid'][$gid."-".$i]['items'] as $fid=>$from) { if ($fid===0) { $this->_result['dmraid'][$gid]['items'][$gid."-".$i]['parentid'] = 1; $this->_result['dmraid'][$gid]['items'][$gid."-".$i]['status'] = $from['status']; $this->_result['dmraid'][$gid]['items'][$gid."-".$i]['name'] = $gid."-".$i." ".$from['name']; if (isset($from['type'])) $this->_result['dmraid'][$gid]['items'][$gid."-".$i]['type'] = $from['type']; } else { $this->_result['dmraid'][$gid]['items'][$from['name']]['parentid'] = 1+$id; $this->_result['dmraid'][$gid]['items'][$from['name']]['status'] = $from['status']; $this->_result['dmraid'][$gid]['items'][$from['name']]['name'] = $from['name']; if (isset($from['type'])) $this->_result['dmraid'][$gid]['items'][$from['name']]['type'] = $from['type']; } } $id+=count($this->_result['dmraid'][$gid."-".$i]['items']); unset($this->_result['dmraid'][$gid."-".$i]); } else { $this->_result['dmraid'][$gid]['items'][$gid."-".$i]['parentid'] = 1; $this->_result['dmraid'][$gid]['items'][$gid."-".$i]['status'] = "unknown"; $this->_result['dmraid'][$gid]['items'][$gid."-".$i]['name'] = $gid."-".$i; $id++; } } } foreach ($this->_result['dmraid'] as $gid=>$group) { if (($group['name'] !== $gid) && isset($group['items'][0]['parentid'])) { $this->_result['dmraid'][$gid]['items'][0]['name'] = $group['name']." ".$group['items'][0]['name']; } } } } } private function execute_megactl($buffer, $sas = false) { if ($sas === true) { $prog = "megasasctl"; } else { $prog = "megactl"; } $raiddata = preg_split("/(\r?\n)+(?=[a-z]\d+ )/", $buffer, -1, PREG_SPLIT_NO_EMPTY); if (!empty($raiddata)) foreach ($raiddata as $raidgroup) { if (preg_match("/^([a-z]\d+) /", $raidgroup, $buff)) { if (preg_match("/^[a-z]\d+ ([^:\r\n]+) [^:\r\n]+:/", $raidgroup, $geom) || preg_match("/^[a-z]\d+ ([^:\r\n]+)/", $raidgroup, $geom)) { $controller = trim($geom[1]); } else { $controller = ''; } if (preg_match("/^[a-z]\d+ .+ batt:([^:\r\n,]+)/", $raidgroup, $batt)) { if (preg_match("/^([^\/]+)\/((\d+)mV\/(-?\d+)C)$/", trim($batt[1]), $battarr) && ($battarr !== "0mV/0C")) { $battery = trim($battarr[1]); $battvolt = $battarr[3]/1000; $batttemp = $battarr[4]; } else { $battery = trim($batt[1]); $battvolt = ''; $batttemp = ''; } } else { $battery = ''; $battvolt = ''; $batttemp = ''; } if (preg_match("/^[a-z]\d+ .+ mem:(\d+)MiB/", $raidgroup, $batt)) { $cache_size = $batt[1]*1024*1024; } else { $cache_size = ''; } $group = $buff[1]; $lines = preg_split("/\r?\n/", $raidgroup, -1, PREG_SPLIT_NO_EMPTY); if (!empty($lines)) { unset($lines[0]); foreach ($lines as $line) { $details = preg_split('/ /', preg_replace('/^hot spares +:/', 'hotspare:', preg_replace('/errs:.+$/','',$line)), -1, PREG_SPLIT_NO_EMPTY); if (($countdet = count($details)) >= 2) { $size[0] = -1; for ($ind = $countdet; $ind > 1;) { if (preg_match('/(\d+)((B)|(KiB)|(MiB)|(GiB)|(TiB)|(PiB))/', $details[--$ind], $size)) { //Find size $size[0] = $ind; break; } else { $size[0] = -1; } } $model = ''; $serial = ''; if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && ($size[0] >= 2)) { for ($ind = 1; $ind < $size[0]; $ind++) { if (preg_match('/:/', $details[$ind])) { break; } $model .= " ".$details[$ind]; } $model = trim($model); if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { for (; $ind < $size[0]; $ind++) { if (preg_match('/^s\/n:(.+)$/', $details[$ind], $ser)) { $serial = $ser[1]; break; } } } } if (($countdet == 6) && ($details[2] === "RAID") && ($size[0] == 1)) { switch ($size[2]) { case 'B': $this->_result[$prog][$details[0]]['capacity'] = $size[1]; break; case 'KiB': $this->_result[$prog][$details[0]]['capacity'] = 1024*$size[1]; break; case 'MiB': $this->_result[$prog][$details[0]]['capacity'] = 1024*1024*$size[1]; break; case 'GiB': $this->_result[$prog][$details[0]]['capacity'] = 1024*1024*1024*$size[1]; break; case 'TiB': $this->_result[$prog][$details[0]]['capacity'] = 1024*1024*1024*1024*$size[1]; break; case 'PiB': $this->_result[$prog][$details[0]]['capacity'] = 1024*1024*1024*1024*1024*$size[1]; } $this->_result[$prog][$details[0]]['level'] = "RAID".$details[3]." ".$details[4]; $this->_result[$prog][$details[0]]['status'] = $details[5]; if ($controller !== '') $this->_result[$prog][$details[0]]['controller'] = $controller; if ($battery !== '') $this->_result[$prog][$details[0]]['battery'] = $battery; if ($battvolt !== '') $this->_result[$prog][$details[0]]['battvolt'] = $battvolt; if ($batttemp !== '') $this->_result[$prog][$details[0]]['batttemp'] = $batttemp; if ($cache_size !== '') $this->_result[$prog][$details[0]]['cache_size'] = $cache_size; $this->_result[$prog][$details[0]]['items'][$details[0]]['parentid'] = 0; $this->_result[$prog][$details[0]]['items'][$details[0]]['name'] = "RAID".$details[3]." ".$details[4]; if ($details[5] !== 'optimal') { $this->_result[$prog][$details[0]]['items'][$details[0]]['info'] = $details[5]; } switch ($details[5]) { case 'optimal': $this->_result[$prog][$details[0]]['items'][$details[0]]['status'] = "ok"; break; case 'OFFLINE': $this->_result[$prog][$details[0]]['items'][$details[0]]['status'] = "F"; break; default: $this->_result[$prog][$details[0]]['items'][$details[0]]['status'] = "W"; } } elseif (($countdet >= 2) && (($details[0]==='unconfigured:') || ($details[0]==='hotspare:'))) { $itemn0 = rtrim($details[0], ':'); $itemn = $group .'-'.$itemn0; $this->_result[$prog][$itemn]['status'] = $itemn0; if ($controller !== '') $this->_result[$prog][$itemn]['controller'] = $controller; if ($battery !== '') $this->_result[$prog][$itemn]['battery'] = $battery; if ($battvolt !== '') $this->_result[$prog][$itemn]['battvolt'] = $battvolt; if ($batttemp !== '') $this->_result[$prog][$itemn]['batttemp'] = $batttemp; if ($cache_size !== '') $this->_result[$prog][$itemn]['cache_size'] = $cache_size; $this->_result[$prog][$itemn]['items'][$itemn]['parentid'] = 0; $this->_result[$prog][$itemn]['items'][$itemn]['name'] = $itemn0; if ($details[0]==='unconfigured:') { $this->_result[$prog][$itemn]['items'][$itemn]['status'] = "U"; } else { $this->_result[$prog][$itemn]['items'][$itemn]['status'] = "S"; } } elseif (($countdet >= 4) && ($size[0] >= 1) && ($countdet - $size[0] == 3)) { if (isset($this->_result[$prog][$details[$countdet-2]])) { $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['parentid'] = 1; $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['type'] = "disk"; $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['name'] = $details[0]; if ($details[$countdet-1] !== 'online') { $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['info'] = $details[$countdet-1]; } switch ($details[$countdet-1]) { case 'online': $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['status'] = "ok"; break; case 'hotspare': $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['status'] = "S"; break; case 'rdy/fail': $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['status'] = "F"; break; default: $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['status'] = "W"; } if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { switch ($size[2]) { case 'B': $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['capacity'] = $size[1]; break; case 'KiB': $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['capacity'] = 1024*$size[1]; break; case 'MiB': $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['capacity'] = 1024*1024*$size[1]; break; case 'GiB': $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['capacity'] = 1024*1024*1024*$size[1]; break; case 'TiB': $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['capacity'] = 1024*1024*1024*1024*$size[1]; break; case 'PiB': $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['capacity'] = 1024*1024*1024*1024*1024*$size[1]; } if ($model !== '') $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['model'] = $model; if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { if ($serial !== '') $this->_result[$prog][$details[$countdet-2]]['items'][$details[0]]['serial'] = $serial; } } } } elseif (($countdet >= 3) && ($size[0] >= 1) && ($countdet - $size[0] == 2)) { $itemn = ''; switch ($details[$countdet-1]) { case 'BAD': case 'ready': $itemn = $group .'-unconfigured'; break; case 'hotspare': $itemn = $group .'-hotspare'; } if (($itemn !== '') && isset($this->_result[$prog][$itemn])) { $this->_result[$prog][$itemn]['items'][$details[0]]['parentid'] = 1; $this->_result[$prog][$itemn]['items'][$details[0]]['type'] = "disk"; $this->_result[$prog][$itemn]['items'][$details[0]]['name'] = $details[0]; $this->_result[$prog][$itemn]['items'][$details[0]]['info'] = $details[$countdet-1]; switch ($details[$countdet-1]) { case 'ready': $this->_result[$prog][$itemn]['items'][$details[0]]['status'] = "U"; break; case 'hotspare': $this->_result[$prog][$itemn]['items'][$details[0]]['status'] = "S"; break; default: $this->_result[$prog][$itemn]['items'][$details[0]]['status'] = "F"; } if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { switch ($size[2]) { case 'B': $this->_result[$prog][$itemn]['items'][$details[0]]['capacity'] = $size[1]; break; case 'KiB': $this->_result[$prog][$itemn]['items'][$details[0]]['capacity'] = 1024*$size[1]; break; case 'MiB': $this->_result[$prog][$itemn]['items'][$details[0]]['capacity'] = 1024*1024*$size[1]; break; case 'GiB': $this->_result[$prog][$itemn]['items'][$details[0]]['capacity'] = 1024*1024*1024*$size[1]; break; case 'TiB': $this->_result[$prog][$itemn]['items'][$details[0]]['capacity'] = 1024*1024*1024*1024*$size[1]; break; case 'PiB': $this->_result[$prog][$itemn]['items'][$details[0]]['capacity'] = 1024*1024*1024*1024*1024*$size[1]; } if ($model !== '') $this->_result[$prog][$itemn]['items'][$details[0]]['model'] = $model; if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { if ($serial !== '') $this->_result[$prog][$itemn]['items'][$details[0]]['serial'] = $serial; } } } } } } } } } } private function execute_status($buffer, $_3ware = false) { $carr=array(); if ($_3ware === true) { $prog = "3ware-status"; $split = "/\t/"; } else { $prog = "megaclisas-status"; $split = "/[\s]?\|[\s]?/"; } $buffLines = preg_split("/\n/", $buffer, -1, PREG_SPLIT_NO_EMPTY); foreach ($buffLines as $buffLine) { if (preg_match("/^(c\d+)[ |]/", $buffLine, $cbuff)) { $cname = $cbuff[1]; $buffArgs = preg_split("/[\s]?\|[\s]?/", $buffLine, -1, PREG_SPLIT_NO_EMPTY); if ((($countargs = count($buffArgs)) == 2) || ($countargs == 5) || ($countargs == 6)) { $carr[$cname]['controller'] = trim($buffArgs[1]); if ($countargs == 6) { $carr[$cname]['battery'] = trim($buffArgs[4]); } if ($countargs > 2) { $carr[$cname]['cache_size'] = trim($buffArgs[2]); if (preg_match("/^FW:\s+(\S+)$/", trim($buffArgs[$countargs - 1]), $pregout)) { $carr[$cname]['firmware'] = $pregout[1]; } else { $carr[$cname]['firmware'] = trim($buffArgs[$countargs -1]); } if (preg_match("/^(\d+)C$/", trim($buffArgs[3]), $pregout)) { $carr[$cname]['temperature'] = $pregout[1]; } $unit = preg_replace("/^[\d\s]+/", "", trim($buffArgs[2])); $value = preg_replace("/[\D\s]+$/", "", trim($buffArgs[2])); switch ($unit) { case 'B': $carr[$cname]['cache_size'] = $value; break; case 'KB': $carr[$cname]['cache_size'] = 1024*$value; break; case 'MB': $carr[$cname]['cache_size'] = 1024*1024*$value; break; case 'Gb': case 'GB': $carr[$cname]['cache_size'] = 1024*1024*1024*$value; break; case 'TB': $carr[$cname]['cache_size'] = 1024*1024*1024*1024*$value; break; case 'PB': $carr[$cname]['cache_size'] = 1024*1024*1024*1024*1024*$value; } } } elseif ($countargs == 3) { $carr[$cname]['controller'] = trim($buffArgs[1]); if (preg_match("/^FW:\s+(\S+)$/", trim($buffArgs[2]), $pregout)) { $carr[$cname]['firmware'] = $pregout[1]; } else { $carr[$cname]['firmware'] = trim($buffArgs[2]); } } } elseif (preg_match("/^((c\d+)u\d+)[\t |]/", $buffLine, $ubuff)) { $uname = $ubuff[1]; $cname = $ubuff[2]; $buffArgs = preg_split($split, $buffLine, -1, PREG_SPLIT_NO_EMPTY); if (((count($buffArgs) == 4) || (count($buffArgs) == 5) || (count($buffArgs) == 9) || (count($buffArgs) == 10)) && isset($carr[$cname])) { $this->_result[$prog][$uname]['level'] = trim($buffArgs[1]); $this->_result[$prog][$uname]['controller'] = $carr[$cname]['controller']; if (isset($carr[$cname]['battery'])) $this->_result[$prog][$uname]['battery'] = $carr[$cname]['battery']; if (isset($carr[$cname]['cache_size'])) $this->_result[$prog][$uname]['cache_size'] = $carr[$cname]['cache_size']; if (isset($carr[$cname]['firmware'])) $this->_result[$prog][$uname]['firmware'] = $carr[$cname]['firmware']; if (isset($carr[$cname]['temperature'])) $this->_result[$prog][$uname]['temperature'] = $carr[$cname]['temperature']; $unit = preg_replace("/^[\d\s]+/", "", trim($buffArgs[2])); $value = preg_replace("/[\D\s]+$/", "", trim($buffArgs[2])); switch ($unit) { case 'B': $this->_result[$prog][$uname]['capacity'] = $value; break; case 'K': $this->_result[$prog][$uname]['capacity'] = 1024*$value; break; case 'M': $this->_result[$prog][$uname]['capacity'] = 1024*1024*$value; break; case 'G': $this->_result[$prog][$uname]['capacity'] = 1024*1024*1024*$value; break; case 'T': $this->_result[$prog][$uname]['capacity'] = 1024*1024*1024*1024*$value; break; case 'P': $this->_result[$prog][$uname]['capacity'] = 1024*1024*1024*1024*1024*$value; } if ((count($buffArgs) == 4) || (count($buffArgs) == 5)) { $this->_result[$prog][$uname]['status'] = trim($buffArgs[3]); } else { $this->_result[$prog][$uname]['status'] = trim($buffArgs[6]); $this->_result[$prog][$uname]['diskcache'] = trim($buffArgs[5]); $this->_result[$prog][$uname]['name'] = trim($buffArgs[7]); if (preg_match("/^(\d+) KB$/", trim($buffArgs[3]), $strsize)) { $this->_result[$prog][$uname]['stripe_size'] = $strsize[1] * 1024; } $ctype = trim($buffArgs[4]); if (preg_match("/^NORA,/", $ctype)) $this->_result[$prog][$uname]['readpolicy'] = "noReadAhead"; elseif (preg_match("/^RA,/", $ctype)) $this->_result[$prog][$uname]['readpolicy'] = "readAhead"; elseif (preg_match("/^ADRA,/", $ctype)) $this->_result[$prog][$uname]['readpolicy'] = "adaptiveReadAhead"; if (preg_match("/,WT$/", $ctype)) $this->_result[$prog][$uname]['writepolicy'] = "writeThrough"; elseif (preg_match("/,WB$/", $ctype)) $this->_result[$prog][$uname]['writepolicy'] = "writeBack"; elseif (preg_match("/,WBF$/", $ctype)) $this->_result[$prog][$uname]['writepolicy'] = "writeBackForce"; } $this->_result[$prog][$uname]['items'][$uname]['parentid'] = 0; $this->_result[$prog][$uname]['items'][$uname]['name'] = trim($buffArgs[1]); if (preg_match("/(.+) : Completed (\d+)%/", trim($buffArgs[count($buffArgs)-1]), $progarr)) { $this->_result[$prog][$uname]['action']['name'] = trim($progarr[1]); $this->_result[$prog][$uname]['action']['percent'] = trim($progarr[2]); } switch ($this->_result[$prog][$uname]['status']) { case 'OK': case 'Optimal': $this->_result[$prog][$uname]['items'][$uname]['status'] = "ok"; break; case 'Offline': $this->_result[$prog][$uname]['items'][$uname]['status'] = "F"; break; default: $this->_result[$prog][$uname]['items'][$uname]['status'] = "W"; } } } elseif (preg_match("/^(((c\d+)u\d+)p\d+)[\t |]/", $buffLine, $pbuff)) { $pname = $pbuff[1]; $uname = $pbuff[2]; $buffArgs = preg_split($split, $buffLine, -1, PREG_SPLIT_NO_EMPTY); if (((count($buffArgs) == 3) || (count($buffArgs) == 9)) && (isset($this->_result[$prog][$uname]))) { $this->_result[$prog][$uname]['items'][$pname]['parentid'] = 1; $this->_result[$prog][$uname]['items'][$pname]['name'] = $pname; if (count($buffArgs) == 3) { $this->_result[$prog][$uname]['items'][$pname]['type'] = "disk"; $dskstat = trim($buffArgs[2]); /* too long if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { // due to mixing name and serial number $this->_result[$prog][$uname]['items'][$pname]['model'] = trim($buffArgs[1]); } */ } else { if (preg_match("/^(\d+)C$/", trim($buffArgs[6]), $pregout)) { $this->_result[$prog][$uname]['items'][$pname]['temperature'] = $pregout[1]; } if (trim($buffArgs[1])==="SSD") { $this->_result[$prog][$uname]['items'][$pname]['type'] = "ssd"; } else { $this->_result[$prog][$uname]['items'][$pname]['type'] = "disk"; } $dskstat = trim($buffArgs[4]); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { /* too long if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { // due to mixing name and serial number $this->_result[$prog][$uname]['items'][$pname]['model'] = trim($buffArgs[2]); } */ $capacity = preg_replace("/,/", ".", trim($buffArgs[3])); $unit = preg_replace("/^[\d\.\s]+/", "", $capacity); $value = preg_replace("/[\D\s]+$/", "", $capacity); switch ($unit) { case 'B': $this->_result[$prog][$uname]['items'][$pname]['capacity'] = $value; break; case 'KB': $this->_result[$prog][$uname]['items'][$pname]['capacity'] = round(1024*$value); break; case 'MB': $this->_result[$prog][$uname]['items'][$pname]['capacity'] = round(1024*1024*$value); break; case 'Gb': case 'GB': $this->_result[$prog][$uname]['items'][$pname]['capacity'] = round(1024*1024*1024*$value); break; case 'TB': $this->_result[$prog][$uname]['items'][$pname]['capacity'] = round(1024*1024*1024*1024*$value); break; case 'PB': $this->_result[$prog][$uname]['items'][$pname]['capacity'] = round(1024*1024*1024*1024*1024*$value); } } } switch ($dskstat) { case 'OK': case 'Online': case 'Online, Spun Up': $this->_result[$prog][$uname]['items'][$pname]['status'] = "ok"; break; /* case 'JBOD': case 'Unconfigured(good), Spun Up': case 'Unconfigured(good), Spun down': $this->_result[$prog][$uname]['items'][$pname]['status'] = "U"; break; case 'Hotspare, Spun Up': case 'Hotspare, Spun down': $this->_result[$prog][$uname]['items'][$pname]['status'] = "S"; break;*/ default: if (preg_match("/^(\S+) \((\d+)%\)/", $dskstat, $progarr)) { $this->_result[$prog][$uname]['items'][$pname]['status'] = "W"; $this->_result[$prog][$uname]['action']['name'] = trim($progarr[1]); $this->_result[$prog][$uname]['action']['percent'] = trim($progarr[2]); } } if ($dskstat !== "OK") $this->_result[$prog][$uname]['items'][$pname]['info'] = $dskstat; } } elseif (preg_match("/^((c\d+)uXpY)[\t |]/", $buffLine, $pbuff)) { $pname = $pbuff[1]; $cname = $pbuff[2]; $uname = $cname."-unconfigured"; $this->_result[$prog][$uname]['controller'] = $carr[$cname]['controller']; if (isset($carr[$cname]['battery'])) $this->_result[$prog][$uname]['battery'] = $carr[$cname]['battery']; if (isset($carr[$cname]['cache_size'])) $this->_result[$prog][$uname]['cache_size'] = $carr[$cname]['cache_size']; if (isset($carr[$cname]['firmware'])) $this->_result[$prog][$uname]['firmware'] = $carr[$cname]['firmware']; if (isset($carr[$cname]['temperature'])) $this->_result[$prog][$uname]['temperature'] = $carr[$cname]['temperature']; $this->_result[$prog][$uname]['status'] = "unconfigured"; $this->_result[$prog][$uname]['items'][$uname]['parentid'] = 0; $this->_result[$prog][$uname]['items'][$uname]['name'] = "unconfigured"; $this->_result[$prog][$uname]['items'][$uname]['status'] = "U"; if (!isset($this->_result[$prog][$uname]['items'][$uname]['count'])) { $id = 0; } else { $id = $this->_result[$prog][$uname]['items'][$uname]['count']; $id++; } $this->_result[$prog][$uname]['items'][$uname]['count'] = $id; $buffArgs = preg_split($split, $buffLine, -1, PREG_SPLIT_NO_EMPTY); if (((count($buffArgs) == 3) || (count($buffArgs) == 9) || (count($buffArgs) == 10))) { $this->_result[$prog][$uname]['items'][$uname."-".$id]['parentid'] = 1; $this->_result[$prog][$uname]['items'][$uname."-".$id]['name'] = $pname; if (count($buffArgs) == 3) { $this->_result[$prog][$uname]['items'][$uname."-".$id]['type'] = "disk"; $dskstat = trim($buffArgs[2]); } else { if (trim($buffArgs[1])==="SSD") { $this->_result[$prog][$uname]['items'][$uname."-".$id]['type'] = "ssd"; } else { $this->_result[$prog][$uname]['items'][$uname."-".$id]['type'] = "disk"; } $dskstat = trim($buffArgs[4]); } switch ($dskstat) { /* case 'Online': case 'Online, Spun Up':*/ case 'JBOD': $this->_result[$prog][$uname]['items'][$uname."-".$id]['status'] = "ok"; break; case 'Unconfigured(bad)': $this->_result[$prog][$uname]['items'][$uname."-".$id]['status'] = "F"; break; case 'Unconfigured(good), Spun Up': case 'Unconfigured(good), Spun down': $this->_result[$prog][$uname]['items'][$uname."-".$id]['status'] = "U"; break; case 'Hotspare, Spun Up': case 'Hotspare, Spun down': $this->_result[$prog][$uname]['items'][$uname."-".$id]['status'] = "S"; } $this->_result[$prog][$uname]['items'][$uname."-".$id]['info'] = $dskstat; if ((count($buffArgs) == 10) && (trim($buffArgs[9]) != 'N/A')) $this->_result[$prog][$uname]['items'][$uname."-".$id]['info'].=" ".trim($buffArgs[9]); } } } } private function execute_graid($buffer) { if (preg_match('/^Geom name: +([^\n\r]+)/', $buffer, $geom)) { $controller = trim($geom[1]); } else { $controller = ''; } $raiddata = preg_split("/Consumers:\r?\n/", $buffer, -1, PREG_SPLIT_NO_EMPTY); if (!empty($raiddata)) { $disksinfo = array(); if (isset($raiddata[1]) && (trim($raiddata[1])!=="")) { $lines = preg_split("/\r?\n/", trim($raiddata[1]), -1, PREG_SPLIT_NO_EMPTY); $disk = ""; foreach ($lines as $line) { if (preg_match("/^\d+\.\s+Name:\s+(.+)/", $line, $data)) { $disk = $data[1]; } elseif (($disk!=="") && preg_match('/^\s+State:\s+(\S+)\s+\(([^\)\s]+)\s*([\d]*)(%*)([^\)]*)\)/', $line, $data)) { $disksinfo[$disk]['status'] = trim($data[1]); $disksinfo[$disk]['substatus'] = trim($data[2]); if (trim($data[4])=="%") { $disksinfo[$disk]['percent'] = trim($data[3]); } } elseif (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && ($disk !== "") && preg_match('/^\s+Mediasize:\s+(\d+)/', $line, $data)) { $disksinfo[$disk]['capacity'] = trim($data[1]); } } } $lines = preg_split("/\r?\n/", trim($raiddata[0]), -1, PREG_SPLIT_NO_EMPTY); $group = ""; foreach ($lines as $line) { if (preg_match("/^\d+\.\s+Name:\s+(.+)/", $line, $data)) { $group = $data[1]; if ($controller !== '') $this->_result['graid'][$group]['controller'] = $controller; } elseif ($group!=="") { if (preg_match('/^\s+Mediasize:\s+(\d+)/', $line, $data)) { $this->_result['graid'][$group]['capacity'] = trim($data[1]); } elseif (preg_match('/^\s+State:\s+(.+)/', $line, $data)) { $this->_result['graid'][$group]['status'] = trim($data[1]); } elseif (preg_match('/^\s+RAIDLevel:\s+(.+)/', $line, $data)) { $this->_result['graid'][$group]['level'] = trim($data[1]); } elseif (preg_match('/^\s+Components:\s+(\d+)/', $line, $data)) { $this->_result['graid'][$group]['devs'] = trim($data[1]); } elseif (preg_match('/^\s+Label:\s+(.+)/', $line, $data)) { $this->_result['graid'][$group]['name'] = trim($data[1]); } elseif (preg_match('/^\s+Stripesize:\s+(.+)/', $line, $data)) { $this->_result['graid'][$group]['stripe_size'] = trim($data[1]); } elseif (preg_match('/^\s+Subdisks:\s+(.+)/', $line, $data)) { $disks = preg_split('/\s*,\s*/', trim($data[1]), -1, PREG_SPLIT_NO_EMPTY); $nones = 0; $this->_result['graid'][$group]['items'][0]['parentid'] = 0; foreach ($disks as $disk) { if (preg_match("/^(\S+)\s+\(([^\)]+)\)/", $disk, $partition)) { $this->_result['graid'][$group]['items'][$partition[1]]['parentid'] = 1; $this->_result['graid'][$group]['items'][$partition[1]]['type'] = "disk"; if ($partition[2]=="ACTIVE") { if (isset($disksinfo[$partition[1]]["status"])) { if ($disksinfo[$partition[1]]["status"]!=="ACTIVE") { $this->_result['graid'][$group]['items'][$partition[1]]['status'] = "W"; } elseif ($disksinfo[$partition[1]]["substatus"]=="ACTIVE") { $this->_result['graid'][$group]['items'][$partition[1]]['status'] = "ok"; } else { $this->_result['graid'][$group]['items'][$partition[1]]['status'] = "W"; if (isset($disksinfo[$partition[1]]["percent"])) { $this->_result['graid'][$group]['action']['name'] = $disksinfo[$partition[1]]["substatus"]; $this->_result['graid'][$group]['action']['percent'] = $disksinfo[$partition[1]]["percent"]; } } } else { $this->_result['graid'][$group]['items'][$partition[1]]['status'] = "ok"; $this->_result['graid'][$group]['items'][$partition[1]]['name'] = $partition[1]; } $this->_result['graid'][$group]['items'][$partition[1]]['name'] = $partition[1]; } elseif ($partition[2]=="NONE") { $this->_result['graid'][$group]['items']["none".$nones]['status'] = 'E'; $this->_result['graid'][$group]['items']["none".$nones]['name'] = "none".$nones; $nones++; } } } } } } if (isset($this->_result['graid'][$group]['items'][0]['parentid'])) { $name = ""; if (isset($this->_result['graid'][$group]['name'])) { $name = $this->_result['graid'][$group]['name']; } if (isset($this->_result['graid'][$group]['level'])) { $name .= " " .$this->_result['graid'][$group]['level']; } $this->_result['graid'][$group]['items'][0]['name'] = trim($name); if (isset($this->_result['graid'][$group]['status'])) { if ($this->_result['graid'][$group]['status']==="OPTIMAL") { $this->_result['graid'][$group]['items'][0]['status'] = "ok"; } else { $this->_result['graid'][$group]['items'][0]['status'] = "W"; $this->_result['graid'][$group]['items'][0]['info'] = $this->_result['graid'][$group]['status']; } } else { $this->_result['graid'][$group]['items'][0]['status'] = "ok"; } } } } private function execute_zpool($buffer) { $raiddata = preg_split("/(\r?\n)+ +(?=pool: )/", $buffer, -1, PREG_SPLIT_NO_EMPTY); if (!empty($raiddata)) foreach ($raiddata as $raid) { if (preg_match("/^pool: (\S+)/", $raid, $buff)) { $group = $buff[1]; if (preg_match("/^ +state: (\S+)/m", $raid, $buff)) { $this->_result['zpool'][$group]['status'] = $buff[1]; } $databegin = preg_split("/\n[ \t]+NAME +STATE +READ +WRITE +CKSUM\r?\n/", $raid, -1, PREG_SPLIT_NO_EMPTY); if (!empty($databegin) && (count($databegin)==2)) { $datas = preg_split("/\r?\n[ \t]*\r?\n/", $databegin[1], -1, PREG_SPLIT_NO_EMPTY); $datalines = preg_split("/\r?\n/", $datas[0], -1, PREG_SPLIT_NO_EMPTY); $rootoffset = false; $lastparentids = array(0=>-1); $lastindent = 0; $lastid = 0; foreach ($datalines as $id=>$data) { if (preg_match("/^([ \t]+)\S/", $data, $buff)) {; $fullbuff = preg_split("/[ \t]+/", $data, 6, PREG_SPLIT_NO_EMPTY); $offset=strlen($buff[1]); if ($rootoffset === false) { // first line means root $rootoffset = $offset; $this->_result['zpool'][$group]['items'][$id]['name'] = "";//$fullbuff[0]; if (count($fullbuff) > 1) { $this->_result['zpool'][$group]['items'][$id]['status'] = $fullbuff[1]; } $this->_result['zpool'][$group]['items'][$id]['parentid'] = -2; continue; } if ($offset < $rootoffset) { // some errors continue; } $this->_result['zpool'][$group]['items'][$id]['name'] = $fullbuff[0]; if (count($fullbuff) > 1) { $this->_result['zpool'][$group]['items'][$id]['status'] = $fullbuff[1]; } if (count($fullbuff) > 5) { $this->_result['zpool'][$group]['items'][$id]['info'] = $fullbuff[5]; } $indent = ($offset - $rootoffset)/2; if ($indent > $lastindent) { $lastparentids[$indent] = $lastid; } $this->_result['zpool'][$group]['items'][$id]['parentid'] = $lastparentids[$indent]; if ($lastparentids[$indent] >= 0) { if (isset($this->_result['zpool'][$group]['items'][$lastparentids[$indent]]['childs'])) { $this->_result['zpool'][$group]['items'][$lastparentids[$indent]]['childs']++; } else { $this->_result['zpool'][$group]['items'][$lastparentids[$indent]]['childs'] = 1; } } $lastindent = $indent; $lastid = $id; } } foreach ($this->_result['zpool'][$group]['items'] as $id=>$data) { // type analize if ((!isset($data['childs']) || ($data['childs']<1)) && ($data['parentid']>=0) && !preg_match("/^mirror$|^mirror-|^spare$|^spare-|^replacing$|^replacing-|^raidz[123]$|^raidz[123]-/", $data['name'])) { $this->_result['zpool'][$group]['items'][$id]['type'] = "disk"; } elseif (isset($data['childs']) && !preg_match("/^spares$|^mirror$|^mirror-|^spare$|^spare-|^replacing$|^replacing-|^raidz[123]$|^raidz[123]-/", $data['name'])) { if (($data['childs']==1) && ($data['parentid']==-2) && isset($this->_result['zpool'][$group]['items'][$id+1]) && !preg_match("/^mirror$|^mirror-|^spare$|^spare-|^replacing$|^replacing-|^raidz[123]$|^raidz[123]-/", $this->_result['zpool'][$group]['items'][$id+1]['name'])) { $this->_result['zpool'][$group]['items'][$id]['name2'] = "jbod"; } elseif ($data['childs']>1) { $this->_result['zpool'][$group]['items'][$id]['name2'] = "stripe"; } } } foreach ($this->_result['zpool'][$group]['items'] as $id=>$data) { // size optimize if (($data['parentid']<0) && isset($data['childs']) && ($data['childs']==1) && (!isset($data['name2']) || ($data['name2']!=="jbod"))) { if ($data['parentid']==-2) { unset($this->_result['zpool'][$group]['items'][$id]); } elseif (($data['parentid'] == -1) && !isset($this->_result['zpool'][$group]['items'][$id+1]['type'])) { $this->_result['zpool'][$group]['items'][$id+1]['name2'] = $data['name']; $this->_result['zpool'][$group]['items'][$id+1]['parentid'] = $data['parentid']; unset($this->_result['zpool'][$group]['items'][$id]); foreach ($this->_result['zpool'][$group]['items'] as $id2=>$data2) { if ($data2['parentid']>$id) { $this->_result['zpool'][$group]['items'][$id2]['parentid'] = $data2['parentid'] - 1; } } } } } if (isset($this->_result['zpool'][$group]['items'][0])) { $shift = true; } else { $shift = false; } foreach ($this->_result['zpool'][$group]['items'] as $id=>$data) { // reindex if ($shift) { $this->_result['zpool'][$group]['items'][$id]['parentid']++; } if ($data['parentid']<0) { $this->_result['zpool'][$group]['items'][$id]['parentid'] = 0; } // name append if (isset($data['name2'])) { if (($data['name2']==="cache") || ($data['name2']==="logs")) { $this->_result['zpool'][$group]['items'][$id]['name'] = trim($data['name2']." ".$data['name']); } else { $this->_result['zpool'][$group]['items'][$id]['name'] = trim($data['name']." ".$data['name2']); } unset($this->_result['zpool'][$group]['items'][$id]['name2']); } // status and info normalize if (isset($data['status'])) { switch ($data['status']) { case 'AVAIL': if (isset($data['info'])) { $this->_result['zpool'][$group]['items'][$id]['info'] = $data['status']." ".$data['info']; } else { $this->_result['zpool'][$group]['items'][$id]['info'] = $data['status']; } $this->_result['zpool'][$group]['items'][$id]['status'] = "S"; break; case 'INUSE': case 'DEGRADED': if (isset($data['info'])) { $this->_result['zpool'][$group]['items'][$id]['info'] = $data['status']." ".$data['info']; } else { $this->_result['zpool'][$group]['items'][$id]['info'] = $data['status']; } $this->_result['zpool'][$group]['items'][$id]['status'] = "W"; break; case 'UNAVAIL': case 'FAULTED': if (isset($data['info'])) { $this->_result['zpool'][$group]['items'][$id]['info'] = $data['status']." ".$data['info']; } else { $this->_result['zpool'][$group]['items'][$id]['info'] = $data['status']; } $this->_result['zpool'][$group]['items'][$id]['status'] = "F"; break; default: $this->_result['zpool'][$group]['items'][$id]['status'] = "ok"; } } else { if ($this->_result['zpool'][$group]['items'][$id]['name'] == "spares") { $this->_result['zpool'][$group]['items'][$id]['status'] = "S"; } else { $this->_result['zpool'][$group]['items'][$id]['status'] = "ok"; } } } } } } } private function execute_idrac($buffer, $device) { $snmptablec = array(); //controller table $snmptableb = array(); //battery table $snmptablev = array(); //virtual disks table $snmptablep = array(); //physical disks table $buffer = preg_replace('/End of MIB\r?\n/', '', $buffer); $buffer = preg_replace('/\s\r?\n([^\.])/', ' $1', $buffer); $raiddata = preg_split("/\r?\n/", $buffer, -1, PREG_SPLIT_NO_EMPTY); if (!empty($raiddata)) { foreach ($raiddata as $line) { if (preg_match('/^(.+) = Hex-STRING:\s(.+)/', $line, $linetmp)) { $hexchars = explode(" ", trim($linetmp[2])); $newstring = ""; foreach ($hexchars as $hexchar) { $hexint = hexdec($hexchar); if (($hexint<32) || ($hexint>126)) { $newstring .= "."; } else { $newstring .= chr($hexint); } } if ($newstring!=="") { $line = $linetmp[1]." = STRING: ".$newstring; } } if (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.1\.1\.2\.(.*) = STRING:\s(.*)/', $line, $data)) { $snmptablec[$data[1]]['controllerName']=trim($data[2], "\""); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.1\.1\.8\.(.*) = STRING:\s(.*)/', $line, $data)) { $snmptablec[$data[1]]['controllerFWVersion']=trim($data[2], "\""); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.1\.1\.9\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablec[$data[1]]['controllerCacheSizeInMB']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.1\.1\.37\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablec[$data[1]]['controllerRollUpStatus']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.1\.1\.78\.(.*) = STRING:\s(.*)/', $line, $data)) { $snmptablec[$data[1]]['controllerFQDD']=trim($data[2], "\""); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.15\.1\.4\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptableb[$data[1]]['batteryState']=$data[2]; // } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.15\.1\.6\.(.*) = INTEGER:\s(.*)/', $line, $data)) { // $snmptableb[$data[1]]['batteryComponentStatus']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.15\.1\.20\.(.*) = STRING:\s(.*)/', $line, $data)) { $snmptableb[$data[1]]['batteryFQDD']=trim($data[2], "\""); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.4\.1\.2\.(.*) = STRING:\s(.*)/', $line, $data)) { $snmptablep[$data[1]]['physicalDiskName']=trim($data[2], "\""); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.4\.1\.3\.(.*) = STRING:\s(.*)/', $line, $data)) { $snmptablep[$data[1]]['physicalDiskManufacturer']=trim($data[2], "\""); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.4\.1\.4\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablep[$data[1]]['physicalDiskState']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.4\.1\.6\.(.*) = STRING:\s(.*)/', $line, $data)) { $snmptablep[$data[1]]['physicalDiskProductID']=trim($data[2], "\""); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.4\.1\.7\.(.*) = STRING:\s(.*)/', $line, $data)) { $snmptablep[$data[1]]['physicalDiskSerialNo']=trim($data[2], "\""); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.4\.1\.11\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablep[$data[1]]['physicalDiskCapacityInMB']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.4\.1\.21\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablep[$data[1]]['physicalDiskBusType']=$data[2]; // } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.4\.1\.22\.(.*) = INTEGER:\s(.*)/', $line, $data)) { // $snmptablep[$data[1]]['physicalDiskSpareState']=$data[2]; // } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.4\.1\.24\.(.*) = INTEGER:\s(.*)/', $line, $data)) { // $snmptablep[$data[1]]['physicalDiskComponentStatus']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.4\.1\.50\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablep[$data[1]]['physicalDiskOperationalState']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.4\.1\.51\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablep[$data[1]]['physicalDiskProgress']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.130\.4\.1\.54\.(.*) = STRING:\s(.*)/', $line, $data)) { $snmptablep[$data[1]]['physicalDiskFQDD']=trim($data[2], "\""); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.140\.1\.1\.2\.(.*) = STRING:\s(.*)/', $line, $data)) { $snmptablev[$data[1]]['virtualDiskName']=trim($data[2], "\""); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.140\.1\.1\.4\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablev[$data[1]]['virtualDiskState']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.140\.1\.1\.6\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablev[$data[1]]['virtualDiskSizeInMB']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.140\.1\.1\.10\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablev[$data[1]]['virtualDiskWritePolicy']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.140\.1\.1\.11\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablev[$data[1]]['virtualDiskReadPolicy']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.140\.1\.1\.13\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablev[$data[1]]['virtualDiskLayout']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.140\.1\.1\.14\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablev[$data[1]]['virtualDiskStripeSize']=$data[2]; // } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.140\.1\.1\.20\.(.*) = INTEGER:\s(.*)/', $line, $data)) { // $snmptablev[$data[1]]['virtualDiskComponentStatus']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.140\.1\.1\.23\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablev[$data[1]]['virtualDiskBadBlocksDetected']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.140\.1\.1\.26\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablev[$data[1]]['virtualDiskDiskCachePolicy']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.140\.1\.1\.30\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablev[$data[1]]['virtualDiskOperationalState']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.140\.1\.1\.31\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $snmptablev[$data[1]]['virtualDiskProgress']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.674\.10892\.5\.5\.1\.20\.140\.1\.1\.35\.(.*) = STRING:\s(.*)/', $line, $data)) { $snmptablev[$data[1]]['virtualDiskFQDD']=trim($data[2], "\""); } } foreach ($snmptablec as $raid_controller) { $tablec = array(); //controller result table if (isset($raid_controller['controllerRollUpStatus'])) { switch ($raid_controller['controllerRollUpStatus']) { case 1: $tablec['status'] = "W"; $tablec['info'] = "Other"; break; case 2: $tablec['status'] = "W"; $tablec['info'] = "Unknown"; break; case 3: $tablec['status'] ="ok"; break; case 4: $tablec['status'] ="W"; $tablec['info'] ="Non-critical"; break; case 5: $tablec['status'] = "F"; $tablec['info'] = "Critical"; break; case 6: $tablec['status'] = "F"; $tablec['info'] = "Non-recoverable"; } } if (isset($raid_controller['controllerName'])) { $tablec['controller'] = $raid_controller['controllerName']; } if (isset($raid_controller['controllerFWVersion'])) { $tablec['firmware'] = $raid_controller['controllerFWVersion']; } if (isset($raid_controller['controllerCacheSizeInMB'])) { $tablec['cache_size'] = $raid_controller['controllerCacheSizeInMB'] * 1024 * 1024; } foreach ($snmptableb as $raid_battery) { if (isset($raid_battery['batteryFQDD']) && isset($raid_controller['controllerFQDD']) && preg_match("/:".$raid_controller['controllerFQDD']."$/", $raid_battery['batteryFQDD'])) { if (isset($raid_battery['batteryState'])) { switch ($raid_battery['batteryState']) { case 1: $tablec['battery'] = "unknown"; break; case 2: $tablec['battery'] = "ready"; break; case 3: $tablec['battery'] = "failed"; break; case 4: $tablec['battery'] = "degraded"; break; case 5: $tablec['battery'] = "missing"; break; case 6: $tablec['battery'] = "charging"; break; case 7: $tablec['battery'] = "bellowThreshold"; } } break; } } foreach ($snmptablep as $raid_physical) { if (isset($raid_physical['physicalDiskFQDD']) && isset($raid_controller['controllerFQDD']) && preg_match("/:".$raid_controller['controllerFQDD']."$/", $raid_physical['physicalDiskFQDD'])) { $devname = $device.'-'.preg_replace('/[a-zA-Z\.]/', '', $raid_controller['controllerFQDD']); $this->_result['idrac'][$devname]['name']=$raid_controller['controllerFQDD']; if (isset($tablec['controller'])) { $this->_result['idrac'][$devname]['controller'] = $tablec['controller']; } if (isset($tablec['firmware'])) { $this->_result['idrac'][$devname]['firmware'] = $tablec['firmware']; } if (isset($tablec['battery'])) { $this->_result['idrac'][$devname]['battery'] = $tablec['battery']; } if (isset($tablec['cache_size'])) { $this->_result['idrac'][$devname]['cache_size'] = $tablec['cache_size']; } if (isset($tablec['info'])) { $this->_result['idrac'][$devname]['status'] = $tablec['info']; } elseif (isset($tablec['status'])) { $this->_result['idrac'][$devname]['status'] = $tablec['status']; } $this->_result['idrac'][$devname]['items'][0]['name']=$raid_controller['controllerFQDD']; $this->_result['idrac'][$devname]['items'][0]['parentid'] = 0; if (isset($tablec['status'])) { $this->_result['idrac'][$devname]['items'][0]['status'] = $tablec['status']; if (isset($tablec['info'])) { $this->_result['idrac'][$devname]['items'][0]['info'] = $tablec['info']; } } $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['name']=$raid_physical['physicalDiskName']; $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['parentid'] = 1; if (preg_match("/^Solid State Disk /", $raid_physical['physicalDiskName'])) { $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['type'] = "ssd"; } else { $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['type'] = "disk"; } if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if (isset($raid_physical['physicalDiskCapacityInMB'])) { $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['capacity'] = $raid_physical['physicalDiskCapacityInMB'] * 1024 * 1024; } $model = ""; if (isset($raid_physical['physicalDiskManufacturer'])) { $model = $raid_physical['physicalDiskManufacturer']; } if (isset($raid_physical['physicalDiskProductID'])) { $model .= " ".$raid_physical['physicalDiskProductID']; } if (($model = trim($model)) !== '') { $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['model'] = $model; } if (isset($raid_physical['physicalDiskBusType'])) { switch ($raid_physical['physicalDiskBusType']) { // case 1: // $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['bus'] = "unknown"; // break; case 2: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['bus'] = "SCSI"; break; case 3: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['bus'] = "SAS"; break; case 4: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['bus'] = "SATA"; break; case 5: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['bus'] = "Fibre"; } } if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { if (isset($raid_physical['physicalDiskSerialNo'])) { $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['serial'] = " ".$raid_physical['physicalDiskSerialNo']; } } } if (isset($raid_physical['physicalDiskState'])) { switch ($raid_physical['physicalDiskState']) { case 1: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['status'] = "W"; $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['info'] = "unknown"; break; case 2: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['status'] = "W"; $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['info'] = "ready"; break; case 3: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['status'] = "ok"; $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['info'] = "online"; if (isset($raid_physical['physicalDiskOperationalState'])) { switch ($raid_physical['physicalDiskOperationalState']) { case 1: break; case 2: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['status'] = "W"; if (isset($raid_physical['physicalDiskProgress'])) { $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['info'] = 'Rebuilding ('.$raid_physical['physicalDiskProgress'].'%)'; $this->_result['idrac'][$devname]['action']['name'] = 'Rebuilding'; $this->_result['idrac'][$devname]['action']['percent'] = $raid_physical['physicalDiskProgress']; } else { $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['info'] = 'Rebuilding'; } break; case 3: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['status'] = "W"; if (isset($raid_physical['physicalDiskProgress'])) { $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['info'] = 'Erasing ('.$raid_physical['physicalDiskProgress'].'%)'; $this->_result['idrac'][$devname]['action']['name'] = 'Erasing'; $this->_result['idrac'][$devname]['action']['percent'] = $raid_physical['physicalDiskProgress']; } else { $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['info'] = 'Erasing'; } break; case 4: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['status'] = "W"; if (isset($raid_physical['physicalDiskProgress'])) { $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['info'] = 'Copying ('.$raid_physical['physicalDiskProgress'].'%)'; $this->_result['idrac'][$devname]['action']['name'] = 'Copying'; $this->_result['idrac'][$devname]['action']['percent'] = $raid_physical['physicalDiskProgress']; } else { $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['info'] = 'Copying'; } } } break; case 4: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['status'] = "W"; $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['info'] = "foreign"; break; case 5: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['status'] = "F"; $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['info'] = "offline"; break; case 6: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['status'] = "F"; $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['info'] = "blocked"; break; case 7: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['status'] = "F"; $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['info'] = "failed"; break; case 8: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['status'] = "S"; $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['info'] = "non-raid"; break; case 9: $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['status'] = "F"; $this->_result['idrac'][$devname]['items'][$raid_physical['physicalDiskName']]['info'] = "removed"; } } } } foreach ($snmptablev as $raid_virtual) { if (isset($raid_virtual['virtualDiskFQDD']) && isset($raid_controller['controllerFQDD']) && preg_match("/:".$raid_controller['controllerFQDD']."$/", $raid_virtual['virtualDiskFQDD'])) { $devname = $device.'-'.preg_replace('/[a-zA-Z\.]/', '', $raid_virtual['virtualDiskFQDD']); $this->_result['idrac'][$devname]['name']=$raid_virtual['virtualDiskFQDD']; $this->_result['idrac'][$devname]['items'][0]['name']=$raid_virtual['virtualDiskFQDD']; $this->_result['idrac'][$devname]['items'][0]['parentid'] = 0; if (isset($tablec['controller'])) { $this->_result['idrac'][$devname]['controller'] = $tablec['controller']; } if (isset($tablec['firmware'])) { $this->_result['idrac'][$devname]['firmware'] = $tablec['firmware']; } if (isset($tablec['battery'])) { $this->_result['idrac'][$devname]['battery'] = $tablec['battery']; } if (isset($tablec['cache_size'])) { $this->_result['idrac'][$devname]['cache_size'] = $tablec['cache_size']; } if (isset($raid_virtual['virtualDiskLayout'])) { switch ($raid_virtual['virtualDiskLayout']) { case 1: $this->_result['idrac'][$devname]['level'] = "other"; break; case 2: $this->_result['idrac'][$devname]['level'] = "raid0"; break; case 3: $this->_result['idrac'][$devname]['level'] = "raid1"; break; case 4: $this->_result['idrac'][$devname]['level'] = "raid5"; break; case 5: $this->_result['idrac'][$devname]['level'] = "raid6"; break; case 6: $this->_result['idrac'][$devname]['level'] = "raid10"; break; case 7: $this->_result['idrac'][$devname]['level'] = "raid50"; break; case 8: $this->_result['idrac'][$devname]['level'] = "raid60"; break; case 9: $this->_result['idrac'][$devname]['level'] = "concatraid1"; break; case 10: $this->_result['idrac'][$devname]['level'] = "concatraid5"; break; default: $this->_result['idrac'][$devname]['level'] = "unknown"; } if (isset($this->_result['idrac'][$devname]['level'])) { $this->_result['idrac'][$devname]['items'][0]['name'] = $this->_result['idrac'][$devname]['level']; } } if (isset($raid_virtual['virtualDiskState'])) { switch ($raid_virtual['virtualDiskState']) { case 1: $this->_result['idrac'][$devname]['status'] = "unknown"; $this->_result['idrac'][$devname]['items'][0]['status']="W"; $this->_result['idrac'][$devname]['items'][0]['info'] = $this->_result['idrac'][$devname]['status']; break; case 2: $this->_result['idrac'][$devname]['status'] = "online"; $this->_result['idrac'][$devname]['items'][0]['status']="ok"; $this->_result['idrac'][$devname]['items'][0]['info'] = $this->_result['idrac'][$devname]['status']; break; case 3: $this->_result['idrac'][$devname]['status'] = "failed"; $this->_result['idrac'][$devname]['items'][0]['status']="F"; $this->_result['idrac'][$devname]['items'][0]['info'] = $this->_result['idrac'][$devname]['status']; break; case 4: $this->_result['idrac'][$devname]['status'] = "degraded"; $this->_result['idrac'][$devname]['items'][0]['status']="W"; $this->_result['idrac'][$devname]['items'][0]['info'] = $this->_result['idrac'][$devname]['status']; } } if (isset($raid_virtual['virtualDiskOperationalState'])) { switch ($raid_virtual['virtualDiskOperationalState']) { case 1: //$this->_result['idrac'][$devname]['action']['name'] = "notApplicable"; break; case 2: $this->_result['idrac'][$devname]['action']['name'] = "reconstructing"; if (isset($raid_virtual['virtualDiskProgress'])) { $this->_result['idrac'][$devname]['action']['percent'] = $raid_virtual['virtualDiskProgress']; } else { $this->_result['idrac'][$devname]['action']['percent'] = 0; } break; case 3: $this->_result['idrac'][$devname]['action']['name'] = "resyncing"; if (isset($raid_virtual['virtualDiskProgress'])) { $this->_result['idrac'][$devname]['action']['percent'] = $raid_virtual['virtualDiskProgress']; } else { $this->_result['idrac'][$devname]['action']['percent'] = 0; } break; case 4: $this->_result['idrac'][$devname]['action']['name'] = "initializing"; if (isset($raid_virtual['virtualDiskProgress'])) { $this->_result['idrac'][$devname]['action']['percent'] = $raid_virtual['virtualDiskProgress']; } else { $this->_result['idrac'][$devname]['action']['percent'] = 0; } break; case 5: $this->_result['idrac'][$devname]['action']['name'] = "backgroundInit"; if (isset($raid_virtual['virtualDiskProgress'])) { $this->_result['idrac'][$devname]['action']['percent'] = $raid_virtual['virtualDiskProgress']; } else { $this->_result['idrac'][$devname]['action']['percent'] = 0; } } } if (isset($raid_virtual['virtualDiskSizeInMB'])) { $this->_result['idrac'][$devname]['capacity'] = $raid_virtual['virtualDiskSizeInMB'] * 1024 * 1024; } if (isset($raid_virtual['virtualDiskReadPolicy'])) { switch ($raid_virtual['virtualDiskReadPolicy']) { case 1: $this->_result['idrac'][$devname]['readpolicy'] = "noReadAhead"; break; case 2: $this->_result['idrac'][$devname]['readpolicy'] = "readAhead"; break; case 3: $this->_result['idrac'][$devname]['readpolicy'] = "adaptiveReadAhead"; } } if (isset($raid_virtual['virtualDiskWritePolicy'])) { switch ($raid_virtual['virtualDiskWritePolicy']) { case 1: $this->_result['idrac'][$devname]['writepolicy'] = "writeThrough"; break; case 2: $this->_result['idrac'][$devname]['writepolicy'] = "writeBack"; break; case 3: $this->_result['idrac'][$devname]['writepolicy'] = "writeBackForce"; } } if (isset($raid_virtual['virtualDiskState'])) { switch ($raid_virtual['virtualDiskState']) { case 1: $this->_result['idrac'][$devname]['status'] = "unknown"; break; case 2: $this->_result['idrac'][$devname]['status'] = "online"; break; case 3: $this->_result['idrac'][$devname]['status'] = "failed"; break; case 4: $this->_result['idrac'][$devname]['status'] = "degraded"; } } if (isset($raid_virtual['virtualDiskDiskCachePolicy'])) { switch ($raid_virtual['virtualDiskDiskCachePolicy']) { case 1: $this->_result['idrac'][$devname]['diskcache'] = "enabled"; break; case 2: $this->_result['idrac'][$devname]['diskcache'] = "disabled"; break; case 3: $this->_result['idrac'][$devname]['diskcache'] = "default"; } } if (isset($raid_virtual['virtualDiskBadBlocksDetected'])) { $this->_result['idrac'][$devname]['bad_blocks'] = $raid_virtual['virtualDiskBadBlocksDetected']; } if (isset($raid_virtual['virtualDiskStripeSize'])) { $virtualDiskStripeSize = $raid_virtual['virtualDiskStripeSize']; if ($virtualDiskStripeSize >= 3) { $this->_result['idrac'][$devname]['stripe_size'] = 512<<($virtualDiskStripeSize - 3); } } } } } } } private function execute_storcli($buffer, $_perccli = false) { if ($_perccli === true) { $prog = "perccli"; } else { $prog = "storcli"; } if (!empty($buffer)) { $raiddata = preg_split("/\n(?=.+\s+:\r?\n===)/", $buffer, -1, PREG_SPLIT_NO_EMPTY); $carr = array(); $cnr = -1; if (count($raiddata) > 2) foreach ($raiddata as $items) { if (preg_match("/^(.+)\s+:\r?\n===+\r?\n([\s\S]+)$/", $items, $buff)) { if ($buff[1] === "Basics") { $cnr++; } if ($cnr >= 0) { $stage = 0; $lines = preg_split('/\r?\n/', preg_replace("/, \r?\n/", ", ", $buff[2]), -1, PREG_SPLIT_NO_EMPTY); foreach ($lines as $line) { if (($line = trim($line)) !== '') { $parts = preg_split("/ = /", $line); switch ($stage) { case 0: if (count($parts) == 2) { $carr[$cnr][$buff[1]][trim($parts[0])] = trim($parts[1]); } elseif (preg_match("/^---/", $line)) { $stage = 1; } break; case 1: $args = preg_split("/ /", preg_replace("/ Next Learn$/", " NextLearn", preg_replace("/ RetentionTime /", " Retention Hours ", preg_replace("/ Size /", " Size Unit ", $line))), -1, PREG_SPLIT_NO_EMPTY); $stage = 2; break; case 2: if (preg_match("/^---/", $line)) { $stage = 3; } break; case 3: if (preg_match("/^---/", $line)) { $stage = 4; } else { $values = preg_split("/ /", preg_replace("/ (\d+\/\d+\/\d+) +(\d+:\d+:\d+)$/", " $1-$2", preg_replace("/ hours \+ /", " hours+ ", $line)), -1, PREG_SPLIT_NO_EMPTY); if (count($values) == count($args)-1) { //no Name $values[] = ""; } $diffc = count($values) - count($args); if (($diffc >= 0) && (count($values) > 4)) { $valarr = array(); for ($vnr = 0; $vnr < count($args); $vnr++) { if (($diffc == 0) || (($args[$vnr] !== "Name") && ($args[$vnr] !== "Model"))) { $valarr[$args[$vnr]] = $values[$vnr]; } else { $valarr[$args[$vnr]] = $values[$vnr]; break; } } if (($diffc > 0) && ($vnr < count($args))) { for ($enr = count($values)-1; $enr >= 0; $enr--) { if (($args[$enr-$diffc] !== "Name") && ($args[$enr-$diffc] !== "Model")) { $valarr[$args[$enr-$diffc]] = $values[$enr]; } else { break; } } if ($vnr < $enr) { for ($xnr = $vnr + 1; $xnr <= $enr; $xnr++) { $valarr[$args[$vnr]] .= " ".$values[$xnr]; } } } $carr[$cnr][$buff[1]]['values'][] = $valarr; } else { $stage = 4; } } } } } } } } foreach ($carr as $controller) if (isset($controller["Basics"]["Controller"]) && (($cnr = $controller["Basics"]["Controller"]) >= 0)) { $dg = -1; if (isset($controller["TOPOLOGY"]["values"])) foreach ($controller["TOPOLOGY"]["values"] as $topol) { if (isset($topol["Arr"]) && ($topol["Arr"] !== "-")) { if ($topol["DG"] != $dg) { $dg = $topol["DG"]; $uname = 'c'.$cnr.'u'.$dg; if (isset($controller["VD".$dg." Properties"]["Strip Size"]) && preg_match("/^(\d+)\s*(\S+)$/", $controller["VD".$dg." Properties"]["Strip Size"], $value)) { switch ($value[2]) { case 'B': $this->_result[$prog][$uname]['stripe_size'] = $value[1]; break; case 'KB': $this->_result[$prog][$uname]['stripe_size'] = 1024*$value[1]; break; case 'MB': $this->_result[$prog][$uname]['stripe_size'] = 1024*1024*$value[1]; break; case 'GB': $this->_result[$prog][$uname]['stripe_size'] = 1024*1024*1024*$value[1]; break; case 'TB': $this->_result[$prog][$uname]['stripe_size'] = 1024*1024*1024*1024*$value[1]; break; case 'PB': $this->_result[$prog][$uname]['stripe_size'] = 1024*1024*1024*1024*1024*$value[1]; } } if (isset($controller["VD".$dg." Properties"]["Active Operations"]) && preg_match("/^(.+) \((\d+)%\)/", $controller["VD".$dg." Properties"]["Active Operations"], $progarr)) { //$this->_result[$prog][$uname]['items'][$pname]['status'] = "W"; $this->_result[$prog][$uname]['action']['name'] = trim($progarr[1]); $this->_result[$prog][$uname]['action']['percent'] = trim($progarr[2]); } if (isset($controller["Basics"]["Model"])) $this->_result[$prog][$uname]['controller'] = $controller["Basics"]["Model"]; if (isset($controller["Version"]["Firmware Package Build"])) $this->_result[$prog][$uname]['firmware'] = $controller["Version"]["Firmware Package Build"]; if (isset($controller["Status"]["Controller Status"])) { $this->_result[$prog][$uname]['status'] = $controller["Status"]["Controller Status"]; } else { $this->_result[$prog][$uname]['status'] = 'Unknown'; } if (isset($controller["HwCfg"]["BBU"]) && ($controller["HwCfg"]["BBU"] === "Present")) { if (isset($controller["BBU_Info"]["values"][0])) { $bbuinfo = "BBU_Info"; } elseif (isset($controller["Cachevault_Info"]["values"][0])) { $bbuinfo = "Cachevault_Info"; } else { $bbuinfo = ""; } if ($bbuinfo !== "") { if (isset($controller[$bbuinfo]["values"][0]["State"])) { if (($state = $controller[$bbuinfo]["values"][0]["State"]) === "Optimal") { $this->_result[$prog][$uname]['battery'] = "good"; } else { $this->_result[$prog][$uname]['battery'] = $state; } } if (isset($controller[$bbuinfo]["values"][0]["Temp"]) && preg_match("/^(\d+)C$/", $controller[$bbuinfo]["values"][0]["Temp"], $batt)) { $this->_result[$prog][$uname]['batttemp'] = $batt[1]; } } } if (isset($controller["Capabilities"]["RAID Level Supported"])) $this->_result[$prog][$uname]['supported'] = $controller["Capabilities"]["RAID Level Supported"]; if (isset($controller["HwCfg"]["ROC temperature(Degree Celsius)"])) $this->_result[$prog][$uname]['temperature'] = $controller["HwCfg"]["ROC temperature(Degree Celsius)"]; if (isset($controller["HwCfg"]["On Board Memory Size"]) && preg_match("/^(\d+)\s*(\S+)$/", $controller["HwCfg"]["On Board Memory Size"], $value)) { switch ($value[2]) { case 'B': $this->_result[$prog][$uname]['cache_size'] = $value[1]; break; case 'KB': $this->_result[$prog][$uname]['cache_size'] = 1024*$value[1]; break; case 'MB': $this->_result[$prog][$uname]['cache_size'] = 1024*1024*$value[1]; break; case 'GB': $this->_result[$prog][$uname]['cache_size'] = 1024*1024*1024*$value[1]; break; case 'TB': $this->_result[$prog][$uname]['cache_size'] = 1024*1024*1024*1024*$value[1]; break; case 'PB': $this->_result[$prog][$uname]['cache_size'] = 1024*1024*1024*1024*1024*$value[1]; } } if (isset($controller["HwCfg"]["CacheVault Flash Size"]) && preg_match("/^([\d\.]+)\s*(\S+)$/", $controller["HwCfg"]["CacheVault Flash Size"], $value)) { switch ($value[2]) { case 'B': $this->_result[$prog][$uname]['cachevault_size'] = $value[1]; break; case 'KB': $this->_result[$prog][$uname]['cachevault_size'] = 1024*$value[1]; break; case 'MB': $this->_result[$prog][$uname]['cachevault_size'] = 1024*1024*$value[1]; break; case 'GB': $this->_result[$prog][$uname]['cachevault_size'] = 1024*1024*1024*$value[1]; break; case 'TB': $this->_result[$prog][$uname]['cachevault_size'] = 1024*1024*1024*1024*$value[1]; break; case 'PB': $this->_result[$prog][$uname]['cachevault_size'] = 1024*1024*1024*1024*1024*$value[1]; } } if (isset($topol["Size"]) && isset($topol["Unit"])) { switch ($topol["Unit"]) { case 'B': $this->_result[$prog][$uname]['capacity'] = $topol["Size"]; break; case 'KB': $this->_result[$prog][$uname]['capacity'] = 1024*$topol["Size"]; break; case 'MB': $this->_result[$prog][$uname]['capacity'] = 1024*1024*$topol["Size"]; break; case 'GB': $this->_result[$prog][$uname]['capacity'] = 1024*1024*1024*$topol["Size"]; break; case 'TB': $this->_result[$prog][$uname]['capacity'] = 1024*1024*1024*1024*$topol["Size"]; break; case 'PB': $this->_result[$prog][$uname]['capacity'] = 1024*1024*1024*1024*1024*$topol["Size"]; } } if (isset($topol["PDC"])) { switch ($topol["PDC"]) { case 'dflt': $this->_result[$prog][$uname]['diskcache'] = "default"; break; case 'dsbl': $this->_result[$prog][$uname]['diskcache'] = "disabled"; break; case 'enbl': $this->_result[$prog][$uname]['diskcache'] = "enabled"; break; default: $this->_result[$prog][$uname]['diskcache'] = strtolower($topol["PDC"]); } } if (isset($controller["VD LIST"]["values"])) foreach ($controller["VD LIST"]["values"] as $vdlist) { if (isset($vdlist["DG/VD"])) { if ($vdlist["DG/VD"] === $dg."/".$dg) { if (isset($vdlist["TYPE"])) { $this->_result[$prog][$uname]['items'][-1]['parentid'] = 0; $this->_result[$prog][$uname]['level'] = $vdlist["TYPE"]; if (isset($vdlist["Name"]) && (trim($vdlist["Name"]) !== "")) { $this->_result[$prog][$uname]['items'][-1]['name'] = trim($vdlist["Name"]); } else { $this->_result[$prog][$uname]['items'][-1]['name'] = $vdlist["TYPE"]; } if (isset($vdlist["State"])) { switch ($vdlist["State"]) { case 'Rec': $this->_result[$prog][$uname]['status'] = "Recovery"; $this->_result[$prog][$uname]['items'][-1]['status'] = "W"; break; case 'OfLn': $this->_result[$prog][$uname]['status'] = "OffLine"; $this->_result[$prog][$uname]['items'][-1]['status'] = "F"; break; case 'Pdgd': $this->_result[$prog][$uname]['status'] = "Partially Degraded"; $this->_result[$prog][$uname]['items'][-1]['status'] = "W"; break; case 'Dgrd': $this->_result[$prog][$uname]['status'] = "Degraded"; $this->_result[$prog][$uname]['items'][-1]['status'] = "W"; break; case 'Optl': $this->_result[$prog][$uname]['status'] = "Optimal"; $this->_result[$prog][$uname]['items'][-1]['status'] = "ok"; break; default: $this->_result[$prog][$uname]['status'] = "Unknown"; $this->_result[$prog][$uname]['items'][-1]['status'] = "F"; } } if (isset($vdlist["Cache"])) { $ctype = $vdlist["Cache"]; if (preg_match("/^NR/", $ctype)) $this->_result[$prog][$uname]['readpolicy'] = "noReadAhead"; elseif (preg_match("/^R/", $ctype)) $this->_result[$prog][$uname]['readpolicy'] = "readAhead"; elseif (preg_match("/^AR/", $ctype)) $this->_result[$prog][$uname]['readpolicy'] = "adaptiveReadAhead"; if (preg_match("/WT[DC]$/", $ctype)) $this->_result[$prog][$uname]['writepolicy'] = "writeThrough"; elseif (preg_match("/WB[DC]$/", $ctype)) $this->_result[$prog][$uname]['writepolicy'] = "writeBack"; elseif (preg_match("/FWB[DC]$/", $ctype)) $this->_result[$prog][$uname]['writepolicy'] = "writeBackForce"; } } break; } } else { break; } } } elseif (($dg >= 0) && isset($topol["Row"]) && ($topol["Row"] !== '-') /*&& isset($topol["DID"]) && ($topol["DID"] !== '-'))*/) { $uname = 'c'.$cnr.'u'.$dg; $this->_result[$prog][$uname]['items'][$topol["DID"]]['parentid'] = 1; $this->_result[$prog][$uname]['items'][$topol["DID"]]['name'] = $uname.'p'.($topol["Row"]); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS && isset($topol["Size"]) && isset($topol["Unit"])) { switch ($topol["Unit"]) { case 'B': $this->_result[$prog][$uname]['items'][$topol["DID"]]['capacity'] = $topol["Size"]; break; case 'KB': $this->_result[$prog][$uname]['items'][$topol["DID"]]['capacity'] = 1024*$topol["Size"]; break; case 'MB': $this->_result[$prog][$uname]['items'][$topol["DID"]]['capacity'] = 1024*1024*$topol["Size"]; break; case 'GB': $this->_result[$prog][$uname]['items'][$topol["DID"]]['capacity'] = 1024*1024*1024*$topol["Size"]; break; case 'TB': $this->_result[$prog][$uname]['items'][$topol["DID"]]['capacity'] = 1024*1024*1024*1024*$topol["Size"]; break; case 'PB': $this->_result[$prog][$uname]['items'][$topol["DID"]]['capacity'] = 1024*1024*1024*1024*1024*$topol["Size"]; } } if (isset($topol["DID"])) { if ($topol["DID"] === '-') { if (isset($topol["State"]) && ($topol["State"] === "Msng")) { $this->_result[$prog][$uname]['items'][$topol["DID"]]['info'] = "Missing"; $this->_result[$prog][$uname]['items'][$topol["DID"]]['status'] = "E"; $this->_result[$prog][$uname]['items'][$topol["DID"]]['type'] = "disk"; } } elseif (isset($controller["PD LIST"]["values"])) foreach ($controller["PD LIST"]["values"] as $pdlist) { if (isset($pdlist["DID"])) { if ($pdlist["DID"] === $topol["DID"]) { if (isset($pdlist["State"])) { switch ($pdlist["State"]) { case 'DHS': $this->_result[$prog][$uname]['items'][$topol["DID"]]['info'] = "Dedicated Hot Spare"; $this->_result[$prog][$uname]['items'][$topol["DID"]]['status'] = "S"; break; case 'UGood': $this->_result[$prog][$uname]['items'][$topol["DID"]]['info'] = "Unconfigured Good"; $this->_result[$prog][$uname]['items'][$topol["DID"]]['status'] = "U"; break; case 'GHS': $this->_result[$prog][$uname]['items'][$topol["DID"]]['info'] = "Global Hotspare"; $this->_result[$prog][$uname]['items'][$topol["DID"]]['status'] = "S"; break; case 'UBad': $this->_result[$prog][$uname]['items'][$topol["DID"]]['info'] = "Unconfigured Bad"; $this->_result[$prog][$uname]['items'][$topol["DID"]]['status'] = "F"; break; case 'Onln': $this->_result[$prog][$uname]['items'][$topol["DID"]]['info'] = "Online"; $this->_result[$prog][$uname]['items'][$topol["DID"]]['status'] = "ok"; break; case 'Offln': $this->_result[$prog][$uname]['items'][$topol["DID"]]['info'] = "Offline"; $this->_result[$prog][$uname]['items'][$topol["DID"]]['status'] = "F"; break; case 'Rbld': $this->_result[$prog][$uname]['items'][$topol["DID"]]['info'] = "Rebuild"; $this->_result[$prog][$uname]['items'][$topol["DID"]]['status'] = "W"; break; default: $this->_result[$prog][$uname]['items'][$topol["DID"]]['info'] = "Unknown"; $this->_result[$prog][$uname]['items'][$topol["DID"]]['status'] = "F"; } if (isset($pdlist["Sp"])) { switch ($pdlist["Sp"]) { case 'U': $this->_result[$prog][$uname]['items'][$topol["DID"]]['info'] .= ", Spun Up"; break; case 'D': $this->_result[$prog][$uname]['items'][$topol["DID"]]['info'] .= ", Spun Down"; } } } if (isset($pdlist["Med"])) { switch ($pdlist["Med"]) { case 'HDD': $this->_result[$prog][$uname]['items'][$topol["DID"]]['type'] = "disk"; break; case 'SSD': $this->_result[$prog][$uname]['items'][$topol["DID"]]['type'] = "ssd"; } } if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if (isset($pdlist["Model"])) $this->_result[$prog][$uname]['items'][$topol["DID"]]['model'] = $pdlist["Model"]; if (isset($pdlist["Intf"])) $this->_result[$prog][$uname]['items'][$topol["DID"]]['bus'] = $pdlist["Intf"]; } break; } } else { break; } } } } } } if (isset($controller["PD LIST"]["values"])) foreach ($controller["PD LIST"]["values"] as $pdlist) { if (isset($pdlist["DG"]) && preg_match("/\D/", $pdlist["DG"])) { if (isset($pdlist["State"]) && isset($pdlist["DID"])) { $cname = ''; switch ($pdlist["State"]) { case 'DHS': $cname = 'c'.$cnr.'-hotspare'; $this->_result[$prog][$cname]['items'][-1]['status'] = "S"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['info'] = "Dedicated Hot Spare"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['status'] = "S"; break; case 'UGood': $cname = 'c'.$cnr.'-unconfigured'; $this->_result[$prog][$cname]['items'][-1]['status'] = "U"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['info'] = "Unconfigured Good"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['status'] = "U"; $this->_result[$prog][$cname]['status'] = "Unconfigured"; break; case 'GHS': $cname = 'c'.$cnr.'-hotspare'; $this->_result[$prog][$cname]['items'][-1]['status'] = "S"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['info'] = "Global Hotspare"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['status'] = "S"; $this->_result[$prog][$cname]['status'] = "Hotspare"; break; case 'UBad': $cname = 'c'.$cnr.'-unconfigured'; $this->_result[$prog][$cname]['items'][-1]['status'] = "U"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['info'] = "Unconfigured Bad"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['status'] = "F"; $this->_result[$prog][$cname]['status'] = "Unconfigured"; break; /* case 'Onln': $cname = 'c'.$cnr.'-online'; $this->_result[$prog][$cname]['items'][-1]['status'] = "ok"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['info'] = "Online"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['status'] = "ok"; $this->_result[$prog][$cname]['status'] = "Online"; break;*/ case 'Offln': $cname = 'c'.$cnr.'-offine'; $this->_result[$prog][$cname]['items'][-1]['status'] = "F"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['info'] = "Offline"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['status'] = "F"; $this->_result[$prog][$cname]['status'] = "Offline"; break; case 'JBOD': $cname = 'c'.$cnr.'-jbod'; $this->_result[$prog][$cname]['items'][-1]['status'] = "ok"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['info'] = "JBOD"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['status'] = "ok"; $this->_result[$prog][$cname]['level'] = "JBOD"; $this->_result[$prog][$cname]['status'] = "JBOD"; break; default: $cname = 'c'.$cnr.'-unknown'; $this->_result[$prog][$cname]['items'][-1]['status'] = "F"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['info'] = "Unknown"; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['status'] = "F"; $this->_result[$prog][$cname]['status'] = "Unknown"; } if ($cname !== '') { $this->_result[$prog][$cname]['items'][-1]['parentid'] = 0; $this->_result[$prog][$cname]['items'][-1]['name'] = $this->_result[$prog][$cname]['status']; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['parentid'] = 1; $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['name'] = 'c'.$cnr.'p'.$pdlist["DID"]; if (isset($pdlist["Med"])) { switch ($pdlist["Med"]) { case 'HDD': $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['type'] = "disk"; break; case 'SSD': $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['type'] = "ssd"; } } if (isset($pdlist["Sp"])) { switch ($pdlist["Sp"]) { case 'U': $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['info'] .= ", Spun Up"; break; case 'D': $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['info'] .= ", Spun Down"; } } if (isset($controller["Basics"]["Model"])) $this->_result[$prog][$cname]['controller'] = $controller["Basics"]["Model"]; if (isset($controller["Version"]["Firmware Package Build"])) $this->_result[$prog][$cname]['firmware'] = $controller["Version"]["Firmware Package Build"]; if (isset($controller["Status"]["Controller Status"])) { $this->_result[$prog][$cname]['status'] = $controller["Status"]["Controller Status"]; } else { $this->_result[$prog][$cname]['status'] = 'Unknown'; } if (isset($controller["HwCfg"]["BBU"]) && ($controller["HwCfg"]["BBU"] === "Present")) { if (isset($controller["BBU_Info"]["values"][0])) { $bbuinfo = "BBU_Info"; } elseif (isset($controller["Cachevault_Info"]["values"][0])) { $bbuinfo = "Cachevault_Info"; } else { $bbuinfo = ""; } if ($bbuinfo !== "") { if (isset($controller[$bbuinfo]["values"][0]["State"])) { if (($state = $controller[$bbuinfo]["values"][0]["State"]) === "Optimal") { $this->_result[$prog][$cname]['battery'] = "good"; } else { $this->_result[$prog][$cname]['battery'] = $state; } } if (isset($controller[$bbuinfo]["values"][0]["Temp"]) && preg_match("/^(\d+)C$/", $controller[$bbuinfo]["values"][0]["Temp"], $batt)) { $this->_result[$prog][$cname]['batttemp'] = $batt[1]; } } } if (isset($controller["Capabilities"]["RAID Level Supported"])) $this->_result[$prog][$cname]['supported'] = $controller["Capabilities"]["RAID Level Supported"]; if (isset($controller["HwCfg"]["On Board Memory Size"]) && preg_match("/^(\d+)\s*(\S+)$/", $controller["HwCfg"]["On Board Memory Size"], $value)) { switch ($value[2]) { case 'B': $this->_result[$prog][$cname]['cache_size'] = $value[1]; break; case 'KB': $this->_result[$prog][$cname]['cache_size'] = 1024*$value[1]; break; case 'MB': $this->_result[$prog][$cname]['cache_size'] = 1024*1024*$value[1]; break; case 'GB': $this->_result[$prog][$cname]['cache_size'] = 1024*1024*1024*$value[1]; break; case 'TB': $this->_result[$prog][$cname]['cache_size'] = 1024*1024*1024*1024*$value[1]; break; case 'PB': $this->_result[$prog][$cname]['cache_size'] = 1024*1024*1024*1024*1024*$value[1]; } } if (isset($controller["HwCfg"]["CacheVault Flash Size"]) && preg_match("/^([\d\.]+)\s*(\S+)$/", $controller["HwCfg"]["CacheVault Flash Size"], $value)) { switch ($value[2]) { case 'B': $this->_result[$prog][$cname]['cachevault_size'] = $value[1]; break; case 'KB': $this->_result[$prog][$cname]['cachevault_size'] = 1024*$value[1]; break; case 'MB': $this->_result[$prog][$cname]['cachevault_size'] = 1024*1024*$value[1]; break; case 'GB': $this->_result[$prog][$cname]['cachevault_size'] = 1024*1024*1024*$value[1]; break; case 'TB': $this->_result[$prog][$cname]['cachevault_size'] = 1024*1024*1024*1024*$value[1]; break; case 'PB': $this->_result[$prog][$cname]['cachevault_size'] = 1024*1024*1024*1024*1024*$value[1]; } } if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if (isset($pdlist["Size"]) && isset($pdlist["Unit"])) { switch ($pdlist["Unit"]) { case 'B': $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['capacity'] = $pdlist["Size"]; break; case 'KB': $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['capacity'] = 1024*$pdlist["Size"]; break; case 'MB': $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['capacity'] = 1024*1024*$pdlist["Size"]; break; case 'GB': $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['capacity'] = 1024*1024*1024*$pdlist["Size"]; break; case 'TB': $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['capacity'] = 1024*1024*1024*1024*$pdlist["Size"]; break; case 'PB': $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['capacity'] = 1024*1024*1024*1024*1024*$pdlist["Size"]; } } if (isset($pdlist["Model"])) $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['model'] = $pdlist["Model"]; if (isset($pdlist["Intf"])) $this->_result[$prog][$cname]['items'][$pdlist["DID"]]['bus'] = $pdlist["Intf"]; } } } } } } } } /** * doing all tasks to get the required informations that the plugin needs * result is stored in an internal array
    the array is build like a tree, * so that it is possible to get only a specific process with the childs * * @return void */ public function execute() { if (count($this->_filecontent)>0) { foreach ($this->prog_items as $item) if (isset($this->_filecontent[$item])) { if ($item !== 'idrac') { if ((($buffer = $this->_filecontent[$item]) !== null) && (($buffer = trim($buffer)) != "")) { switch ($item) { case 'mdstat': $this->execute_mdstat($buffer); break; case 'dmraid': $this->execute_dmraid($buffer); break; case 'megactl': $this->execute_megactl($buffer, false); break; case 'megasasctl': $this->execute_megactl($buffer, true); break; case 'megaclisas-status': $this->execute_status($buffer, false); break; case '3ware-status': $this->execute_status($buffer, true); break; case 'graid': $this->execute_graid($buffer); break; case 'zpool': $this->execute_zpool($buffer); break; case 'storcli': $this->execute_storcli($buffer, false); break; case 'perccli': $this->execute_storcli($buffer, true); } } } else { if (is_array($this->_filecontent[$item])) { foreach ($this->_filecontent[$item] as $device=>$buffer) if (($buffer = trim($buffer)) != "") { $this->execute_idrac($buffer, /*'idrac-'.*/$device); } } } } } } /** * generates the XML content for the plugin * * @return SimpleXMLElement entire XML content for the plugin */ public function xml() { if (empty($this->_result)) { return $this->xml->getSimpleXmlElement(); } $hideRaids = array(); if (defined('PSI_PLUGIN_RAID_HIDE_DEVICES') && is_string(PSI_PLUGIN_RAID_HIDE_DEVICES)) { if (preg_match(ARRAY_EXP, PSI_PLUGIN_RAID_HIDE_DEVICES)) { $hideRaids = eval(PSI_PLUGIN_RAID_HIDE_DEVICES); } else { $hideRaids = array(PSI_PLUGIN_RAID_HIDE_DEVICES); } } foreach ($this->prog_items as $item) if (isset($this->_result[$item])) { foreach ($this->_result[$item] as $key=>$device) { if (!in_array($key, $hideRaids, true)) { $dev = $this->xml->addChild("Raid"); $dev->addAttribute("Device_Name", $key); $dev->addAttribute("Program", $item); if (isset($device['level'])) $dev->addAttribute("Level", strtolower($device["level"])); $dev->addAttribute("Status", strtolower($device["status"])); if (isset($device['name'])) $dev->addAttribute("Name", $device["name"]); if (isset($device['capacity'])) $dev->addAttribute("Capacity", $device["capacity"]); if (isset($device['stride'])) $dev->addAttribute("Stride", $device["stride"]); if (isset($device['subsets'])) $dev->addAttribute("Subsets", $device["subsets"]); if (isset($device['devs'])) $dev->addAttribute("Devs", $device["devs"]); if (isset($device['spares'])) $dev->addAttribute("Spares", $device["spares"]); if (isset($device['chunk_size'])) $dev->addAttribute("Chunk_Size", $device["chunk_size"]); if (isset($device['stripe_size'])) $dev->addAttribute("Stripe_Size", $device["stripe_size"]); if (isset($device['pers_superblock'])) $dev->addAttribute("Persistend_Superblock", $device["pers_superblock"]); if (isset($device['algorithm'])) $dev->addAttribute("Algorithm", $device["algorithm"]); if (isset($device['registered'])) $dev->addAttribute("Disks_Registered", $device["registered"]); if (isset($device['active'])) $dev->addAttribute("Disks_Active", $device["active"]); if (isset($device['controller'])) $dev->addAttribute("Controller", $device["controller"]); if (isset($device['firmware'])) $dev->addAttribute("Firmware", $device["firmware"]); if (isset($device['temperature'])) $dev->addAttribute("Temperature", $device["temperature"]); if (isset($device['battery'])) $dev->addAttribute("Battery", $device["battery"]); if (isset($device['battvolt'])) $dev->addAttribute("Batt_Volt", $device["battvolt"]); if (isset($device['batttemp'])) $dev->addAttribute("Batt_Temp", $device["batttemp"]); if (isset($device['supported'])) $dev->addAttribute("Supported", $device["supported"]); if (isset($device['readpolicy'])) $dev->addAttribute("ReadPolicy", $device["readpolicy"]); if (isset($device['writepolicy'])) $dev->addAttribute("WritePolicy", $device["writepolicy"]); if (isset($device['cache_size'])) $dev->addAttribute("Cache_Size", $device["cache_size"]); if (isset($device['cachevault_size'])) $dev->addAttribute("Cachevault_Size", $device["cachevault_size"]); if (isset($device['diskcache'])) $dev->addAttribute("DiskCache", $device["diskcache"]); if (isset($device['bad_blocks'])) $dev->addAttribute("Bad_Blocks", $device["bad_blocks"]); if (isset($device['action'])) { $action = $dev->addChild("Action"); $action->addAttribute("Name", $device['action']['name']); if (isset($device['action']['percent'])) $action->addAttribute("Percent", $device['action']['percent']); if (isset($device['action']['finish_time'])) $action->addAttribute("Time_To_Finish", $device['action']['finish_time']); if (isset($device['action']['finish_unit'])) $action->addAttribute("Time_Unit", $device['action']['finish_unit']); } $disks = $dev->addChild("RaidItems"); if (isset($device['items']) && (sizeof($device['items'])>0)) foreach ($device['items'] as $disk) { if (isset($disk['name'])) { $disktemp = $disks->addChild("Item"); $disktemp->addAttribute("Name", $disk['name']); // if (isset($disk['raid_index'])) $disktemp->addAttribute("Index", $disk['raid_index']); if (isset($disk['parentid'])) $disktemp->addAttribute("ParentID", $disk['parentid']); if (isset($disk['type'])) $disktemp->addAttribute("Type", $disk['type']); // if (in_array(strtolower($device["status"]), array('ok', 'optimal', 'active', 'online', 'degraded'))) { if (isset($disk['status'])) $disktemp->addAttribute("Status", $disk['status']); //} else { // $disktemp->addAttribute("Status", "W"); //} if (isset($disk['info'])) $disktemp->addAttribute("Info", $disk['info']); if (defined('PSI_SHOW_DEVICES_INFOS') && PSI_SHOW_DEVICES_INFOS) { if (isset($disk['bus'])) $disktemp->addAttribute("Bus", $disk['bus']); if (isset($disk['capacity'])) $disktemp->addAttribute("Capacity", $disk['capacity']); if (isset($disk['model'])) $disktemp->addAttribute("Model", $disk['model']); if (isset($disk['temperature'])) $disktemp->addAttribute("Temperature", $disk['temperature']); if (defined('PSI_SHOW_DEVICES_SERIAL') && PSI_SHOW_DEVICES_SERIAL) { if (isset($disk['serial'])) $disktemp->addAttribute("Serial", $disk['serial']); } } } } } } $this->_result[$item] = array(); // clear preventing duplicate items } return $this->xml->getSimpleXmlElement(); } } phpsysinfo-3.4.4/plugins/raid/css/000077500000000000000000000000001467431054600171265ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/raid/css/raid.css000066400000000000000000000010211467431054600205510ustar00rootroot00000000000000/* $Id: raid.css 661 2012-08-27 11:26:39Z namiltd $ */ .plugin_raid_biun { text-align: center; margin-bottom: 5px; margin-left: 10px; _margin-left: 5px; /* ie6 */ margin-right: 10px; _margin-right: 5px; /* ie6 */ float: left; } .plugin_raid_item { border: solid; border-width: 2px; border-radius: 5px; text-align: center; margin: 10px; _margin: 10px 10px 10px 5px; /* ie6 */ _padding-bottom: 8px; /* ie6 */ float: left; } img.plugin_raid_biun { margin: auto; } phpsysinfo-3.4.4/plugins/raid/gfx/000077500000000000000000000000001467431054600171225ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/raid/gfx/error.png000066400000000000000000000070411467431054600207630ustar00rootroot00000000000000PNG  IHDR<<:r IDATh͛yly?!R$uZe|}IgX$uɐaG2햶K$(ņ: 놴I CdU#|Ȗuز$ E^R6%%i_(>y~縷Rr3!X jj_VEeG'0-2&- $'FG}i\ <~Fjk#kCuHX|h2-fIbq+10oA)K Ŏ[m-FB}:X&d`H["44<^PtTK}:;7|ը:Z~-ʖe4L EEh "pl._lع3~~uB^?F444 J[K&1FiOP9〔H@UᩯK;|z+~?%dmҪ˞6oۈ s2i TRI8(&*]|aϛo+rSkP=Fh)Ƴa{ßy|?W|k:dtlqߊZ:={XzS]cw,eUo@xgy#?|/9О]m+?.IPh*x{{_zr8P1w:WE\eF\_!4+Ş4ٿ6eˏ6[Njrha%H'gHoUň҂ZW{G Ow I1dYԜ[̎%G*dٳ}wb/jSnZw0Kʯ2@ڞ?.*.GbUݠRMNnU3&$/, Oߺ]0I%A[OZQ{2B -7ٶee 4Ȣ\!Ý757U-ϕgsyNd:V^u@&fY$ՍXX[2cVW_lپ9EZfYGI)(LH'@)Up֮nlڨ>^2p+B0S\2J)Ǜ3H+4>x_Jxsu+6H_\i.AZ%/>&m+kݵ_[;/5bY XTT+aVFj˜dey(H+4C86*SzZB'hXڵYoQP]5aE*2e3.])YPsljwf]Q`Φ0d%W|yL= \ ^逪a y՚VTT`YX-PIvXBՑiPKBtv6HHK;Ln`[iC71-P`iX >WTT;Yy>.T@"|]W1`  ii 8]Q%H }ȴyXH#L!CzD4apzĶiRV!p`MZ`BzLL\q8ɑt2ii]FEw 2H;O+˨d-P*%U>mmR/QXlid2LM!ʹr=>c Ԏ͈Pnwř1H 7?k' >'=~ߟDtԕoo`ҀM~4xyr&iw"*Mx[)"Ҋ硗Q q\DIcNEomIPaqaFiSז+8wqwm.2^8ujHf*<(Vݚ9~Dxj9sJC3c?9~ s R-Oe[X's=pbzjw{1Rߤ(>qkmDv_Dc*m"VS]Ԗw= U-WG} )EY᣽z?x6lB ˛QvʄAylz1ؒR#CǻFmيy*FʜT|[r$<>%ŏ'G2睞s1;vTqЖlL;9å:r^|`_Q9&{' Vˢ̞ kmjg!5C|v4L%NB(wjy:6o?8_$o6쭱 qmv>hxM( AfȒu_ ZЏ;@1>oE%ɚ7feI9z6rӟ}ۗڎ7HcD8iZ%D6[1)>z$ @/'z?|OD`9|1Gܑ|wc#_\VgUg#S_)4vz4n+ BQP4 _ZpH\蛤Tw[Qq=hRs"g{PgZ/[9LuOǣJ4T$K LfD)GvXo~;lVTp& * ;-a6,T@誮kjZiXLpypI<~V90T8Ge}P5ܳ^t`_NU4Xdve6f`p{^zケ` @E s?m`I0#s,3ob/w.B8tC˞닾kʁTs`0܀pAVsJK)|%s_yRNQ >Wqh1U9`E䁖sʎ9gwJaYor*y\9ץ^[ݒX|n,g0 IIENDB`phpsysinfo-3.4.4/plugins/raid/gfx/harddrivefail.png000066400000000000000000000075201467431054600224400ustar00rootroot00000000000000PNG  IHDR<<:rIDATh[ypUtf&3x! 9\!A%EЭ-vڪtk]tղv\Yܲܪ,%X " b !Iȝ= dvtK~D3MߧÁ1 x0aÀ+yiժU]]]A"kDϯU]]}zkM477CJ%_t{87/sϞ=ң ttt2e}u?F&5k,u9 =%\`(wp<{D>f@D[0uT-2 2qRUU3f %2<~'H 3zW 't=3g Bڪv)Ǔc9q<YӦMCNNNg^1{N/9s'.`v:UAeB,-ٯp&&`YY읥6) StB!Ǻ;4իWyUN<ڝ TxRߋj5%|bR`i_4gvf`6+5VO&jhx5_1AϞ߃`(ya$jU GH~s#t4>O8ULkXQM^s_~#&B 8E)]M}]fw5\=H?=2x6 y0!a4e]HQctqX-d%֦\CںEb ?*O.Ƞguym{Z޵cyy aa*RLȌ?xd+f0gGv@I;{v;j`;%yttT.B^h#}y3B}J:,x~ ūd/:RXnR)=c,^5AQ0-JR12MaٰG㏿DQ:CMÂXq}x>%~ Rw.ն}S&BT7#rf:pOFڳ]~ oB]PCDanXH2{ =kL[G~(V)IU4:[DL-7#k9kF h7#_C1|}R)J|M$d2IY^*E9E⁎C2H8D1gw(ؿ O,ᇲ;Vµm"DmoX^ɪHZ K\;)DMg/N-[ ?z>}Mm&uŊv]Kj= Csi0Q55Y+ RSjiD@[?fg~y8ӋՍDsivzaƍ}aeֆ8͡eӔk(}֩e@^Ogf8}}vw#MbZWZ:_ْ-\1_Y{&ߥ9VӋ4G[,l~#P dС1ޮMG "KZM _52$:KtmfN*4mX<+ Wlâ25-o|զ>VXL \!3GHa.$?#sL9"S໾8%U̟B| KVMS\LEv2 @7aÀ?TIENDB`phpsysinfo-3.4.4/plugins/raid/gfx/harddriveok.png000066400000000000000000000071331467431054600221360ustar00rootroot00000000000000PNG  IHDR<<:r"IDATh[yPU<PA( qJĈi&fW't4$1d3i֦il6[&$b4A↲,E[z;뽏!53Μ{9ۿs8N-~d}|}?C?n:3FFF(K\x| <>|pxi׌7شiӳ'BCC>>>NwqJVxpp~{p~~_۷ 9Ar}o)=j`8p`suu+֮IR0yaa!V\ RtZ=#())A@@I /ʤdժUX,NsۙhkTǨ4S{#qjÒS^^=znR%@>h"mdd$$y㠩}q mc&1jŊ${4۷o70,^zX~^Sh^,[ L ׯ__=i֭[g8Ңq1B}ü'p 34ЈS"99~l2U2!-Bfe`"+217gg Hh>$zַ䭑Pg~gFO25kHLpGC K$8.Jd|'Glll_3>ʝTs5)wXMz˸ػ1&&f:Ÿbj!FT_{WJU-yQJ0{iy>bBaIITԤFUA)QqE[5cÆ )^^n],+VwI8</z_ynFnc'\h>'ZYBD3cۂ J͛nU&;ÓEjU{ z"eW}8r=Fr^L3 pL{3PtI] D ˼FjRKPɖX` ){9i)V>T``zvy\\ܢ4Y9O6)4OM"(5@JyX@`` f3g@d-Ƒ3/9 K ~ƆQLr%K.aw @NRL<-ʒvIuz&jJ-ԈadNҺxS U#{I.ZD̃]#(Etn_Vׯ_\#%#,(Q2B}65"HܣP1.s&%,m hx #NXfh y !an$V.֌XOf*)>>>9,YNHI v$mi]eMy]Z%4V+:;;Ȍp,K N$ 58_{إ;v0(0l[%)3u`PQ%On=I2'X2t&·οy50|t~#!E.ڋHhgΩ_Φr৞zgKZHu<)វ|CKMQ{VrE;0hDBtZ?N2pq~%d2Sfë$ɀ$9RI5Fɷ8V|z+06HϬ!FK+CcTRibԓ$ewr0ތ?]w ØMeL89 FfZzt¾uiE5^qn'R+cWh<$u}Óq/0u8Gu >ͨCDԲ)%T@왗ʑ7A@CS+Wg{7Z7'v^UK;$:=rwŘ+2S/ߗ44'DRd-^S9trTQ9ظ!I8^q GSKQJ9ՉKC'63Cf5)7O!%1v.ژ*05S{13ң/*U!J; c~w5gp[b9𥳐,eHMHEKƌ({!L7qa7Zg irY{G*AȩdTTɷv>*σy^,jGCo %~iLD{5)Jq@܍ Ex4B"Y `vʪBc!FZC3(4$V ߬)O5Dm>6lT?o(w ᨿQ3ѳTlÙ".*ݷ+HVډ1qR^ƻzWGˊvΥ*-YO[R6g$v%c<$Ǭǥk3buLmYLǝhrUCóY1w2;{ѻ$"<;"SJR)vXPP҉'E'D˞Z~leGqM/IFڼpI¤')}_Q@aosx'ޓ7%s됙|krwG9]j>!OAZӁ"s͎>hXqN σj Xfp8Ѵ)8_XV~qu:z x^9X0K6/+v&<˭';# o~~gۖN:,@u*>!&X/ҹˋŅ# 4]ᚚ^ޥ7c$.1^o_ mڽ3e.A.F܆5wkZY )4T!H!{4ACXs4T?'z:*c&[aIENDB`phpsysinfo-3.4.4/plugins/raid/gfx/harddrivespare.png000066400000000000000000000062121467431054600226340ustar00rootroot00000000000000PNG  IHDR<<:rsRGBgAMA a pHYsodtEXtSoftwarepaint.net 4.0.84N IDAThCWp@1˲`o~&($",!`?P@e(lr9s9gs9=mWQϓ`ު03=3y3|2X[x coa,-e07P˔);Pl٨+W.Pʗ/ }冷0ժUWbbFNOOդI/iiiy"555*7΁Y#cq?0U5ll۶ܾ}ܹsn֭[ٸyf6nܸa~zk׮Y^ʕ+˗/[.]ŋʏ?nڵkgb [####_Ŋ͞=[yyyaGe;[ݻg{)%ļ~9rHOL1%%4 sܹHɾHW.\v˽pY=sӖSNE8yĉzرc/_;هЇT:[nkl]I.>yMp_T͒%KL*UNɼQHc0HݺuH_ٲey g/UZ"̖2d3֨=0j6kf@Y JC Lcr0Ẁfb- "‹G-&qRL*$Ip-+5NEq&,3޽T^IRRO50.2~SFgdI QtE)}* Þ89fC6mtLEVQm;t ʨ0r UXZDwbF[ȢD߾}eD+:w4eAqEd]锍7ssu-:u|,k̀,!Wue٧:'##ö;vX+–yu>e) Q͛7 oa>Mc*-7za>Gī#rf^kd4ƻ,(L1x`{0?0+{ g Ez%KT&*L:+A噢U&xdf_+L0'<",%JRS'D*Woذ6@0 1h-\^f*7|l|P]i? +Vk>0kRW-%N8p5+[va6ol=HBWR {W(rlyE[|S”iaDl%\H)ThѯD&-*'o%{T% Q$%׫3NJezEZZg  pdf-.ŹU~闋:0tTݻO:^پ}a9 ^2za&t$Y G<%%?y&&&۩޽͐u L\kVf80CɆ Kx$zȐ! @ Ǯ xMBϞ=+C׮]Mjj*o<7.. ~UwJ95->>~  G,Wr,N(r R1ᨐHG@^CY: jժ3d)--M6Y "g—BQg7υ_%k85^꠮?~$&m(00Y3ᑀI@P?,Ih9pJ}*PGuL<^c4珀\ퟯo02X[x coa,-]L.49,IENDB`phpsysinfo-3.4.4/plugins/raid/gfx/harddriveunc.png000066400000000000000000000100621467431054600223050ustar00rootroot00000000000000PNG  IHDR<<:rgAMA a cHRMz&u0`:pQ<bKGD pHYsodIDATh{l\U~?ܱ=cq<8!$B($)6ajVEBS nV-hݲ $deqyy}1so3 YJG>ܹk]|m_y駟nfQB,BofYVgntFݻwROZZZ P_Z2͖JD"wN8OKR?yWGnzcպ'$%z?<~?:8Οٳx˲u41MX,eYbWoz~v~7MR<E&''4-ԳEy!D8Wk+m~>Rdgg't]בR--3&_h8sK-w˲۹sgH]]o]UfQfpp .e'''dffB"`㚦:id?pxQm~~Ν;8XFYՉ7҅ƹl_eEgH28 q_$)R`Z&!+mIG>6恝PJd`ٲeΞ= xwAYf`˖-LMMt&f Bիv,Ee3 SeUI--i!l@5lĵ4W&ef\+/~KxtfR)6m#`Mo޼T*Ȝ_Dy 5ɕ4yH&lݺ|u8Uc=֒H$|;!!aIضM"q(83ǒWvp}Gg<+n̓~|u\kOeBly ի5:C'5RPױ~z]i$IZZZhhhm!bW9rSSR),k^=}"@kɤL^&exx>ᣡ_g(J!fŪN8/gp :lݺ4 /4p,{jpp)%a.Hh>gvv0¢[<q?<83OJ1aZcGFŋ\Fuzz⺊ wֶ$ &B P ?2Ɩyfޑ~W1 o͚5 UIa )ȅkAX,*Ȫꇔ:`:(Bf/ɤ)Jecн;0 2u\ORe'|1~n,Yɓ'|ҥ,QYR,& << qعSg+b ek\JN  =FjB]&,?wf2L-RDZ"ymmmamNid !B]0*D.u S0Ltv0G_ 4W&{_/"SźnI8###5tߦ1db/m^\"]5,]ֆm8~Nrm*Qy.LFSM٢TPP/ "JUs@x[t,md;\8w/>=s=-dGUH'DE7O9vJ)|ky# hu=g] ñ;2.vLsvt|]jwK?. w@]Td\ށno<|%Ňt%tEXtdate:create2019-03-03T22:09:17+00:00*Kh%tEXtdate:modify2019-03-03T22:09:17+00:00[tEXtSoftwarepaint.net 4.0.84NIENDB`phpsysinfo-3.4.4/plugins/raid/gfx/harddrivewarn.png000066400000000000000000000070111467431054600224670ustar00rootroot00000000000000PNG  IHDR<<:rgAMA a pHYsktEXtSoftwarepaint.net 4.0.84N IDAThC{\Ǖ,4frSB(fh ee @y)E%M˷iE&&>S Juo3 68*sYߵ^UYUYUYU_˂h׮]scs=WڷoR.աC+Lo<2|p]0{ ͠8 XH  P$rss)99:w+a~6rHb /ė i9؏s;^adf&(k\ԩSg ݸ L"]K&͎؇p*X3V;//>S4Dk7L8QeWgT5Bj0Br Ve$o%9xu྽ux|8\@:5X 0cZ:p@dqv{ 4Huf0.\AAX^VK, ={TNLL8p8JΝ#p\IF`E V7u߱{n9O7[(G={VE +8  ͠fXHL;2ƛvG#R:Ё~Ճ=)}&\ (mF;'p1$0N 3Hfu g'!I]ɑ؎ϒ#rIJ[#Atlߥy?G| q9k $okRaa#X +*PVה҃|>)O}1yj6(H m?N `߿? ,ֶm6j A_q_F3t@UFuأ3`aWE?Q kB6ךӦwSNEZg`6^ΈV @M371+`I+P(oEU j-I*d-5S^xvq)+;w*4F,[ɸ )rW –˼0#tOHȰaм>16.!C5&(5-ƨ-3&Gy (ksvF.r$?[%.W\ |l]<;ܻw[ IJ Ԥ$լd YR,& C?|V4Ccpڐ-V9-<D7/OzxpôXָg)0Q@J2#`(qd%J9؁N20K>;@AEsxcԨQԦMb>f憤wc_ܵ8glX7\eTc8PcyBV$\ {sF[k'LMe7Ђ6.[܌ R-[2cÆ %Z~=[N YFiմj*%pIrJƒR/_^\8 YGpV Cof`aD4Z@.(C_~%9~YS00K6Qc-TCrP*H=c=e+"|;a -dH"OUV;ӡHD |L0"""3XJHH3gx"pBoO/%K(<c%m{447mrSq;+ff`oE'}^yed叭k`ZPe=GqDzѡ(Xd5,'OLǏ/7îE9e "; Ԙ? 3[Y&>UԂU8&&&M~ֈTG*s̹*Øxҥ%?Yhf2(7&[7叫Y|tZl%U$sb]Z?6-[!.BJwƌ*=k֬280gNi洏Pu+CV/@D ֢k_37! 5 L``*Ѹq{0ub`|ƍ1  T0E~Hk<>&oe}0ѴwLK*q3C=t?gsa۷Ў;KȌ ž6oެs i-H Uby50>{Ah-SD@)jzzzG0BӂBLJPkߪw`ڃf W@-rsWh/¿fwcoTgo:0&X*y$YP R m۶M=ۇm4JǢm#ŰVcfyђNEbp pk^e|wIƍ+26!4&4.={B熦OƆߗr䦅daS1cPhh(~7NUNߥKm\"~+k+bk=*5Ϥ9O)hUVr;#hYfHmȰZuJaWgyjlVSC>n8Cx|ZE9 Όzzs{W{4<QDng?wf! uY t N= `}ra.nթoqǧySR=:~v,oNCPt˜B Z|zޖk|˗bxZq?9>CxM,_)WNoqxOѾ5CI}y>?5cZP]_ΐ}57^cب {Fʪ_Zz߁ IENDB`phpsysinfo-3.4.4/plugins/raid/gfx/soliddrivefail.png000066400000000000000000000112611467431054600226310ustar00rootroot00000000000000PNG  IHDR<<:rgAMA a pHYs(JtEXtSoftwarePaint.NET v3.36%/IDAThCZyTW_Sԧ( *#@JKFjeWZZ_òf0MԴ4edAP9܃W5~և;?>/FKki-̙37n(0 __f,Ə1iӦ-:ujk;I,Xpv9YfMr?L.2eʂy޽{@ Ֆ? yyyg!77W!'' YYY TPHOOoѣGx>>>^q Xkwۄ B׭['lRZZ*ǎk@YYY!JJJ4katLMMDGG җ?ɑ7|)ĉqz_+X-%ȑ# III 8|BBBSϝ#MFˏ?(WJi} g}&|/>{xȧ~!֬Y#v|'Y&?Sf̘q|ɗސ{p 2k I3ȦMdj"G}T֯_и~[^xٸqo믿s-Roʕ4C <f:|y426N 0գ7tl۶FQeH )euCSo߮ Yxٳ笐+V￿aSi&?.2iҤjgے%K0F0_L3HgYBCC9:EENTnҥR &i4IQqM`T"H=[o'47d1Xw5YIs='w}`jGyD^{5: Ҥ+"(IRrٲeO?)B⮻RjpӖoF9QD:+**_f47+_u1k%y3pe…2w\:}}@*wSO=%^ۺur#Jfbz衇TΈiPĩ2Ead jRPXƱsz y$4F"4s>xϞ=[=ljN0w}W¼e)TǤq yUffCp%_MGFIO)cfmy/L}O,=e%˨x uMf1[sJ8gҸ/mNq4 O{ID\1B3\a]‡ؙ$ p ktulj5|5 Wh̑}~JN)WIN`6{^12f9ʎ8&is(!dc ޤ|k 3!X+nc& V9j5AjLRc72lPQU(J'Frrd=I=j{'({mP54¤wnC8ikLCR k[Q+iM[^c'y;gX7V7MHw)$y0fW@٪@t!5 s(,ː m=d/$t>&)Lg7, RJ/H5aOeYzj򕕕 tkJ!׫!,i4/Z ^ ٫ c)ZrM@yx.Ð֒6vl&=V|Mg7(8TDHǬzYSЅ<cSi#%pdA<[*\O~E쓪) A^S}-urbJ)pET3?YKv&3  dd ɚCߣo=KFLISrEnP3Jj gw%U`:] #̐F@ |uىe+KMLjE&3 ہx{!/"sKPWIw'Lcp! .SN)2t`C@ VBYM.!B> :b5Lv|d|ILӄ(``,# ^cLpIkcV8\Y_,)]eAջu1$úcJG!]-PV@;!C\$! g,I =;/OY16iiVIDm.IPdmMpz0 a*es ]-UN%s3r<9]9vK;K3J]3YNs+=% U%HҪVЄ%vP/IuIԡ"E\&MKFImAERнJ<0YF Js h$Ơ.]OU"tn%L6~id%ƥȄ\pO_Zqa~ YE];CR0R0ӠH,Ña36H3oIQ!.HC:S]ݻ!a~?q^ӵ P $0Ca0UbhRmr*'äZ2RwgRLiu:M{HMM-'3&-|M?X=b.0NEx`Ej_}S%Edu~Njbq]A^7D>USI6#C֎ e.nܤ&!Fϑ$S,? w@X;wzyH ,̈́E]~š4?Y8&aJ8_9IRO'o1HHq(+)V$GW9̀i Mj|ɸv$ų& {8OAX&.4i ۷3S'DSܹSMA5fc:D׮]-V_~TowIpIdztz5(e[þ6DU3 JK*©$ZJ[~{bIc-:0!zJ҄o$I%M M >#%Ž$ׇf4p=]}Kx! b('vsNŲe$%C$J bҢŠ*)>=k%C\E%!IBa(128gp_,h8/a292H%DZ `X ̢ ׺*?fIV`$ T_"v]K|/wUu+x^90|cL G($l@^0Aa#sԩS1;ݨ+묫&% y/ UV)0?P EdcgIPļI07QDHq򁻫l(o̟V kƌMӧOrjM@@AxÁ R ĘŪD#D|#$ht$n F"0(O$kp GHGi#qn YyyeN6- .l,XIC L:p t' 5`b8Kdospts8ڑ$I>eȩ-–H4u]]; 9{hemz3"@qQtOxݡ:IvA ھR/ukm}~aK.]+{wyG}]}W^~\[o9ojƫ+3gȄ sΫ,~xر㡼壏>r?q h>_hƫ`ڵkr Q<Ç3??/K.9,G/;pe}]pE}p5Ν;K/qY <{iW_}%SLfXjp:ޅ C;\7 \_HAAtY~ x@yݻw7|g݌o+↴!^grJ~V oK/jy1tPmQ!L$'&gc=͹xs߄08_,X@RkEOMMl1Pȑ#yfYb,_\ r(^YY)$LIOOݎ>iŋ%##C+Wr9uꔃ0cBwIݻڭ[?Z*wQ=X$u!ӦM|Kdƍ'k׮DP.>>^eӦMRQQ!;w9RRR$$$`h4i>|X{LCVSgEUQ aY0իX[Q /,m6QEk e˖ɘ1cdϞ=5BΙ3GFxO?\>tReԩhaa&(7 OHAxRTT$0(< qA!GiHqCV" xnREeg( ("!7Q͜9S,jicJLL: x;**JTI*4Ԟ -[hBcZ 4H5Ddfm,&?3$yeX߾?eڻ&($,6l[{юxxÆ 2ydQAó[jQv4j(3N<22N!2TyOU_(]T\[ DGCy3B70DP9={ƪ7:xXM1ILL0m(K:C,u݀#GLӡI8!h" !34|pahdf25OK,Q&NvDٚ%MJFEY5S,nexg:C ͝;W=|=zϙTm߾]OL,QJرc5t0c*JqZ%aA,`y?~\/9$x&t1k(#RP Hٍ7Ir 7!Jh3#*%Xtn-jKKBy3 `ܳc8߳4 Cۤ6`Uf*EvQs^$ _h3ِ}!`'kH+!KA! Izhy^&.2dڥM6$  LʺL24pQWd}WD2\ʉRjgz+ijEvQ$ta,jg71 BƓC<"cCc8t@6S%`_ɪ.'_-%pS4 xEFQq\%B^pt>Ǜ Nx4rvRg _G' $ЌeqH)0[*}$_ȡ7%(Do(*̰;tLX3o Cm<'Ix]r/R>'+D1E(* H奊d/ɮ%˫>$㚋GgWTE†իWde^$@v {<G?O@9f.M"20LӏÄܷ6:0Y(X]~);γ*SXEnE[Q_`Ce7w+EkC"^\H2oYWT-cddrGM*h~+0HAkW H3f@gjc*:PRl˺u4A (-% i)<%++KJYgYW#S o ]0CVZucoaNЙ+! HBА!$81f\Mveq"zfOp|C:1^{ 8_C5oF¼C{O<3I)9@vIR$vXX!;OIIT<}||4a;;a<ȗm|ictRmMv@xʛ0F8)#AQt׮]zSb7qr^OMm$ik'-%zdMA>0wK LK݊0^ P] G$O $8 ЄwhMKKH¢y!b/I) 4 \v"N7q\Vߟ*68Ῑk# II?])/g%luJ2n Y7˺}%:"}/JbpǷ&XY4???acw&̧6pB} a67xy a1ĊJ133333N:%ojinޑ$;;;}%\%\%\%\JBBʛ7K(P@09::[O3&&ZŊVJ*A.T\9UTT Hŋ?9+W'h-Z4B f˖-֭͛[7nHׯk,^+W,._K,.^hq…Ο?oAѣGMfLTTOw_ ,gƌCs=smSNY _ڴiyimwV!LM ~Fvžo_d{(^fMQ!Z n`+õ4׮]% P/L߾}lU=q߾#F(9ڷoYx4i8qu3TuVC;v=zYbǘ~ذaf̘1wx|r<% L 41#)))`ecegH̹-< /⪟ ]e"8 hWK\m "J^Ǡ (Q¾G4l̛7/@V caYbfK Ӈ#VH떩_̸0jv34PRڵ'j҈DjYr[K@ ͛7ϔK#Z:H--cO0(WDX"4iڴu3ܐ@]tyk6lh-s=@alUk֬3vB-)8,@&3.^/'G%"dɒOSDӜ`C aKyC(K@Ȯ$ 2$`ڴiv}C 9nP(Ɍ *Iۚ( 2g(] \U`%$~qiYJGE'/_)a&"rU.Y%DJ%(=a,c%AըQEYV'OdE8/\b.AE0# (ץVJ{#>\ ];zРA֝hT's3h0ZRܽV<2u-d_AP:qDѿYĕ? "!d܌LNCW*s3%5 E3KVc٣fw600nͺ}kmjyx,HsĊds8 $](>i9DEEcb"SNJ^@\ neV?y%G?c^+1iJ`|%\.aܘ( ȃd(,ر ڇp6 4? ű4)uBy! %p-{Y=w<$$LkpHq>gumO]@:p5 d)h.B#!|nvS+#@Mz4_%̡x**A xF H47&| ȃɯ)%g]@A!3g={A4sAZ˔)S~G0aB 8H^]ݣ0]~jA% P$!$!$r5N9<979:9MX@ҵCPkעi1 xCw\%’X064qT9rL5EAT@!|j鯄tÆ va5NSs׮]v~Pm^Vf/ML'i L3CX]ZC3Q,jG&u2?mxiP|n JXο LurݧO{O¡Cfx%̗W<q$gm۶m;B-)Y%*f=2&\iS´ 37?ٲg>v@bp4v,ruU eQHKxN ωeY@O_H+aNKBDϟpdqo'rdMS'=E ~m=q=FUN: E +\5x@(^NUـþD(111;ߕѐu6 \@sV<hl.InA{h~U[ ` vEN6 ufW݊߰gEDDX-qqq859**j^PG$y8,G}8.!$)DC@σ =RNLLУ 'pkAv~- xFwx1 TL{uOCh%X!D!RW>h;}諤>09 { UA  lt...%K](blIENDB`phpsysinfo-3.4.4/plugins/raid/gfx/soliddriveunc.png000066400000000000000000000110021467431054600224740ustar00rootroot00000000000000PNG  IHDR<<:rgAMA a pHYsktEXtSoftwarePaint.NET v3.36%IDAThCgtבǽN)flwOֱSNrR|N>$g166`j7PH DnzѫDi6/(ќ3sgWIIIߗt۷3<>{G28r#ұc:G//S ˧~*}ϟov ;wٳgΜ1h-w;ak׮Ɏ;D=}M=[-=z|/_,Z[Ç8t,8p655466߿ߋ}ݻ޽a;cEAچŋ%==5Q999ƻ6ܙ(ʋI*,[2x`y7q?c 1cDEE .\h BDbhСCMعs8МsFw(ܻh@C/cpȡC![OBe "(l-y;kf#k5'3gN1)..6݄0P2u.ݞ&3 h[Hk( ia!CsL(g^Ff&S,]nDF0,Y7i"l͒xCE5aP,nex',,̄aC4C&9((x{X.]jgL-2!KRݶm[3 ̻w:ΓZ_JaA,Mw<׶on K @A0F'rwSNq*?Ԏ2m}&IP尵!&Fqdp7]ST˶}q\|,7n\7KYfjgk{C$TiJu*}Yf1k-sMg5ˆ";-[]9[5 ZAs%+F[AǺsr,\/\!{v7!}iQXJ4St<rdLy1>Iǎj}bsFaƤIL 2[†= `?>tT3mI@ClcBKPԺ]%19Smضx:dŲ :(^ Rr|~geɢ2<(Yznz6OXJ, -WsSn3%l-yyyΐoG"=(Zaj (^N->˗NM$oHƄxطcĆQ1uhޔnݺCr%a>МFQQ90o0eOތ0ņyzSE`xnظGΝLn%YҭS.;yJPrC g Ƌ~O>j:` ,M+-ҹsg]^7ߕmֵsϳ$.^ܠҀˣF2 %'U誛pNQ%3Oc+8(|2{GTy[nw+~ڵk}vg[.]tvjbǎ7j7XV6 viWbkѵKI1XJ jY6 G@YddHC;F|xٵ׺ܡy+t]} L~~Q)~o/O8xws8ɱc O֖({TULIJH@9hr8c%!0룿奧;Ix+bVq?R`+0 kj`>,GҬ^a[Wm;b^w s?ߧ`7P`(⯊v}#%JO #&HzxI6N9=k%r`_={ ~,}pC|O?OϐMsRATI328oO~ ZCAta̿;6p3mLl9fII_Sg6IENDB`phpsysinfo-3.4.4/plugins/raid/gfx/soliddrivewarn.png000066400000000000000000000075211467431054600226710ustar00rootroot00000000000000PNG  IHDR<<:rgAMA a pHYs(JtEXtSoftwarePaint.NET v3.36%IDAThCw|UU!em"Y)vD$H"6"Re) B@  5 *Df{rOrxI~2/{=w~3s97JDJDJDJ%͛7^nݺwGyHԫWPBͨu裏I&G~}ـh׮]Ph۶mxg΂^nѢ)cO<7G/7nSOիr siiipر8z#GpaC?c8`;vH=$22]G/ 4X?w\A~7__éS ?ɓ' ~'fo ad˖-ROVKݪUyyffݻ7Xz+þ}̑g={qv2ܹn߾} 3P|͚5Bқӎ>iqIRRifΜ)+Wm۶材Y7|#M6=]QE3͚5$ I۷,^X֮]k,tM AɢE/?\{饗9_k0o-={ 6oӟM`1]K\>s+Je%-[&ZG}d~`eԩSK.jժ!G ":ux2giԨwk>}ݒ%K a^x'~_\(v,8܀![![GiHqKDMh}nO>4l!G?.(,Daֿر ]vÇ% &ZƓ>âC% GycE᝞.o&+Q #F0޵!μGQ^LRaښ2e ҦMuG; J^Dy{1&IL[n22N!24EC2 #2!vq n= a14 sm\=yl՜{yd-aL4LQLqӦMt0"5JrZE-t[˖-=( biV0xsof!0ܷCO@nI9r~V ueƒ:#Jv%֗Ճ!w(4ǝ!Jh2#q/:!ά%!8 pM ׂg_ ת1~]wM+ wP[{Zd̋SOhe>Ð7CIa]\P*\t |+am:*ِu%&kIZzN'ߔ0{dW2p1fEȁ:5IdFGsϱh*\~:TE,X ~e^& Z5x%d!~|mɘ!+{ݒa<~Z{'Ǜp Ö{<31Mf((H_ ?J{%[Iws <ӝ/**٢|8ȄqW4$Az?I gsda=,|u5a5ġwh8eaw EX3nnҖ8GF'Ix9:Ő{ch>#Afͯ/YDFFժbbAхYfde^$(@ {Qi5;:4aCMПl %Im XxfG9~cqhg@VBM<Ꞡ C H=C-Y o}P|3a%3\TO?Mz_]Ć+V%0MF*1jf -ٳgw!|H{NZJ28 3x4{'%_E-0lF8sF (3_1C3_{(~ yą)]lXvr>j(/ÅLSe Uʒ12%"="K|*~l~~pf4ox”يaqgX,Mv) `S sd=-\3dv b`K;mm Y+Gv\%YMZh-2u DiXJx?UI ݅*)9u uTpJ\)2iYJR;eAՒQ2) / La1]WEcOHQ׆u֙:}xX..Du,z޾=,c=P7MΔj2U q 3J6Dϒ&M+۬k&Y/dn0qDߗǏo@;=^MZ$ wugw+a5m49,,x6DGG7u,FwM[[lUv;bLTHg} @$jboCUAR}ڵkWΡvNB_`2 >\]^QQqf-+*;]QAMEqM/|"޺Θ͙xKWwރ^U'a.UqJU RAQ _N-g'Ús3xc;Oi)P/pE]Es ŘU(Ʒ$e˰*Jв0zL2W !yd*%UZ"q,RqwB |gK㞿a:ς!+P紿Ȇ!U},k94fΎQtt|a 'T-).oj9HΑߜc))W)U6[IENDB`phpsysinfo-3.4.4/plugins/raid/js/000077500000000000000000000000001467431054600167525ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/raid/js/raid.js000066400000000000000000000361061467431054600202350ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008 by phpSysInfo - A PHP System Information Script * * http://phpsysinfo.sourceforge.net/ * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ // // $Id: raid.js 679 2012-09-04 10:10:11Z namiltd $ // /*global $, jQuery, buildBlock, genlang, createBar, plugin_translate, datetime */ "use strict"; var raid_show = false; /** * get the details of the raid * @param {jQuery} xml part of the plugin-XML * @param {number} id id of the device * @param {jQuery} xml plugin-XML */ function raid_buildinfos(xml, id) { var html = "", prog = "", devname = "", devstatus = "", devlevel = "", devcontroller = "", devfirmware = "", devtemperature = 0, devbattvolt = 0, devbatttemp = 0, devbattery = "", devsupported = "", devcachevault = 0, devcapacity = 0, devstride = 0, devsubsets = 0, devdevs = 0, devspares = 0, devchunk = 0, devstripe = 0, devalgor = "", devpersist = 0, devreg = 0, devact = 0, devcache = 0, devbad = 0, devread = "", devwrite = "", devdiskcache = "", button = ""; prog = $(xml).attr("Program"); devname = $(xml).attr("Name"); devstatus = $(xml).attr("Status"); devlevel = $(xml).attr("Level"); devcontroller = $(xml).attr("Controller"); devfirmware = $(xml).attr("Firmware"); devtemperature = parseFloat($(xml).attr("Temperature")); devbattvolt = parseFloat($(xml).attr("Batt_Volt")); devbatttemp = parseFloat($(xml).attr("Batt_Temp")); devbattery = $(xml).attr("Battery"); devsupported = $(xml).attr("Supported"); devcachevault = parseInt($(xml).attr("Cachevault_Size"), 10); devcapacity = parseInt($(xml).attr("Capacity"), 10); devstride = parseInt($(xml).attr("Stride"), 10); devsubsets = parseInt($(xml).attr("Subsets"), 10); devdevs = parseInt($(xml).attr("Devs"), 10); devspares = parseInt($(xml).attr("Spares"), 10); devchunk = parseInt($(xml).attr("Chunk_Size"), 10); devstripe = parseInt($(xml).attr("Stripe_Size"), 10); devalgor = $(xml).attr("Algorithm"); devpersist = parseInt($(xml).attr("Persistend_Superblock"), 10); devreg = parseInt($(xml).attr("Disks_Registered"), 10); devact = parseInt($(xml).attr("Disks_Active"), 10); devcache = parseInt($(xml).attr("Cache_Size"), 10); devbad = parseInt($(xml).attr("Bad_Blocks"), 10); devread = $(xml).attr("ReadPolicy"); devwrite = $(xml).attr("WritePolicy"); devdiskcache = $(xml).attr("DiskCache"); html += "" + genlang(22, "Raid") + "" + prog + ""; if (devname !== undefined) html += "" + genlang(3, "Raid") + "" + devname + ""; html += "" + genlang(4, "Raid") + "" + devstatus + ""; if (devlevel !== undefined) html += "" + genlang(5, "Raid") + "" + devlevel + ""; if (!isNaN(devcapacity)) html += "" + genlang(6, "Raid") + "" + formatBytes(devcapacity, xml.parent().parent().parent()) + ""; if (!isNaN(devstride)) html += "" + genlang(7, "Raid") + "" + devstride + ""; if (!isNaN(devsubsets)) html += "" + genlang(8, "Raid") + "" + devsubsets + ""; if (!isNaN(devdevs)) html += "" + genlang(9, "Raid") + "" + devdevs + ""; if (!isNaN(devspares)) html += "" + genlang(10, "Raid") + "" + devspares + ""; if (!isNaN(devchunk)) html += "" + genlang(13, "Raid") + "" + formatBytes(1024*devchunk, xml.parent().parent().parent()) + ""; if (!isNaN(devstripe)) html += "" + genlang(28, "Raid") + "" + formatBytes(devstripe, xml.parent().parent().parent()) + ""; if (devalgor !== undefined) html += "" + genlang(14, "Raid") + "" + devalgor + ""; if (!isNaN(devpersist)) { if (devpersist == 1) { html += "" + genlang(15, "Raid") + "" + genlang(16, "Raid") + ""; } else { html += "" + genlang(15, "Raid") + "" + genlang(17, "Raid") + ""; } } if (!isNaN(devreg) && !isNaN(devact)) html += "" + genlang(18, "Raid") + "" + devreg + "/" + devact + ""; if (devcontroller !== undefined) html += "" + genlang(19, "Raid") + "" + devcontroller + ""; if (devfirmware !== undefined) html += "" + genlang(29, "Raid") + "" + devfirmware + ""; if (isFinite(devtemperature)) html += "" + genlang(30, "Raid") + "" + formatTemp(devtemperature, xml.parent().parent().parent()) + ""; if (devbattery !== undefined) html += "" + genlang(20, "Raid") + "" + devbattery + ""; if (isFinite(devbattvolt)) html += "" + genlang(31, "Raid") + "" + round(devbattvolt, 3) + " " + genlang(82) +""; if (isFinite(devbatttemp)) html += "" + genlang(32, "Raid") + "" + formatTemp(devbatttemp, xml.parent().parent().parent()) + ""; if (devsupported !== undefined) html += "" + genlang(21, "Raid") + "" + devsupported + ""; if (!isNaN(devcache)) html += "" + genlang(25, "Raid") + "" + formatBytes(devcache, xml.parent().parent().parent()) + ""; if (devread !== undefined) html += "" + genlang(23, "Raid") + "" + devread + ""; if (devwrite !== undefined) html += "" + genlang(24, "Raid") + "" + devwrite + ""; if (!isNaN(devcachevault)) html += "" + genlang(33, "Raid") + "" + formatBytes(devcachevault, xml.parent().parent().parent()) + ""; if (devdiskcache !== undefined) html += "" + genlang(27, "Raid") + "" + devdiskcache + ""; if (!isNaN(devbad)) html += "" + genlang(26, "Raid") + "" + devbad + ""; button += "

    \"plus\"" + genlang(2, "Raid") + "

    "; button += "

    \"minus\"" + genlang(2, "Raid") + "

    "; button += "" + html + "
    "; return button; } /** * generate a html string with the current action on the disks * @param {jQuery} xml part of the plugin-XML * @param {jQuery} xml plugin-XML */ function raid_buildaction(xml) { var html = "", name = "", time = "", tunit = "", percent = 0; $("Action", xml).each(function mdstatus_getaction(id) { name = $(this).attr("Name"); if (parseInt(name, 10) !== -1) { time = $(this).attr("Time_To_Finish"); tunit = $(this).attr("Time_Unit"); percent = parseFloat($(this).attr("Percent")); html += "
    "; html += genlang(11, "Raid") + ": " + name + "
    "; html += createBar(percent); if ((time !== undefined) && (tunit !== undefined)) { html += "
    "; html += genlang(12, "Raid") + ": " + time + " " + tunit; } html += "
    "; } }); return html; } /** * choose the right diskdrive icon * @param {jQuery} xml part of the plugin-XML * @param {jQuery} xml plugin-XML */ function raid_diskicon(xml, id) { $("RaidItems Item", xml).each(function raid_getitems(itemid) { var status = "", name = "", type = "", info = "", bus = "", cap = "", model = "", minfo = "", serial = "", capacity = 0, temperature = 0, parentid = 0; status = $(this).attr("Status"); bus = $(this).attr("Bus"); name = $(this).attr("Name"); type = $(this).attr("Type"); info = $(this).attr("Info"); model = $(this).attr("Model"); serial = $(this).attr("Serial"); capacity = parseInt($(this).attr("Capacity"), 10); temperature = parseFloat($(this).attr("Temperature")); parentid = parseInt($(this).attr("ParentID"), 10); var imgh = "", imgs = "", alt = "", bcolor = ""; switch (status) { case "ok": imgh = "harddriveok.png"; imgs = "soliddriveok.png"; alt = "ok"; bcolor = "green"; break; case "F": imgh = "harddrivefail.png"; imgs = "soliddrivefail.png"; alt = "fail"; bcolor = "red"; break; case "U": imgh = "harddriveunc.png"; imgs = "soliddriveunc.png"; alt = "unconfigured"; bcolor = "purple"; break; case "S": imgh = "harddrivespare.png"; imgs = "soliddrivespare.png"; alt = "spare"; bcolor = "gray"; break; case "W": imgh = "harddrivewarn.png"; imgs = "soliddrivewarn.png"; alt = "warning"; bcolor = "orange"; break; default: // alert("--" + diskstatus + "--"); imgh = "error.png"; imgs = "error.png"; alt = "error"; break; } if (!isNaN(parentid)) { if (type !== undefined) { if (model !== undefined) { minfo = "
    " + model; } if (serial !== undefined) { minfo += "
    " + serial; } if (bus === undefined) { bus = ""; } if (!isNaN(capacity)) { cap = formatBytes(capacity, xml.parent().parent().parent()); } if ((bus !== "") || (cap !== "")) { minfo += "
    " + $.trim(bus + " " + cap); } if (isFinite(temperature)) { minfo += "
    " + formatTemp(temperature, xml.parent().parent().parent()); } $("#Plugin_Raid_Item" + id + "-" + parentid).append("
    \""
    " + name + minfo + "
    "); //onload IE6 PNG fix } else { if (parentid === 0) { $("#Plugin_Raid_List-" + id).append("
    " + name + "
    "); } else { $("#Plugin_Raid_Item" + id + "-" + parentid).append("
    " + name + "
    "); } } } }); } /** * fill the plugin block * @param {jQuery} xml plugin-XML */ function raid_populate(xml) { var hostname = ""; $("#Plugin_RaidTable").empty(); hostname = $("Plugins Plugin_Raid", xml).attr('Hostname'); if (hostname !== undefined) { $('span[class=Hostname_Raid]').html(hostname); } $("#Plugin_RaidTable").append(""); $("Plugins Plugin_Raid Raid", xml).each(function raid_getdevice(id) { var htmldisks = "", buildedaction = ""; htmldisks += ""; htmldisks += ""; buildedaction = raid_buildaction($(this)); if (buildedaction) { htmldisks += ""; } htmldisks += ""; htmldisks += "
    " + buildedaction + "
    " + raid_buildinfos($(this), id); htmldisks += "
    "; $("#Plugin_RaidTable").append("
    " + $(this).attr("Device_Name") + "" + htmldisks + ""); raid_diskicon($(this), id); $("#sPlugin_Raid_Info" + id).click(function raid_showinfo() { $("#Plugin_Raid_InfoTable" + id).slideDown("fast"); $("#sPlugin_Raid_Info" + id).hide(); $("#hPlugin_Raid_Info" + id).show(); }); $("#hPlugin_Raid_Info" + id).click(function raid_hideinfo() { $("#Plugin_Raid_InfoTable" + id).slideUp("fast"); $("#hPlugin_Raid_Info" + id).hide(); $("#sPlugin_Raid_Info" + id).show(); }); raid_show = true; }); $("#Plugin_RaidTable").append(""); } /** * load the xml via ajax */ function raid_request() { $("#Reload_RaidTable").attr("title", "reload"); $.ajax({ url: "xml.php?plugin=Raid", dataType: "xml", error: function raid_error() { $.jGrowl("Error loading XML document for Plugin Raid"); }, success: function raid_buildblock(xml) { populateErrors(xml); raid_populate(xml); if (raid_show) { plugin_translate("Raid"); $("#Plugin_Raid").show(); } } }); } $(document).ready(function raid_buildpage() { var html = ""; $("#footer").before(buildBlock("Raid", 1, true)); html += "
    \n"; html += " \n"; html += "
    \n"; html += "
    \n"; $("#Plugin_Raid").append(html); $("#Plugin_Raid").addClass("fullsize"); raid_request(); $("#Reload_RaidTable").click(function raid_reload(id) { raid_request(); $(this).attr("title", datetime()); }); }); phpsysinfo-3.4.4/plugins/raid/js/raid_bootstrap.js000066400000000000000000000363471467431054600223410ustar00rootroot00000000000000function renderPlugin_raid(data) { function raid_buildaction(data) { var html = "", name = "", percent = 0; if (data !== undefined) { name = data.Name; if ((name !== undefined) && (parseInt(name, 10) !== -1)) { percent = Math.round(parseFloat(data.Percent)); html += "
    " + genlang(11,'raid') + ":" + String.fromCharCode(160) + name + "
    "; html += '
    ' + '
    ' + '
    ' + percent + '%
     
    '; if ((data.Time_To_Finish !== undefined) && (data.Time_Unit !== undefined)) { html += genlang(12,'raid') + ":" + String.fromCharCode(160) + data.Time_To_Finish + String.fromCharCode(160) + data.Time_Unit; } html += "
    "; } } return html; } function raid_diskicon(data , id, itemid, byteFormat, tempFormat) { var info = data.Info; if (info === undefined) info = ""; var parentid = parseInt(data.ParentID, 10); var imgh = "", imgs = "", alt = "", bcolor = "", bus = "", cap = "", minfo = "", serial = ""; switch (data.Status) { case "ok": imgh = "harddriveok.png"; imgs = "soliddriveok.png"; alt = "ok"; bcolor = "green"; break; case "F": imgh = "harddrivefail.png"; imgs = "soliddrivefail.png"; alt = "fail"; bcolor = "red"; break; case "S": imgh = "harddrivespare.png"; imgs = "soliddrivespare.png"; alt = "spare"; bcolor = "gray"; break; case "U": imgh = "harddriveunc.png"; imgs = "soliddriveunc.png"; alt = "unconfigured"; bcolor = "purple"; break; case "W": imgh = "harddrivewarn.png"; imgs = "soliddrivewarn.png"; alt = "warning"; bcolor = "orange"; break; default: // alert("--" + diskstatus + "--"); imgh = "error.png"; imgs = "error.png"; alt = "error"; break; } if (!isNaN(parentid)) { if (data.Type !== undefined) { if (data.Model !== undefined) { minfo = "
    " + data.Model; } if (data.Serial !== undefined) { minfo += "
    " + data.Serial; } if (data.Bus === undefined) { bus = ""; } else { bus = data.Bus; } if (!isNaN(parseInt(data.Capacity, 10))) { cap = formatBytes(parseInt(data.Capacity, 10), byteFormat); } if ((bus !== "") || (cap !== "")) { minfo += "
    " + $.trim(bus + " " + cap); } if (isFinite(parseFloat(data.Temperature))) { minfo += "
    " + formatTemp(parseFloat(data.Temperature), tempFormat); } $("#raid_item" + id + "-" + parentid).append("
    \""
    " + data.Name + minfo + "
    "); } else { if (parentid === 0) { $("#raid_list-" + id).append("
    " + data.Name + "
    "); } else { $("#raid_item" + id + "-" + parentid).append("
    " + data.Name + "
    "); } } } } if (data.Plugins.Plugin_Raid !== undefined) { var raiditems = items(data.Plugins.Plugin_Raid.Raid); if (raiditems.length > 0) { var html = ''; for (var i = 0; i < raiditems.length ; i++) { html += ""+raiditems[i]["@attributes"].Device_Name+""; if (raiditems[i].RaidItems !== undefined) { html += ""; html += ""; if (raiditems[i].Action !== undefined) { var buildedaction = raid_buildaction(raiditems[i].Action['@attributes']); if (buildedaction) { html += ""; } } html += ""; html += "
    " + buildedaction + "
    "; html += ""; html += ""; html += ""; // Program if (raiditems[i]["@attributes"].Name !== undefined) html += ""; // Name html += ""; // Status if (raiditems[i]["@attributes"].Level !== undefined) html += ""; // RAID-Level if (!isNaN(parseInt(raiditems[i]["@attributes"].Capacity, 10))) html += "";// Capacity if (!isNaN(parseInt(raiditems[i]["@attributes"].Stride, 10))) html += ""; // Stride if (!isNaN(parseInt(raiditems[i]["@attributes"].Subsets, 10))) html += ""; // Subsets if (raiditems[i]["@attributes"].Devs !== undefined) html += ""; // Devices if (!isNaN(parseInt(raiditems[i]["@attributes"].Spares, 10))) html += ""; // Spares if (!isNaN(parseInt(raiditems[i]["@attributes"].Chunk_Size, 10))) html += ""; if (!isNaN(parseInt(raiditems[i]["@attributes"].Stripe_Size, 10))) html += ""; if (raiditems[i]["@attributes"].Algorithm !== undefined) html += ""; if (!isNaN(parseInt(raiditems[i]["@attributes"].Persistend_Superblock, 10))) { if (parseInt(raiditems[i]["@attributes"].Persistend_Superblock, 10) == 1) { html += ""; } else { html += ""; } } if (!isNaN(parseInt(raiditems[i]["@attributes"].Disks_Registered, 10)) && !isNaN(parseInt(raiditems[i]["@attributes"].Disks_Active, 10))) { html += ""; } if (raiditems[i]["@attributes"].Controller !== undefined) html += ""; // Controller if (raiditems[i]["@attributes"].Firmware !== undefined) html += ""; // Firmware if (isFinite(parseFloat(raiditems[i]["@attributes"].Temperature))) html += ""; // Temperature if (raiditems[i]["@attributes"].Battery !== undefined) html += ""; // Battery Condition if (isFinite(parseFloat(raiditems[i]["@attributes"].Batt_Volt))) html += ""; // Battery Voltage if (isFinite(parseFloat(raiditems[i]["@attributes"].Batt_Temp))) html += ""; // Battery Temperature if (raiditems[i]["@attributes"].Supported !== undefined) html += ""; // Supported RAID-Types if (raiditems[i]["@attributes"].Cache_Size !== undefined) html += ""; // Cache_Size if (raiditems[i]["@attributes"].ReadPolicy !== undefined) html += ""; // Read Policy if (raiditems[i]["@attributes"].WritePolicy !== undefined) html += ""; // Write Policy if (raiditems[i]["@attributes"].Cachevault_Size !== undefined) html += ""; // Cachevault_Size if (raiditems[i]["@attributes"].DiskCache !== undefined) html += ""; // Disk Cache if (raiditems[i]["@attributes"].Bad_Blocks !== undefined) html += ""; // Bad_Blocks html += "
    " + genlang(2, "raid") + "
    "+genlang(22, 'raid')+"" + raiditems[i]["@attributes"].Program + "
    "+genlang(3, 'raid')+"" + raiditems[i]["@attributes"].Name + "
    "+genlang(4, 'raid')+"" + raiditems[i]["@attributes"].Status + "
    "+genlang(5, 'raid')+"" + raiditems[i]["@attributes"].Level + "
    "+genlang(6, 'raid')+"" + formatBytes(parseInt(raiditems[i]["@attributes"].Capacity, 10), data.Options["@attributes"].byteFormat) + "
    "+genlang(7, 'raid')+"" + parseInt(raiditems[i]["@attributes"].Stride, 10) + "
    "+genlang(8, 'raid')+"" + parseInt(raiditems[i]["@attributes"].Subsets, 10) + "
    "+genlang(9, 'raid')+"" + parseInt(raiditems[i]["@attributes"].Devs, 10) + "
    "+genlang(10, 'raid')+"" + parseInt(raiditems[i]["@attributes"].Spares, 10) + "
    "+genlang(13, 'raid')+"" + formatBytes(1024*parseInt(raiditems[i]["@attributes"].Chunk_Size, 10), data.Options["@attributes"].byteFormat) + "
    "+genlang(28, 'raid')+"" + formatBytes(parseInt(raiditems[i]["@attributes"].Stripe_Size, 10), data.Options["@attributes"].byteFormat) + "
    "+genlang(14, 'raid')+"" + raiditems[i]["@attributes"].Algorithm + "
    "+genlang(15, 'raid')+""+genlang(16, 'raid')+"
    "+genlang(15, 'raid')+""+genlang(17, 'raid')+"
    "+genlang(18, 'raid')+"" + parseInt(raiditems[i]["@attributes"].Disks_Registered, 10) + "/" + parseInt(raiditems[i]["@attributes"].Disks_Active, 10) + "
    "+genlang(19, 'raid')+"" + raiditems[i]["@attributes"].Controller + "
    "+genlang(29, 'raid')+"" + raiditems[i]["@attributes"].Firmware + "
    "+genlang(30, 'raid')+"" + formatTemp(parseFloat(raiditems[i]["@attributes"].Temperature), data.Options["@attributes"].tempFormat) + "
    "+genlang(20, 'raid')+"" + raiditems[i]["@attributes"].Battery + "
    "+genlang(31, 'raid')+"" + round(parseFloat(raiditems[i]["@attributes"].Batt_Volt), 3) + " " + genlang(82) + "
    "+genlang(32, 'raid')+"" + formatTemp(parseFloat(raiditems[i]["@attributes"].Batt_Temp), data.Options["@attributes"].tempFormat) + "
    "+genlang(21, 'raid')+"" + raiditems[i]["@attributes"].Supported + "
    "+genlang(25, 'raid')+"" + formatBytes(parseInt(raiditems[i]["@attributes"].Cache_Size, 10), data.Options["@attributes"].byteFormat) + "
    "+genlang(23, 'raid')+"" + raiditems[i]["@attributes"].ReadPolicy + "
    "+genlang(24, 'raid')+"" + raiditems[i]["@attributes"].WritePolicy + "
    "+genlang(33, 'raid')+"" + formatBytes(parseInt(raiditems[i]["@attributes"].Cachevault_Size, 10), data.Options["@attributes"].byteFormat) + "
    "+genlang(27, 'raid')+"" + raiditems[i]["@attributes"].DiskCache + "
    "+genlang(26, 'raid')+"" + parseInt(raiditems[i]["@attributes"].Bad_Blocks, 10) + "
    "; html += "
    "; } /*if (i < raiditems.length-1) { // not last element html += "
    "; }*/ html +=""; } $('#raid-data').empty().append(html); for (var k = 0; k < raiditems.length ; k++) { if (raiditems[k].RaidItems !== undefined) { var diskitems = items(raiditems[k].RaidItems.Item); for (var j = 0; j < diskitems.length ; j++) { raid_diskicon(diskitems[j]["@attributes"], k, j, data.Options["@attributes"].byteFormat, data.Options["@attributes"].tempFormat); } $('#raid-'+k).treegrid({ initialState: 'collapsed', expanderExpandedClass: 'normalicon normalicon-down', expanderCollapsedClass: 'normalicon normalicon-right' }); } } $('#block_raid').show(); } else { $('#block_raid').hide(); } } else { $('#block_raid').hide(); } } phpsysinfo-3.4.4/plugins/raid/lang/000077500000000000000000000000001467431054600172575ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/raid/lang/cz.xml000066400000000000000000000073631467431054600204260ustar00rootroot00000000000000 Stav RAIDu Dodatečné informace Name Stav Úroveň RAIDu Kapacita Stride Subsets Devices Spares Current Action Čas dokončení Velikost proužku Algoritmus Persistentní Superblock dostupný nedostupný Registrovné/aktivní disky Controller Battery Condition Poodporované typy RAID Program Read Policy Write Policy Cache Size Bad Blocks Disk Cache Stripe Size Firmware Temperature Battery Voltage Battery Temperature Cachevault Flash Size phpsysinfo-3.4.4/plugins/raid/lang/de.xml000066400000000000000000000073551467431054600204030ustar00rootroot00000000000000 RAID Status Zusätzliche Informationen Name Status RAID-Level Kapazität Stride Subsets Devices Spares Current Action Fertig in Blockgröße Algorithmus Persistenter Superblock verfügbar nicht verfügbar Registrierte/Aktive Platten Controller Akku-Zustand Unterstützte RAID-Typen Program Read Policy Write Policy Cache Size Bad Blocks Disk Cache Stripe Size Firmware Temperature Battery Voltage Battery Temperature Cachevault Flash Size phpsysinfo-3.4.4/plugins/raid/lang/en.xml000066400000000000000000000073371467431054600204150ustar00rootroot00000000000000 RAID Status Additional Information Name Status RAID-Level Capacity Stride Subsets Devices Spares Current Action Finishing in Chunk Size Algorithm Persistent Superblock available not available Registered/Active Disks Controller Battery Condition Supported RAID-Types Program Read Policy Write Policy Cache Size Bad Blocks Disk Cache Stripe Size Firmware Temperature Battery Voltage Battery Temperature Cachevault Flash Size phpsysinfo-3.4.4/plugins/raid/lang/fr.xml000066400000000000000000000073151467431054600204160ustar00rootroot00000000000000 Statut RAID Informations additionnelles Nom Status Type de RAID Capacité Granularité Sous-ensembles Périphériques Rechanges Action courante Temps restant Granularité Algorithme Superblocs persistants disponible non disponible Disques Enregistrés/Actives Controller Battery Condition Type de RAID supporté Program Read Policy Write Policy Cache Size Bad Blocks Disk Cache Stripe Size Firmware Temperature Battery Voltage Battery Temperature Cachevault Flash Size phpsysinfo-3.4.4/plugins/raid/lang/gr.xml000066400000000000000000000102321467431054600204070ustar00rootroot00000000000000 Κατάσταση RAID Επιπρόσθετες Πληροφορίες Όνομα Κατάσταση Τύπος RAID Χωρητικότητα Stride Υποσύνολα Συσκευές Spares Τρέχουσα Ενέργεια Ολοκληρώνεται σε Μέγεθος Chunk Αλγόριθμος Μόνιμο Superblock διαθέσιμο μη διαθέσιμο Δηλωμένοι/Ενεργοί Δίσκοι Controller Κατάσταση Μπαταρίας Αχρησιμοποίητοι Δίσκοι Πρόγραμμα Πολιτικές Ανάγνωσης Πολιτικές Εγγραφής Μέγεθος Λανθάνουσας Μνήμης Χαλασμένα Μπλοκ Λανθάνουσα Μνήμη Δίσκου Μέγεθος Stripe Firmware Θερμοκρασία Τάση Μπαταρίας Θερμοκρασία Μπαταρίας Cachevault Flash Size phpsysinfo-3.4.4/plugins/raid/lang/ro.xml000066400000000000000000000073461467431054600204330ustar00rootroot00000000000000 Stare RAID Informații Aditionale Nume Stare Nivele RAID Capacitate Pas Subseturi Dispozitive Piese Acțiune curentă finisare în Chunk Size Algoritm Superblock persistente disponibil indisponibil Înregistrate/Discuri Active Controller Condiții Baterie Discuri defolosite Program Read Policy Write Policy Cache Size Bad Blocks Disk Cache Stripe Size Firmware Temperature Battery Voltage Battery Temperature Cachevault Flash Size phpsysinfo-3.4.4/plugins/raid/lang/ru.xml000066400000000000000000000077061467431054600204410ustar00rootroot00000000000000 RAID Статус Дополнительная Информация Имя Статус RAID-Уровень Вместимость Шаг Подмножество Устройство Резервировано Текущее действие Окончание в Размер блока Алгоритм Постоянный суперблок доступен не доступен Зарегистрировано/Активных Дисков Controller Состояние аккумулятора Неиспользуемые диски Program Read Policy Write Policy Cache Size Bad Blocks Disk Cache Stripe Size Firmware Temperature Battery Voltage Battery Temperature Cachevault Flash Size phpsysinfo-3.4.4/plugins/raid/raid_bootstrap.html000066400000000000000000000011741467431054600222430ustar00rootroot00000000000000 phpsysinfo-3.4.4/plugins/smart/000077500000000000000000000000001467431054600165455ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/smart/class.smart.inc.php000066400000000000000000000746041467431054600222730ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 3.0 * @link http://phpsysinfo.sourceforge.net */ class SMART extends PSI_Plugin { /** * variable, which holds the content of the command * @var array */ private $_filecontent = array(); /** * variable, which holds the result before the xml is generated out of this array * @var array */ private $_result = array(); /** * variable, which holds the events of disks * @var array */ private $_event = array(); /** * variable, which holds PSI_PLUGIN_SMART_IDS well formated datas * @var array */ private $_ids = array(); /** * read the data into an internal array and also call the parent constructor * * @param String $enc target encoding */ public function __construct($enc) { parent::__construct(__CLASS__, $enc); switch (strtolower(PSI_PLUGIN_SMART_ACCESS)) { case 'wmi': case 'command': case 'data': if (defined('PSI_PLUGIN_SMART_DEVICES') && is_string(PSI_PLUGIN_SMART_DEVICES)) { if (preg_match(ARRAY_EXP, PSI_PLUGIN_SMART_DEVICES)) { $disks = eval(PSI_PLUGIN_SMART_DEVICES); } else { $disks = array(PSI_PLUGIN_SMART_DEVICES); } if (defined('PSI_PLUGIN_SMART_IDS') && is_string(PSI_PLUGIN_SMART_IDS)) { if (preg_match(ARRAY_EXP, PSI_PLUGIN_SMART_IDS)) { $fullIds = eval(PSI_PLUGIN_SMART_IDS); } else { $fullIds = array(PSI_PLUGIN_SMART_IDS); } foreach ($fullIds as $fullId) { $arrFullId = preg_split('/-/', $fullId); $this->_ids[intval($arrFullId[0])]["value_type"] = strtolower($arrFullId[1]); if (!empty($arrFullId[2])) { $this->_ids[intval($arrFullId[2])]["replace"] = intval($arrFullId[0]); $this->_ids[intval($arrFullId[2])]["value_type"] = strtolower($arrFullId[1]); } } } } break; default: $this->global_error->addConfigError("__construct()", "[smart] ACCESS"); } switch (strtolower(PSI_PLUGIN_SMART_ACCESS)) { case 'wmi': if (((PSI_OS == 'WINNT') && !defined('PSI_EMU_HOSTNAME')) || (defined('PSI_EMU_HOSTNAME') && !defined('PSI_EMU_PORT'))) { if ((PSI_OS == 'WINNT') && !defined('PSI_EMU_HOSTNAME') && !WINNT::isAdmin()) { $this->global_error->addError("SMART WMI mode error", "Mode allowed for WinNT systems, with administrator privileges (run as administrator)"); } else { $asd_wmi = null; try { $wmi = WINNT::initWMI('root\wmi'); $asd_wmi = WINNT::getWMI($wmi, 'MSStorageDriver_ATAPISmartData', array('VendorSpecific')); } catch (Exception $e) { } foreach ($asd_wmi as $_nr=>$asd) { $_name = "/dev/sd".chr(97+$_nr); if (array_search($_name, $disks) !== false) { $this->_filecontent[$_name] = "\nVendor Specific SMART Attributes with Thresholds\n"; $this->_filecontent[$_name] .= "ID# _ATTRIBUTE_NAME_ FLAG VALUE WORST RAW_VALUE\n"; $asdvs = $asd['VendorSpecific']; if (gettype($asdvs) === "string") { // WMIC on Linux if (preg_match("/^\(([\d\,]+)\)$/", $asdvs, $buffer)) { $asdvs = preg_split("/\,/", $buffer[1], -1, PREG_SPLIT_NO_EMPTY); } else { $asdvs = array(); } } if (count($asdvs) >= 12) for ($c = 2; $c < count($asdvs); $c += 12) { //Attribute values 0x00, 0xff are invalid $id = intval($asdvs[$c]); if (($id != 0) && ($id != 255)) { switch ($id) { case 3: //raw16(avg16) $this->_filecontent[$_name] .= $id." ID".$id." 0x".substr("0".dechex(intval($asdvs[$c+2])), -2).substr("0".dechex(intval($asdvs[$c+1])), -2)." ".substr("00".$asdvs[$c+3], -3)." ".substr("00".$asdvs[$c+4], -3)." ".($asdvs[$c+5]+256*$asdvs[$c+6])."\n"; break; case 5: case 196: //raw16(raw16) $this->_filecontent[$_name] .= $id." ID".$id." 0x".substr("0".dechex(intval($asdvs[$c+2])), -2).substr("0".dechex(intval($asdvs[$c+1])), -2)." ".substr("00".$asdvs[$c+3], -3)." ".substr("00".$asdvs[$c+4], -3)." ".($asdvs[$c+5]+256*$asdvs[$c+6])."\n"; break; case 9: case 240: //raw24(raw8) $this->_filecontent[$_name] .= $id." ID".$id." 0x".substr("0".dechex(intval($asdvs[$c+2])), -2).substr("0".dechex(intval($asdvs[$c+1])), -2)." ".substr("00".$asdvs[$c+3], -3)." ".substr("00".$asdvs[$c+4], -3)." ".($asdvs[$c+5]+256*$asdvs[$c+6]+65536*$asdvs[$c+7])."\n"; break; case 190: case 194: //tempminmax $this->_filecontent[$_name] .= $id." ID".$id." 0x".substr("0".dechex(intval($asdvs[$c+2])), -2).substr("0".dechex(intval($asdvs[$c+1])), -2)." ".substr("00".$asdvs[$c+3], -3)." ".substr("00".$asdvs[$c+4], -3)." ".($asdvs[$c+5]+256*$asdvs[$c+6])."\n"; break; default: //raw48 $this->_filecontent[$_name] .= $id." ID".$id." 0x".substr("0".dechex(intval($asdvs[$c+2])), -2).substr("0".dechex(intval($asdvs[$c+1])), -2)." ".substr("00".$asdvs[$c+3], -3)." ".substr("00".$asdvs[$c+4], -3)." ".($asdvs[$c+5]+256*$asdvs[$c+6]+65536*$asdvs[$c+7]+16777216*$asdvs[$c+8])."\n"; } } } $this->_filecontent[$_name] .= "SMART Error Log Version"; } } } } break; case 'command': if (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT')) foreach ($disks as $disk) { if (trim($disk) != "") { $diskdev = ""; if (preg_match("/\s*\(([^\(\(]*)\)\s*(.*)/", $disk, $devdisk)) { $diskname = trim($devdisk[2]); if (trim($devdisk[1]) != "") { $diskdev = "--device ".preg_replace('/\./', ',', trim($devdisk[1])); } } else { $diskname = trim($disk); } $buffer = ""; if (trim($diskname != "") && (CommonFunctions::executeProgram('smartctl', '--all'.' '.$diskdev.' '.$diskname, $buffer, PSI_DEBUG))) { $this->_filecontent[trim($disk)] = $buffer; } } } break; case 'data': $dn=0; if (!defined('PSI_EMU_HOSTNAME')) foreach ($disks as $disk) { $buffer=""; if (CommonFunctions::rftsdata("smart{$dn}.tmp", $buffer) && !empty($buffer)) { if (preg_match("/^.+\n.{(.+)}/", $buffer, $out)) { //wmic format $line = trim(preg_replace('/[\x00-\x09\x0b-\x1F]/', '', $out[1])); $this->_filecontent[$disk] = "\nVendor Specific SMART Attributes with Thresholds\n"; $this->_filecontent[$disk] .= "ID# _ATTRIBUTE_NAME_ FLAG VALUE WORST RAW_VALUE\n"; $asdvs = preg_split('/\s*,\s*/', trim($line), -1, PREG_SPLIT_NO_EMPTY); for ($c = 2; $c < count($asdvs); $c += 12) { //Attribute values 0x00, 0xff are invalid $id = $asdvs[$c]; if (($id != 0) && ($id != 255)) { switch ($id) { case 3: //raw16(avg16) $this->_filecontent[$disk] .= $id." ID".$id." 0x".substr("0".dechex(intval($asdvs[$c+2])), -2).substr("0".dechex(intval($asdvs[$c+1])), -2)." ".substr("00".$asdvs[$c+3], -3)." ".substr("00".$asdvs[$c+4], -3)." ".($asdvs[$c+5]+256*$asdvs[$c+6])."\n"; break; case 5: case 196: //raw16(raw16) $this->_filecontent[$disk] .= $id." ID".$id." 0x".substr("0".dechex(intval($asdvs[$c+2])), -2).substr("0".dechex(intval($asdvs[$c+1])), -2)." ".substr("00".$asdvs[$c+3], -3)." ".substr("00".$asdvs[$c+4], -3)." ".($asdvs[$c+5]+256*$asdvs[$c+6])."\n"; break; case 9: case 240: //raw24(raw8) $this->_filecontent[$disk] .= $id." ID".$id." 0x".substr("0".dechex(intval($asdvs[$c+2])), -2).substr("0".dechex(intval($asdvs[$c+1])), -2)." ".substr("00".$asdvs[$c+3], -3)." ".substr("00".$asdvs[$c+4], -3)." ".($asdvs[$c+5]+256*$asdvs[$c+6]+65536*$asdvs[$c+7])."\n"; break; case 190: case 194: //tempminmax $this->_filecontent[$disk] .= $id." ID".$id." 0x".substr("0".dechex(intval($asdvs[$c+2])), -2).substr("0".dechex(intval($asdvs[$c+1])), -2)." ".substr("00".$asdvs[$c+3], -3)." ".substr("00".$asdvs[$c+4], -3)." ".($asdvs[$c+5]+256*$asdvs[$c+6])."\n"; break; default: //raw48 $this->_filecontent[$disk] .= $id." ID".$id." 0x".substr("0".dechex(intval($asdvs[$c+2])), -2).substr("0".dechex(intval($asdvs[$c+1])), -2)." ".substr("00".$asdvs[$c+3], -3)." ".substr("00".$asdvs[$c+4], -3)." ".($asdvs[$c+5]+256*$asdvs[$c+6]+65536*$asdvs[$c+7]+16777216*$asdvs[$c+8])."\n"; } } } $this->_filecontent[$disk] .= "SMART Error Log Version"; } else { $this->_filecontent[$disk] = $buffer; } } $dn++; } break; } } /** * doing all tasks to get the required informations that the plugin needs * result is stored in an internal array * * @return void */ public function execute() { if (empty($this->_filecontent) || empty($this->_ids)) { return; } foreach ($this->_filecontent as $disk=>$result) { if (preg_match('/\n((Smartctl open device:.+ failed:[^\r\n]+)|(Device does not support SMART)|(SMART support is:\s*Unavailable -[^\r\n]+))/', $result, $error)) { $this->global_error->addError("SMART plugin ".$disk." error", trim($error[1])); continue; } // set the start and end offset in the result string at the beginning and end respectively // just in case we don't find the two strings, so that it still works as expected. $startIndex = 0; $endIndex = 0; $vendorInfos = ""; // locate the beginning string offset for the attributes if (preg_match('/(Vendor Specific SMART Attributes with Thresholds)/', $result, $matches, PREG_OFFSET_CAPTURE)) $startIndex = $matches[0][1]; // locate the end string offset for the attributes, this is usually right before string "SMART Error Log Version" or "SMART Error Log not supported" or "Error SMART Error Log Read failed" (hopefully every output has it!) if (preg_match('/(SMART Error Log Version)|(SMART Error Log not supported)|(Error SMART Error Log Read failed)/', $result, $matches, PREG_OFFSET_CAPTURE)) $endIndex = $matches[0][1]; if ($startIndex && $endIndex && ($endIndex>$startIndex)) $vendorInfos = preg_split("/\n/", substr($result, $startIndex, $endIndex - $startIndex)); $i = 0; // Line number if (!empty($vendorInfos)) { if (preg_match('/\nSMART overall-health self-assessment test result\: ([^!\n]+)/', $result, $tmpbuf)) { $event=trim($tmpbuf[1]); if (!empty($event) && ($event!=='PASSED')) { $this->_event[$disk] = $event; } } $cid = 0; if (!empty($this->_ids[$cid]) && ($this->_ids[$cid]["value_type"]=="raw_value")) { if (preg_match('/\nATA Error Count\: (\d+)/', $result, $tmpbuf)) { $this->_result[$disk][$i]['id'] = $cid; $this->_result[$disk][$i]['attribute_name'] = "ATA_Error_Count"; $this->_result[$disk][$i]['raw_value'] = $tmpbuf[1]; $i++; } elseif (preg_match('/\nNo Errors Logged/', $result, $tmpbuf)) { $this->_result[$disk][$i]['id'] = $cid; $this->_result[$disk][$i]['attribute_name'] = "ATA_Error_Count"; $this->_result[$disk][$i]['raw_value'] = 0; $i++; } } $labels = preg_split('/\s+/', $vendorInfos[1]); foreach ($labels as $k=>$v) { $labels[$k] = str_replace('#', '', strtolower($v)); } foreach ($vendorInfos as $line) if (preg_match('/^\s*((\d+)|(id))\s/', $line)) { $line = preg_replace('/^\s+/', '', $line); $values = preg_split('/\s+/', $line); if (count($values) > count($labels)) { $values = array_slice($values, 0, count($labels), true); } $j = 0; $found = 0; foreach ($values as $value) { if (in_array($value, array_keys($this->_ids)) && ($labels[$j] == 'id') && ($value > 0) && ($value < 255)) { $this->_result[$disk][$i][$labels[$j]] = $value; $found = $value; } elseif (($found > 0) && (($labels[$j] == 'attribute_name') || ($labels[$j] == $this->_ids[$found]["value_type"]))) { $this->_result[$disk][$i][$labels[$j]] = $value; } $j++; } $i++; } } else { //SCSI and MVMe devices $cid = 187; if (!empty($this->_ids[$cid]) && ($this->_ids[$cid]["value_type"]=="raw_value")) { if (preg_match('/\nread\: (.*)\n/', $result, $tmpbufr) && preg_match('/\nwrite\: (.*)\n/', $result, $tmpbufw)) { $valuesr=preg_split('/ +/', $tmpbufr[0]); $valuesw=preg_split('/ +/', $tmpbufw[0]); if (!preg_match('/\nverify\: (.*)\n/', $result, $tmpbufv)) { //if no verify value yet $valuesv[7] = 0; } else { $valuesv=preg_split('/ +/', $tmpbufv[0]); } if (!empty($valuesr) && !empty($valuesw) && !empty($valuesv) && ($valuesr[7]!=null) && ($valuesw[7]!=null) && ($valuesw[7]!=null)) { $this->_result[$disk][$i]['id'] = $cid; $this->_result[$disk][$i]['attribute_name'] = "Reported_Uncorrectable_Errors"; $this->_result[$disk][$i]['raw_value'] = intval($valuesr[7])+intval($valuesw[7])+intval($valuesv[7]); $i++; } } elseif (preg_match('/\nMedia and Data Integrity Errors\: (.*)\n/', $result, $tmpbuf)) { $values=preg_split('/ +/', $tmpbuf[0]); if (!empty($values) && ($values[5]!=null)) { $vals=preg_replace('/,/', '', trim($values[5])); $this->_result[$disk][$i]['id'] = $cid; $this->_result[$disk][$i]['attribute_name'] = "Reported_Uncorrectable_Errors"; $this->_result[$disk][$i]['raw_value'] = $vals; $i++; } } } $cid = 5; if (!empty($this->_ids[$cid]) && ($this->_ids[$cid]["value_type"]=="raw_value")) { if (preg_match('/\nElements in grown defect list\: (.*)\n/', $result, $tmpbuf)) { $values=preg_split('/ +/', $tmpbuf[0]); if (!empty($values) && ($values[5]!=null)) { $this->_result[$disk][$i]['id'] = $cid; $this->_result[$disk][$i]['attribute_name'] = "Reallocated_Sector_Ct"; $this->_result[$disk][$i]['raw_value'] = trim($values[5]); $i++; } } } $cid = 9; if (!empty($this->_ids[$cid]) && ($this->_ids[$cid]["value_type"]=="raw_value")) { if (preg_match('/\n +number of hours powered up = (.*)\n/', $result, $tmpbuf)) { $values=preg_split('/ +/', $tmpbuf[0]); if (!empty($values) && ($values[7]!=null)) { $vals=preg_split('/[,\.]/', trim($values[7])); $this->_result[$disk][$i]['id'] = $cid; $this->_result[$disk][$i]['attribute_name'] = "Power_On_Hours"; $this->_result[$disk][$i]['raw_value'] = $vals[0]; $i++; } } elseif (preg_match('/\nPower On Hours\: (.*)\n/', $result, $tmpbuf)) { $values=preg_split('/ +/', $tmpbuf[0]); if (!empty($values) && ($values[3]!=null)) { $vals=preg_replace('/,/', '', trim($values[3])); $this->_result[$disk][$i]['id'] = $cid; $this->_result[$disk][$i]['attribute_name'] = "Power_On_Hours"; $this->_result[$disk][$i]['raw_value'] = $vals; $i++; } } } $cid = 194; if (!empty($this->_ids[$cid]) && ($this->_ids[$cid]["value_type"]=="raw_value")) { if (preg_match('/\nCurrent Drive Temperature\: (.*)\n/', $result, $tmpbuf)) { $values=preg_split('/ +/', $tmpbuf[0]); if (!empty($values) && ($values[3]!=null)) { $this->_result[$disk][$i]['id'] = $cid; $this->_result[$disk][$i]['attribute_name'] = "Temperature_Celsius"; $this->_result[$disk][$i]['raw_value'] = trim($values[3]); $i++; } } elseif (preg_match('/\nTemperature\: (.*) Celsius/', $result, $tmpbuf)) { $values=preg_split('/ +/', $tmpbuf[0]); if (!empty($values) && ($values[1]!=null)) { $this->_result[$disk][$i]['id'] = $cid; $this->_result[$disk][$i]['attribute_name'] = "Temperature_Celsius"; $this->_result[$disk][$i]['raw_value'] = trim($values[1]); $i++; } } } $cid = 12; if (!empty($this->_ids[$cid]) && ($this->_ids[$cid]["value_type"]=="raw_value")) { if (preg_match('/\nPower Cycles\: (.*)\n/', $result, $tmpbuf)) { $values=preg_split('/ +/', $tmpbuf[0]); if (!empty($values) && ($values[2]!=null)) { $vals=preg_replace('/,/', '', trim($values[2])); $this->_result[$disk][$i]['id'] = $cid; $this->_result[$disk][$i]['attribute_name'] = "Power_Cycle_Count"; $this->_result[$disk][$i]['raw_value'] = $vals; $i++; } } } $cid = 192; if (!empty($this->_ids[$cid]) && ($this->_ids[$cid]["value_type"]=="raw_value")) { if (preg_match('/\nUnsafe Shutdowns\: (.*)\n/', $result, $tmpbuf)) { $values=preg_split('/ +/', $tmpbuf[0]); if (!empty($values) && ($values[2]!=null)) { $vals=preg_replace('/,/', '', trim($values[2])); $this->_result[$disk][$i]['id'] = $cid; $this->_result[$disk][$i]['attribute_name'] = "Unsafe_Shutdown_Count"; $this->_result[$disk][$i]['raw_value'] = $vals; $i++; } } } $cid = 255; if (!empty($this->_ids[$cid]) && ($this->_ids[$cid]["value_type"]=="raw_value")) { if (preg_match('/\nNon-medium error count\: (.*)\n/', $result, $tmpbuf)) { $values=preg_split('/ +/', $tmpbuf[0]); if (!empty($values) && ($values[3]!=null)) { $this->_result[$disk][$i]['id'] = $cid; $this->_result[$disk][$i]['attribute_name'] = "Non-medium_Error_Count"; $this->_result[$disk][$i]['raw_value'] = trim($values[3]); $i++; } } } $cid = 32; if (!empty($this->_ids[$cid]) && (($this->_ids[$cid]["value_type"]=="raw_value") || ($this->_ids[$cid]["value_type"]=="value"))) { if (preg_match('/\nData Units Read\: (.*)\n/', $result, $tmpbuf)) { $values=preg_split('/ +/', $tmpbuf[0]); if (!empty($values) && ($values[3]!=null)) { $vals=preg_replace('/,/', '', trim($values[3])); $this->_result[$disk][$i]['id'] = $cid; $this->_result[$disk][$i]['attribute_name'] = "Data_Units_Read"; if ($this->_ids[$cid]["value_type"]=="raw_value") $this->_result[$disk][$i]['raw_value'] = $vals; if (($this->_ids[$cid]["value_type"]=="value") && preg_match('/\[(.+)\]/', $tmpbuf[1], $tmpbuf2)) { $this->_result[$disk][$i]['value'] = trim($tmpbuf2[1]); } $i++; } } } $cid = 48; if (!empty($this->_ids[$cid]) && (($this->_ids[$cid]["value_type"]=="raw_value") || ($this->_ids[$cid]["value_type"]=="value"))) { if (preg_match('/\nData Units Written\: (.*)\n/', $result, $tmpbuf)) { $values=preg_split('/ +/', $tmpbuf[0]); if (!empty($values) && ($values[3]!=null)) { $vals=preg_replace('/,/', '', trim($values[3])); $this->_result[$disk][$i]['id'] = $cid; $this->_result[$disk][$i]['attribute_name'] = "Data_Units_Written"; if ($this->_ids[$cid]["value_type"]=="raw_value") $this->_result[$disk][$i]['raw_value'] = $vals; if (($this->_ids[$cid]["value_type"]=="value") && preg_match('/\[(.+)\]/', $tmpbuf[1], $tmpbuf2)) { $this->_result[$disk][$i]['value'] = trim($tmpbuf2[1]); } $i++; } } } $cid = 4; if (!empty($this->_ids[$cid]) && ($this->_ids[$cid]["value_type"]=="raw_value")) { if (preg_match('/\nAccumulated start-stop cycles\: (.*)\n/', $result, $tmpbuf)) { $values=preg_split('/ +/', $tmpbuf[0]); if (!empty($values) && ($values[3]!=null)) { $this->_result[$disk][$i]['id'] = $cid; $this->_result[$disk][$i]['attribute_name'] = "Start_Stop_Count"; $this->_result[$disk][$i]['raw_value'] = trim($values[3]); $i++; } } } if (preg_match('/\nSMART Health Status\: ([^\[\n]+)/', $result, $tmpbuf)) { $event=trim($tmpbuf[1]); if (!empty($event) && ($event!=='OK')) { $this->_event[$disk] = $event; } } } } //replacement where necessary foreach ($this->_ids as $id=>$column) if (isset($column["replace"])) { foreach ($this->_result as $diskName=>$diskInfos) { $not_found = true; foreach ($diskInfos as $lineInfos) if (($lineInfos["id"] == $column["replace"]) && isset($lineInfos[$column["value_type"]])) { $not_found = false; break; } foreach ($diskInfos as $did=>$lineInfos) if (($lineInfos["id"] == $id) && isset($lineInfos[$column["value_type"]])) { if ($not_found) $this->_result[$diskName][$did]["id"] = $column["replace"]; else unset($this->_result[$diskName][$did]); break; } } } //reformat to power on hours foreach ($this->_result as $diskName=>$diskInfos) { foreach ($diskInfos as $did=>$lineInfos) if ((($lineInfos['id'] == 9) && isset($lineInfos['attribute_name'])) && (($lineInfos['attribute_name'] === "Power_On_Hours_and_Msec") || ($lineInfos['attribute_name'] === "Power_On_Seconds"))) { if (isset($lineInfos['raw_value'])) { $raw_value = preg_split("/h/", $lineInfos['raw_value'], -1, PREG_SPLIT_NO_EMPTY); $this->_result[$diskName][$did]['raw_value'] = $raw_value[0]; } $this->_result[$diskName][$did]['attribute_name'] = "Power_On_Hours"; break; } } //set attribute name/names foreach ($this->_ids as $id=>$column) if (!isset($column["replace"])) { foreach ($this->_result as $diskName=>$diskInfos) { foreach ($diskInfos as $lineInfos) if (($lineInfos["id"] == $id) && isset($lineInfos["attribute_name"])) { $canname = preg_replace("/\s|;/", "_", trim($lineInfos["attribute_name"])); if (!isset($this->_ids[$id]["attribute_name"])) $this->_ids[$id]["attribute_name"] = $canname; elseif (!in_array($canname, preg_split('/;/', $this->_ids[$id]["attribute_name"]))) $this->_ids[$id]["attribute_name"] .= ";".$canname; break; } } } } /** * generates the XML content for the plugin * * @return SimpleXMLElement entire XML content for the plugin */ public function xml() { if (empty($this->_result) || empty($this->_ids)) { return $this->xml->getSimpleXmlElement(); } $columnsChild = $this->xml->addChild('columns'); // Fill the xml with preferences foreach ($this->_ids as $id=>$column) if (isset($column["attribute_name"])) { $columnChild = $columnsChild->addChild('column'); $columnChild->addAttribute('id', $id); $columnChild->addAttribute('name', $column["value_type"]); $columnChild->addAttribute('attribute_name', $column["attribute_name"]); } $disksChild = $this->xml->addChild('disks'); // Now fill the xml with S.M.A.R.T datas foreach ($this->_result as $diskName=>$diskInfos) { $diskChild = $disksChild->addChild('disk'); $diskChild->addAttribute('name', $diskName); if (isset($this->_event[$diskName])) $diskChild->addAttribute('event', $this->_event[$diskName]); foreach ($diskInfos as $lineInfos) { $lineChild = $diskChild->addChild('attribute'); foreach ($lineInfos as $label=>$value) { $lineChild->addAttribute($label, $value); } } } return $this->xml->getSimpleXmlElement(); } } phpsysinfo-3.4.4/plugins/smart/css/000077500000000000000000000000001467431054600173355ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/smart/css/smart.css000066400000000000000000000002551467431054600211770ustar00rootroot00000000000000/* $Id: smart.css 661 2012-08-27 11:26:39Z namiltd $ */ #Plugin_SMARTTable tbody tr td { text-align: right; } #Plugin_SMARTTable thead tr th { cursor: pointer; } phpsysinfo-3.4.4/plugins/smart/js/000077500000000000000000000000001467431054600171615ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/smart/js/smart.js000066400000000000000000000145541467431054600206560ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008 by phpSysInfo - A PHP System Information Script * * http://phpsysinfo.sourceforge.net/ * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //$Id: smart.js 707 2012-11-28 10:20:49Z namiltd $ /*global $, jQuery, genlang, formatTemp, plugin_translate, buildBlock, datetime */ "use strict"; var smart_show = false, smart_table; //appendcss("./plugins/SMART/css/SMART.css"); /** * fill the plugin block with table structure */ function smart_buildTable(xml) { var html = "", hostname = ""; var smartid; var attribute_name; hostname = $("Plugins Plugin_SMART", xml).attr('Hostname'); if (hostname !== undefined) { $('span[class=Hostname_SMART]').html(hostname); } html += "
    \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; $("Plugins Plugin_SMART columns column", xml).each(function smart_table_header() { attribute_name = $(this).attr("attribute_name"); if (typeof attribute_name === 'string') attribute_name = attribute_name.replace(/_/g, " ").replace(/;/g, "
    "); else attribute_name = "Attribute " + $(this).attr("id"); html += " \n"; }); html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += "
    " + genlang(2, "SMART") + "" + attribute_name + "
    \n"; html += "
    \n"; $("#Plugin_SMART").append(html); smart_table = $("#Plugin_SMARTTable").dataTable({ "bPaginate": false, "bLengthChange": false, "bFilter": false, "bSort": true, "bInfo": false, "bProcessing": true, "bAutoWidth": false, "bStateSave": true }); } /** * insert content into table * @param {jQuery} xml plugin-XML */ function smart_populate(xml) { var name = "", event = "", columns = []; smart_table.fnClearTable(); // Get datas that the user want to be displayed $("Plugins Plugin_SMART columns column", xml).each(function smart_find_columns() { columns[parseInt($(this).attr("id"), 10)] = $(this).attr("name"); smart_show = true; }); // Now we add selected datas in the table $("Plugins Plugin_SMART disks disk", xml).each(function smart_fill_table() { var values = [], display = [], i; name = $(this).attr("name").replace(/\)/g, ")"); $(this).find("attribute").each(function smart_fill_data() { if (columns[parseInt($(this).attr("id"), 10)] && columns[parseInt($(this).attr("id"), 10)] !== "") { values[parseInt($(this).attr("id"), 10)] = $(this).attr(columns[parseInt($(this).attr("id"), 10)]); } }); event = $(this).attr("event"); if (event !== undefined) display.push("" + name + "
    " + name +" \"!\"
    "); else display.push("" + name + "" + name); // On "columns" so we get the right order // fixed for Firefox (fix wrong order) $("Plugins Plugin_SMART columns column", xml).each(function smart_find_columns() { i = parseInt($(this).attr("id"), 10); if (typeof(values[i])==='undefined') { display.push(""); } else if (i === 194) { display.push("" + values[i] + "" + formatTemp(values[i], xml)); } else { display.push("" + values[i] + "" + values[i]); } }); smart_table.fnAddData(display); }); } /** * load the xml via ajax */ function smart_request() { $("#Reload_SMARTTable").attr("title", "reload"); $.ajax({ url: "xml.php?plugin=SMART", dataType: "xml", error: function smart_error() { $.jGrowl("Error loading XML document for Plugin SMART"); }, success: function smart_buildBlock(xml) { populateErrors(xml); if ((smart_table === undefined) || (typeof(smart_table) !== "object")) { smart_buildTable(xml); } smart_populate(xml); if (smart_show) { plugin_translate("SMART"); $("#Plugin_SMART").show(); } } }); } $(document).ready(function smart_buildpage() { $("#footer").before(buildBlock("SMART", 1, true)); $("#Plugin_SMART").addClass("fullsize"); smart_request(); $("#Reload_SMARTTable").click(function smart_reload(id) { smart_request(); $(this).attr("title", datetime()); }); }); phpsysinfo-3.4.4/plugins/smart/js/smart_bootstrap.js000066400000000000000000000064071467431054600227510ustar00rootroot00000000000000function renderPlugin_smart(data) { if ((data.Plugins.Plugin_SMART !== undefined) && (data.Plugins.Plugin_SMART.columns !== undefined) && (items(data.Plugins.Plugin_SMART.columns.column).length > 0) && (data.Plugins.Plugin_SMART.disks !== undefined) && (items(data.Plugins.Plugin_SMART.disks.disk).length > 0)) { var smartitems = items(data.Plugins.Plugin_SMART.columns.column); var html = ''; var i,j; var smartid; var attribute_name; html+=""; html+=""; html+=""+genlang(2, 'smart')+""; // Name for (i = 0; i < smartitems.length ; i++) { attribute_name = smartitems[i]["@attributes"].attribute_name; if (typeof attribute_name === 'string') attribute_name = attribute_name.replace(/_/g, " ").replace(/;/g, "
    "); else attribute_name = "Attribute " + smartitems[i]["@attributes"].id; html+=""+ attribute_name + ""; } html+=""; html+=""; var diskitems = items(data.Plugins.Plugin_SMART.disks.disk); html += ''; for (i = 0; i < diskitems.length; i++) { html += ''; if (diskitems[i]["@attributes"].event !== undefined) html += '
    '+ diskitems[i]["@attributes"].name + ' !
    '; else html += ''+ diskitems[i]["@attributes"].name + ''; var attribitems = items(diskitems[i].attribute); var valarray = []; for (j = 0;j < attribitems.length; j++) { valarray[attribitems[j]["@attributes"].id] = attribitems[j]["@attributes"]; } for (j = 0; j < smartitems.length; j++) { smartid = smartitems[j]["@attributes"].id; if ((smartid !== undefined) && (valarray[smartid] !== undefined)) { var itemvalue = valarray[smartid][smartitems[j]["@attributes"].name]; if ((itemvalue !== undefined) && (itemvalue !== '' )) { if (smartid === "194") { html += '' + formatTemp(itemvalue, data.Options["@attributes"].tempFormat) + ''; } else { html += '' + itemvalue + ''; } } else { html += ''; } } else { html += ''; } } html += ''; } html += ''; $('#smart').empty().append(html); $('#smart').addClass("sortable"); sorttable.makeSortable($('#smart')[0]); sorttable.innerSortFunction.apply($('#smart_name')[0], []); $('#block_smart').show(); } else { $('#block_smart').hide(); } } phpsysinfo-3.4.4/plugins/smart/lang/000077500000000000000000000000001467431054600174665ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/smart/lang/cz.xml000066400000000000000000000013041467431054600206220ustar00rootroot00000000000000 S.M.A.R.T Informace Název phpsysinfo-3.4.4/plugins/smart/lang/en.xml000066400000000000000000000013051467431054600206110ustar00rootroot00000000000000 S.M.A.R.T Informations Name phpsysinfo-3.4.4/plugins/smart/lang/fr.xml000066400000000000000000000013021467431054600206130ustar00rootroot00000000000000 Informations S.M.A.R.T Nom phpsysinfo-3.4.4/plugins/smart/lang/gr.xml000066400000000000000000000013151467431054600206200ustar00rootroot00000000000000 Πληροφορίες S.M.A.R.T Συσκευή phpsysinfo-3.4.4/plugins/smart/lang/pl.xml000066400000000000000000000013061467431054600206230ustar00rootroot00000000000000 Informacje S.M.A.R.T Nazwa phpsysinfo-3.4.4/plugins/smart/lang/ro.xml000066400000000000000000000013011467431054600206230ustar00rootroot00000000000000 Informații S.M.A.R.T Nume phpsysinfo-3.4.4/plugins/smart/smart_bootstrap.html000066400000000000000000000010651467431054600226600ustar00rootroot00000000000000 phpsysinfo-3.4.4/plugins/snmppinfo/000077500000000000000000000000001467431054600174305ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/snmppinfo/class.snmppinfo.inc.php000066400000000000000000000356051467431054600240370ustar00rootroot00000000000000 * @copyright 2011 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version $Id: class.snmppinfo.inc.php 661 2012-08-27 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ class SNMPPInfo extends PSI_Plugin { /** * variable, which holds the content of the command * @var array */ private $_filecontent = array(); /** * variable, which holds the result before the xml is generated out of this array * @var array */ private $_result = array(); /** * read the data into an internal array and also call the parent constructor * * @param String $enc encoding */ public function __construct($enc) { parent::__construct(__CLASS__, $enc); switch (strtolower(PSI_PLUGIN_SNMPPINFO_ACCESS)) { case 'command': if (defined('PSI_PLUGIN_SNMPPINFO_DEVICES') && is_string(PSI_PLUGIN_SNMPPINFO_DEVICES)) { if (preg_match(ARRAY_EXP, PSI_PLUGIN_SNMPPINFO_DEVICES)) { $printers = eval(PSI_PLUGIN_SNMPPINFO_DEVICES); } else { $printers = array(PSI_PLUGIN_SNMPPINFO_DEVICES); } foreach ($printers as $printer) { CommonFunctions::executeProgram("snmpwalk", "-Ona -c public -v 1 -t ".PSI_SNMP_TIMEOUT_INT." -r ".PSI_SNMP_RETRY_INT." ".$printer." .1.3.6.1.2.1.1.5", $buffer, PSI_DEBUG); if (strlen($buffer) > 0) { $this->_filecontent[$printer] = $buffer; CommonFunctions::executeProgram("snmpwalk", "-Ona -c public -v 1 -t ".PSI_SNMP_TIMEOUT_INT." -r ".PSI_SNMP_RETRY_INT." ".$printer." .1.3.6.1.4.1.367.3.2.1.2.24.1.1", $buffer1, false); if (strlen($buffer1) > 0) { $this->_filecontent[$printer] .= "\n".$buffer1; } CommonFunctions::executeProgram("snmpwalk", "-Ona -c public -v 1 -t ".PSI_SNMP_TIMEOUT_INT." -r ".PSI_SNMP_RETRY_INT." ".$printer." .1.3.6.1.2.1.43.11.1.1", $buffer2, PSI_DEBUG); if (strlen($buffer2) > 0) { $this->_filecontent[$printer] .= "\n".$buffer2; } CommonFunctions::executeProgram("snmpwalk", "-Ona -c public -v 1 -t ".PSI_SNMP_TIMEOUT_INT." -r ".PSI_SNMP_RETRY_INT." ".$printer." .1.3.6.1.2.1.43.18.1.1", $buffer3, PSI_DEBUG); if (strlen($buffer3) > 0) { $this->_filecontent[$printer] .= "\n".$buffer3; } } } } break; case 'php-snmp': if (!extension_loaded("snmp")) { $this->global_error->addError("Requirements error", "SNMPPInfo plugin requires the snmp extension to php in order to work properly"); break; } snmp_set_valueretrieval(SNMP_VALUE_LIBRARY); snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC); if (defined('PSI_PLUGIN_SNMPPINFO_DEVICES') && is_string(PSI_PLUGIN_SNMPPINFO_DEVICES)) { if (preg_match(ARRAY_EXP, PSI_PLUGIN_SNMPPINFO_DEVICES)) { $printers = eval(PSI_PLUGIN_SNMPPINFO_DEVICES); } else { $printers = array(PSI_PLUGIN_SNMPPINFO_DEVICES); } foreach ($printers as $printer) { if (! PSI_DEBUG) { restore_error_handler(); /* default error handler */ $old_err_rep = error_reporting(); error_reporting(E_ERROR); /* fatal errors only */ } $bufferarr=snmprealwalk($printer, "public", ".1.3.6.1.2.1.1.5", 1000000 * PSI_SNMP_TIMEOUT_INT, PSI_SNMP_RETRY_INT); if (! PSI_DEBUG) { error_reporting($old_err_rep); /* restore error level */ set_error_handler('errorHandlerPsi'); /* restore error handler */ } if (! empty($bufferarr)) { $buffer=""; foreach ($bufferarr as $id=>$string) { $buffer .= $id." = ".$string."\n"; } restore_error_handler(); /* default error handler */ $old_err_rep = error_reporting(); error_reporting(E_ERROR); /* fatal errors only */ $bufferarr1=snmprealwalk($printer, "public", ".1.3.6.1.4.1.367.3.2.1.2.24.1.1", 1000000 * PSI_SNMP_TIMEOUT_INT, PSI_SNMP_RETRY_INT); error_reporting($old_err_rep); /* restore error level */ set_error_handler('errorHandlerPsi'); /* restore error handler */ if (! empty($bufferarr1)) { foreach ($bufferarr1 as $id=>$string) { $buffer .= $id." = ".$string."\n"; } } if (! PSI_DEBUG) { restore_error_handler(); /* default error handler */ $old_err_rep = error_reporting(); error_reporting(E_ERROR); /* fatal errors only */ } $bufferarr2=snmprealwalk($printer, "public", ".1.3.6.1.2.1.43.11.1.1", 1000000 * PSI_SNMP_TIMEOUT_INT, PSI_SNMP_RETRY_INT); if (! PSI_DEBUG) { error_reporting($old_err_rep); /* restore error level */ set_error_handler('errorHandlerPsi'); /* restore error handler */ } if (! empty($bufferarr2)) { foreach ($bufferarr2 as $id=>$string) { $buffer .= $id." = ".$string."\n"; } } if (! PSI_DEBUG) { restore_error_handler(); /* default error handler */ $old_err_rep = error_reporting(); error_reporting(E_ERROR); /* fatal errors only */ } $bufferarr3=snmprealwalk($printer, "public", ".1.3.6.1.2.1.43.18.1.1", 1000000 * PSI_SNMP_TIMEOUT_INT, PSI_SNMP_RETRY_INT); if (! PSI_DEBUG) { error_reporting($old_err_rep); /* restore error level */ set_error_handler('errorHandlerPsi'); /* restore error handler */ } if (! empty($bufferarr3)) { foreach ($bufferarr3 as $id=>$string) { $buffer .= $id." = ".$string."\n"; } } if (strlen(trim($buffer)) > 0) { $this->_filecontent[$printer] = $buffer; } } } } break; case 'data': if (defined('PSI_PLUGIN_SNMPPINFO_DEVICES') && is_string(PSI_PLUGIN_SNMPPINFO_DEVICES)) { if (preg_match(ARRAY_EXP, PSI_PLUGIN_SNMPPINFO_DEVICES)) { $printers = eval(PSI_PLUGIN_SNMPPINFO_DEVICES); } else { $printers = array(PSI_PLUGIN_SNMPPINFO_DEVICES); } $pn=0; foreach ($printers as $printer) { $buffer=""; if (CommonFunctions::rftsdata("snmppinfo{$pn}.tmp", $buffer) && !empty($buffer)) { $this->_filecontent[$printer] = $buffer; } $pn++; } } break; default: $this->global_error->addConfigError("__construct()", "[snmppinfo] ACCESS"); } } /** * doing all tasks to get the required informations that the plugin needs * result is stored in an internal array * * @return void */ public function execute() { if (empty($this->_filecontent)) { return; } foreach ($this->_filecontent as $printer=>$result) { $result = preg_replace('/End of MIB\r?\n/', '', $result); $result = preg_replace('/\s\r?\n([^\.])/', ' $1', $result); $lines = preg_split('/\r?\n/', $result); foreach ($lines as $line) { if (preg_match('/^(.+) = Hex-STRING:\s(.+)/', $line, $linetmp)) { $hexchars = explode(" ", trim($linetmp[2])); $newstring = ""; foreach ($hexchars as $hexchar) { $hexint = hexdec($hexchar); if (($hexint<32) || ($hexint>126)) { $newstring .= "."; } else { $newstring .= chr($hexint); } } if ($newstring!=="") { $line = $linetmp[1]." = STRING: ".$newstring; } } if (preg_match('/^\.1\.3\.6\.1\.2\.1\.43\.11\.1\.1\.6\.1\.(.*) = STRING:\s(.*)/', $line, $data)) { $this->_result[$printer][$data[1]]['prtMarkerSuppliesDescription']=trim($data[2], "\""); } elseif (preg_match('/^\.1\.3\.6\.1\.2\.1\.43\.11\.1\.1\.7\.1\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $this->_result[$printer][$data[1]]['prtMarkerSuppliesSupplyUnit']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.2\.1\.43\.11\.1\.1\.8\.1\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $this->_result[$printer][$data[1]]['prtMarkerSuppliesMaxCapacity']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.2\.1\.43\.11\.1\.1\.9\.1\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $this->_result[$printer][$data[1]]['prtMarkerSuppliesLevel']=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.2\.1\.1\.5\.0 = STRING:\s(.*)/', $line, $data)) { $this->_result[$printer][0]['prtMarkerSuppliesDescription']=trim($data[1], "\""); } elseif (preg_match('/^\.1\.3\.6\.1\.2\.1\.43\.18\.1\.1\.8\.1\.(.*) = STRING:\s(.*)/', $line, $data)) { $this->_result[$printer][99][$data[1]]["message"]=trim($data[2], "\""); } elseif (preg_match('/^\.1\.3\.6\.1\.2\.1\.43\.18\.1\.1\.2\.1\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $this->_result[$printer][99][$data[1]]["severity"]=$data[2]; } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.367\.3\.2\.1\.2\.24\.1\.1\.2\.(.*) = STRING:\s(.*)/', $line, $data)) { $this->_result[$printer][$data[1]]['prtMarkerSuppliesDescriptionRicoh']=trim($data[2], "\""); } elseif (preg_match('/^\.1\.3\.6\.1\.4\.1\.367\.3\.2\.1\.2\.24\.1\.1\.5\.(.*) = INTEGER:\s(.*)/', $line, $data)) { $this->_result[$printer][$data[1]]['prtMarkerSuppliesLevelRicoh']=$data[2]; } } } } /** * generates the XML content for the plugin * * @return SimpleXMLElement entire XML content for the plugin */ public function xml() { foreach ($this->_result as $printer=>$markersupplies_item) { $xmlsnmppinfo_printer = $this->xml->addChild("Printer"); $xmlsnmppinfo_printer->addAttribute("Device", $printer); if (isset($markersupplies_item[1]) && isset($markersupplies_item[1]['prtMarkerSuppliesDescriptionRicoh']) && isset($markersupplies_item[1]['prtMarkerSuppliesLevelRicoh'])) { $ricoh = true; } else { $ricoh = false; } foreach ($markersupplies_item as $marker=>$snmppinfo_item) { if ($marker==0) { $xmlsnmppinfo_printer->addAttribute("Name", $snmppinfo_item['prtMarkerSuppliesDescription']); } elseif ($marker==99) { foreach ($snmppinfo_item as $item=>$iarr) { if (isset($iarr["message"]) && $iarr["message"] != "") { $xmlsnmppinfo_errors = $xmlsnmppinfo_printer->addChild("PrinterMessage"); $xmlsnmppinfo_errors->addAttribute("Message", $iarr["message"]); $xmlsnmppinfo_errors->addAttribute("Severity", $iarr["severity"]); } } } else { if ($ricoh) { if (isset($snmppinfo_item['prtMarkerSuppliesDescriptionRicoh'])) { $xmlsnmppinfo = $xmlsnmppinfo_printer->addChild("MarkerSupplies"); $xmlsnmppinfo->addAttribute("Description", $snmppinfo_item['prtMarkerSuppliesDescriptionRicoh']); $xmlsnmppinfo->addAttribute("SupplyUnit", "19"); $xmlsnmppinfo->addAttribute("MaxCapacity", "100"); $xmlsnmppinfo->addAttribute("Level", isset($snmppinfo_item['prtMarkerSuppliesLevelRicoh']) ? $snmppinfo_item['prtMarkerSuppliesLevelRicoh'] : ""); } } else { $xmlsnmppinfo = $xmlsnmppinfo_printer->addChild("MarkerSupplies"); $xmlsnmppinfo->addAttribute("Description", isset($snmppinfo_item['prtMarkerSuppliesDescription']) ? $snmppinfo_item['prtMarkerSuppliesDescription'] : ""); $xmlsnmppinfo->addAttribute("SupplyUnit", isset($snmppinfo_item['prtMarkerSuppliesSupplyUnit']) ? $snmppinfo_item['prtMarkerSuppliesSupplyUnit'] : ""); $xmlsnmppinfo->addAttribute("MaxCapacity", isset($snmppinfo_item['prtMarkerSuppliesMaxCapacity']) ? $snmppinfo_item['prtMarkerSuppliesMaxCapacity'] : ""); $xmlsnmppinfo->addAttribute("Level", isset($snmppinfo_item['prtMarkerSuppliesLevel']) ? $snmppinfo_item['prtMarkerSuppliesLevel'] : ""); } } } } return $this->xml->getSimpleXmlElement(); } } phpsysinfo-3.4.4/plugins/snmppinfo/js/000077500000000000000000000000001467431054600200445ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/snmppinfo/js/snmppinfo.js000066400000000000000000000145511467431054600224210ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008 by phpSysInfo - A PHP System Information Script * * http://phpsysinfo.sourceforge.net/ * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ // // $Id: snmppinfo.js 661 2012-08-27 11:26:39Z namiltd $ // /*global $, jQuery, buildBlock, datetime, plugin_translate, createBar, genlang */ "use strict"; var snmppinfo_show = false; /** * build the table where content is inserted * @param {jQuery} xml plugin-XML */ function snmppinfo_buildTable(xml) { var html = "", tree = [], closed = [], hostname = ""; $("#Plugin_SNMPPInfo #Plugin_SNMPPInfoTable").remove(); hostname = $("Plugins Plugin_SNMPInfo", xml).attr('Hostname'); if (hostname !== undefined) { $('span[class=Hostname_SNMPInfo]').html(hostname); } html += "
    \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; var lastdev="", index = 0 ; $("Plugins Plugin_SNMPPInfo Printer MarkerSupplies", xml).each(function snmppinfo_getprinters(id) { var close = 0, name = "", device = "", desc = "", unit = 0, max = 0, level = 0, percent = 0, units = "", supply = 0, sunits = ""; name = $(this).parent().attr("Name"); device = $(this).parent().attr("Device"); desc = $(this).attr("Description"); unit = parseInt($(this).attr("SupplyUnit"), 10); max = parseInt($(this).attr("MaxCapacity"), 10); level = parseInt($(this).attr("Level"), 10); supply = parseInt($(this).attr("SupplyUnit"), 10); if (max>0 && (level>=0) && (level<=max) ) { percent = Math.round(100*level/max); units = level+" / "+max; } else if (max==-2 && (level>=0) && (level<=100) ) { percent = level; units = level+" / 100"; } else if (level==-3) { percent = 100; units = genlang(5, "SNMPPInfo"); } else { percent = 0; units = genlang(6, "SNMPPInfo"); } if (device!=lastdev) { html += " \n"; index = tree.push(0); lastdev = device; } if (!isNaN(supply)) { switch (supply) { case 7: sunits = "
    " + genlang(9, "SNMPPInfo"); break; case 13: sunits = "
    " + genlang(8, "SNMPPInfo"); break; case 15: sunits = "
    " + genlang(7, "SNMPPInfo"); break; case 19: sunits = "
    " + genlang(3, "SNMPPInfo"); break; } } html += " \n"; tree.push(index); snmppinfo_show = true; }); html += " \n"; html += "
    " + genlang(2, "SNMPPInfo") + "" + genlang(3, "SNMPPInfo") + "" + genlang(4, "SNMPPInfo") + "
    " + device + " (" + name + ")
    " + desc + "
    " + createBar(percent) +"" + units + sunits + "
    \n"; html += "
    \n"; $("#Plugin_SNMPPInfo").append(html); $("#Plugin_SNMPPInfoTable").jqTreeTable(tree, { openImg: "./gfx/treeTable/tv-collapsable.gif", shutImg: "./gfx/treeTable/tv-expandable.gif", leafImg: "./gfx/treeTable/tv-item.gif", lastOpenImg: "./gfx/treeTable/tv-collapsable-last.gif", lastShutImg: "./gfx/treeTable/tv-expandable-last.gif", lastLeafImg: "./gfx/treeTable/tv-item-last.gif", vertLineImg: "./gfx/treeTable/vertline.gif", blankImg: "./gfx/treeTable/blank.gif", collapse: closed, column: 0, striped: true, highlight: false, state: false }); } /** * load the xml via ajax */ function snmppinfo_request() { $("#Reload_SNMPPInfoTable").attr("title", "reload"); $.ajax({ url: "xml.php?plugin=SNMPPInfo", dataType: "xml", error: function snmppinfo_error() { $.jGrowl("Error loading XML document for Plugin SNMPPInfo!"); }, success: function snmppinfo_buildblock(xml) { populateErrors(xml); snmppinfo_buildTable(xml); if (snmppinfo_show) { plugin_translate("SNMPPInfo"); $("#Plugin_SNMPPInfo").show(); } } }); } $(document).ready(function snmppinfo_buildpage() { $("#footer").before(buildBlock("SNMPPInfo", 1, true)); $("#Plugin_SNMPPInfo").addClass("halfsize"); snmppinfo_request(); $("#Reload_SNMPPInfoTable").click(function snmppinfo_reload(id) { snmppinfo_request(); $(this).attr("title", datetime()); }); }); phpsysinfo-3.4.4/plugins/snmppinfo/js/snmppinfo_bootstrap.js000066400000000000000000000110321467431054600245050ustar00rootroot00000000000000function renderPlugin_snmppinfo(data) { var directives = { Device: { text: function () { var Name = (this.Name !== undefined) ? (' (' + this.Name + ')'): ''; return this.Device + Name; } }, Percent: { html: function () { var max = parseInt(this.MaxCapacity, 10); var level = parseInt(this.Level, 10); var percent = 0; if (max>0 && (level>=0) && (level<=max) ) { percent = Math.round(100*level/max); } else if (max==-2 && (level>=0) && (level<=100) ) { percent = level; } else if (level==-3) { percent = 100; } return '
    ' + '
    ' + percent + '%
    '; } }, Units: { html: function () { var max = parseInt(this.MaxCapacity, 10); var level = parseInt(this.Level, 10); if (max>0 && (level>=0) && (level<=max) ) { return level+" / "+max; } else if (max==-2 && (level>=0) && (level<=100) ) { return level+" / 100"; } else if (level==-3) { return genlang(5, 'snmppinfo'); // enough } else { return genlang(6, 'snmppinfo'); // unknown } } }, SUnits: { html: function () { var supply = parseInt(this.SupplyUnit, 10); if (isNaN(supply)) { return ""; } else { switch (supply) { case 7: return "
    " + genlang(9, "snmppinfo"); case 13: return "
    " + genlang(8, "snmppinfo"); case 15: return "
    " + genlang(7, "snmppinfo"); case 19: return "
    " + genlang(3, "snmppinfo"); } } } } }; if (data.Plugins.Plugin_SNMPPInfo !== undefined) { var printers = items(data.Plugins.Plugin_SNMPPInfo.Printer); if (printers.length > 0) { var i, j, datas; var html = ""; for (i = 0; i < printers.length; i++) { html+=""; html+=""; html+=""; try { datas = items(printers[i].MarkerSupplies); for (j = 0; j < datas.length; j++) { html+=""; html+=""; html+=""; html+=""; html+=""; } } catch (err) { $("#snmppinfo-" + i).hide(); } } $("#snmppinfo-data").empty().append(html); for (i = 0; i < printers.length; i++) { $('#snmppinfo-'+ i).render(printers[i]["@attributes"], directives); try { datas = items(printers[i].MarkerSupplies); for (j = 0; j < datas.length; j++) { $('#snmppinfo-'+ i+ "-" + j).render(datas[j]["@attributes"], directives); } } catch (err) { $("#snmppinfo-" + i).hide(); } } $('#snmppinfo').treegrid({ initialState: 'expanded', expanderExpandedClass: 'normalicon normalicon-down', expanderCollapsedClass: 'normalicon normalicon-right' }); $('#block_snmppinfo').show(); } else { $('#block_snmppinfo').hide(); } } else { $('#block_snmppinfo').hide(); } } phpsysinfo-3.4.4/plugins/snmppinfo/lang/000077500000000000000000000000001467431054600203515ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/snmppinfo/lang/cz.xml000066400000000000000000000027301467431054600215110ustar00rootroot00000000000000 Informace o tiskárnách Tiskárna Procenta Jednotky dostatek neznámé Tenths of ml Tenths of grams Impressions phpsysinfo-3.4.4/plugins/snmppinfo/lang/de.xml000066400000000000000000000027171467431054600214720ustar00rootroot00000000000000 Drucker Information Drucker Prozent Units genug unbekannt Zehntel ml Tenths of Gramm Auflagen phpsysinfo-3.4.4/plugins/snmppinfo/lang/en.xml000066400000000000000000000027151467431054600215020ustar00rootroot00000000000000 Printer Information Printer Percent Units enough unknown Tenths of ml Tenths of grams Impressions phpsysinfo-3.4.4/plugins/snmppinfo/lang/fr.xml000066400000000000000000000026231467431054600215050ustar00rootroot00000000000000 Imprimantes Imprimante Pourcent Unité suffisamment inconnu Dixièmes de ml Dixièmes de gramme Impressions phpsysinfo-3.4.4/plugins/snmppinfo/lang/gr.xml000066400000000000000000000030361467431054600215050ustar00rootroot00000000000000 Πληροφορίες Εκτυπωτή Εκτυπωτής Ποσοστό Μονάδες αρκετό άγνωστο Δεκάδες ml Δεκάδες γραμμάρια Εκτυπώσεις phpsysinfo-3.4.4/plugins/snmppinfo/lang/pl.xml000066400000000000000000000027111467431054600215070ustar00rootroot00000000000000 Drukarki Drukarka Procent Jednostek dość nieznany Dziesiątych ml Dziesiątych grama Impresji phpsysinfo-3.4.4/plugins/snmppinfo/lang/ro.xml000066400000000000000000000027301467431054600215150ustar00rootroot00000000000000 Informații Imprimantă Imprimantă Procent Unități suficient necunoscut Tenths of ml Tenths of grams Impressions phpsysinfo-3.4.4/plugins/snmppinfo/lang/ru.xml000066400000000000000000000030731467431054600215240ustar00rootroot00000000000000 Информация о принтерах Принтер Процент Еденицы достаточно неизвестный Десятых мл Десятых грамма Отпечатков phpsysinfo-3.4.4/plugins/snmppinfo/snmppinfo_bootstrap.html000066400000000000000000000020771467431054600244320ustar00rootroot00000000000000 phpsysinfo-3.4.4/plugins/stablebit/000077500000000000000000000000001467431054600173705ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/stablebit/class.stablebit.inc.php000066400000000000000000000051531467431054600237320ustar00rootroot00000000000000 * @copyright 2017 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version $Id: class.stablebit.inc.php 661 2012-08-27 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ class StableBit extends PSI_Plugin { /** * variable, which holds the result before the xml is generated out of this array * @var array */ private $_result; /** * read the data into an internal array and also call the parent constructor * * @param String $enc encoding */ public function __construct($enc) { parent::__construct(__CLASS__, $enc); $this->_result = array(); } private $stablebit_items = array('Name', 'Firmware', 'Size', 'TemperatureC', 'PowerState', 'IsHot', 'IsSmartWarning', 'IsSmartPastThresholds', 'IsSmartPastAdvisoryThresholds', 'IsSmartFailurePredicted', 'IsDamaged', 'SerialNumber'); /** * doing all tasks to get the required informations that the plugin needs * result is stored in an internal array * * @return void */ public function execute() { if (((PSI_OS == 'WINNT') && !defined('PSI_EMU_HOSTNAME')) || (defined('PSI_EMU_HOSTNAME') && !defined('PSI_EMU_PORT'))) { try { $wmi = WINNT::initWMI('root\StableBit\Scanner'); $this->_result = WINNT::getWMI($wmi, 'Disks', $this->stablebit_items); } catch (Exception $e) { } } } /** * generates the XML content for the plugin * * @return SimpleXMLElement entire XML content for the plugin */ public function xml() { foreach ($this->_result as $disk_items) { if (isset($disk_items['Name']) && (trim($disk_items['Name']) !== '')) { $xmlstablebit_disk = $this->xml->addChild("Disk"); foreach ($this->stablebit_items as $item) { if (isset($disk_items[$item]) && (($itemvalue=$disk_items[$item]) !== '') && (($item !== 'TemperatureC') || ($itemvalue > 0)) && (($item !== 'SerialNumber') || (defined('PSI_PLUGIN_STABLEBIT_SHOW_SERIAL') && PSI_PLUGIN_STABLEBIT_SHOW_SERIAL))) { $xmlstablebit_disk ->addAttribute($item, $itemvalue); } } } } return $this->xml->getSimpleXmlElement(); } } phpsysinfo-3.4.4/plugins/stablebit/gfx/000077500000000000000000000000001467431054600201545ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/stablebit/gfx/off.gif000066400000000000000000000017341467431054600214220ustar00rootroot00000000000000GIF89aL<ޤ|td\֌LD\T҄tl|ڜTLldLDtڔdTtlTLL<!,'H&\n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; var index = 0; $("Plugins Plugin_StableBit Disk", xml).each(function stablebit_getdisks(id) { var name = ""; name = $(this).attr("Name"); if (name !== undefined) { var serialnumber = "", firmware = "", size = 0, powerstate = "", temperaturec = "", ishot = 0, issmartwarning = 0, issmartpastthresholds = 0, issmartpastadvisorythresholds = 0, issmartfailurepredicted = 0, isdamaged = 0; html += " \n"; index = tree.push(0); serialnumber = $(this).attr("SerialNumber"); if (serialnumber !== undefined) { html += " \n"; tree.push(index); } firmware = $(this).attr("Firmware"); if (firmware !== undefined) { html += " \n"; tree.push(index); } size = parseInt($(this).attr("Size"), 10); if (!isNaN(size)) { html += " \n"; tree.push(index); } powerstate = $(this).attr("PowerState"); if (powerstate !== undefined) { html += " \n"; tree.push(index); } temperaturec = $(this).attr("TemperatureC"); if (temperaturec !== undefined) { html += " \n"; tree.push(index); } if ($(this).attr("IsHot") !== undefined) { ishot = parseInt($(this).attr("IsHot"), 10); if (!isNaN(ishot) && (ishot === 1)) { html += " \n"; } else { html += " \n"; } tree.push(index); } if ($(this).attr("IsSmartWarning") !== undefined) { issmartwarning = parseInt($(this).attr("IsSmartWarning"), 10); if (!isNaN(issmartwarning) && (issmartwarning === 1)) { html += " \n"; } else { html += " \n"; } tree.push(index); } if ($(this).attr("IsSmartPastThresholds") !== undefined) { issmartpastthresholds = parseInt($(this).attr("IsSmartPastThresholds"), 10); if (!isNaN(issmartpastthresholds) && (issmartpastthresholds === 1)) { html += " \n"; } else { html += " \n"; } tree.push(index); } if ($(this).attr("IsSmartPastAdvisoryThresholds") !== undefined) { issmartpastadvisorythresholds = parseInt($(this).attr("IsSmartPastAdvisoryThresholds"), 10); if (!isNaN(issmartpastadvisorythresholds) && (issmartpastadvisorythresholds === 1)) { html += " \n"; } else { html += " \n"; } tree.push(index); } if ($(this).attr("IsSmartFailurePredicted") !== undefined) { issmartfailurepredicted = parseInt($(this).attr("IsSmartFailurePredicted"), 10); if (!isNaN(issmartfailurepredicted) && (issmartfailurepredicted === 1)) { html += " \n"; } else { html += " \n"; } tree.push(index); } if ($(this).attr("IsDamaged") !== undefined) { isdamaged = parseInt($(this).attr("IsDamaged"), 10); if (!isNaN(isdamaged) && (isdamaged === 1)) { html += " \n"; } else { html += " \n"; } tree.push(index); } stablebit_show = true; } }); html += " \n"; html += "
    " + genlang(2, "StableBit") + "" + genlang(3, "StableBit") + "
    " + name + "
    " + genlang(4, "StableBit") + "
    " + serialnumber +"
    " + genlang(5, "StableBit") + "
    " + firmware +"
    " + genlang(6, "StableBit") + "
    " + formatBytes(size, xml) +"
    " + genlang(7, "StableBit") + "
    " + powerstate +"
    " + genlang(8, "StableBit") + "
    " + formatTemp(temperaturec, xml) +"
    " + genlang(9, "StableBit") + "
    \"on\"
    " + genlang(9, "StableBit") + "
    \"off\"
    " + genlang(10, "StableBit") + "
    \"on\"
    " + genlang(10, "StableBit") + "
    \"off\"
    " + genlang(11, "StableBit") + "
    \"on\"
    " + genlang(11, "StableBit") + "
    \"off\"
    " + genlang(12, "StableBit") + "
    \"on\"
    " + genlang(12, "StableBit") + "
    \"off\"
    " + genlang(13, "StableBit") + "
    \"on\"
    " + genlang(13, "StableBit") + "
    \"off\"
    " + genlang(14, "StableBit") + "
    \"on\"
    " + genlang(14, "StableBit") + "
    \"off\"
    \n"; html += " \n"; $("#Plugin_StableBit").append(html); $("#Plugin_StableBitTable").jqTreeTable(tree, { openImg: "./gfx/treeTable/tv-collapsable.gif", shutImg: "./gfx/treeTable/tv-expandable.gif", leafImg: "./gfx/treeTable/tv-item.gif", lastOpenImg: "./gfx/treeTable/tv-collapsable-last.gif", lastShutImg: "./gfx/treeTable/tv-expandable-last.gif", lastLeafImg: "./gfx/treeTable/tv-item-last.gif", vertLineImg: "./gfx/treeTable/vertline.gif", blankImg: "./gfx/treeTable/blank.gif", collapse: closed, column: 0, striped: true, highlight: false, state: false }); } /** * load the xml via ajax */ function stablebit_request() { $("#Reload_StableBitTable").attr("title", "reload"); $.ajax({ url: "xml.php?plugin=StableBit", dataType: "xml", error: function stablebit_error() { $.jGrowl("Error loading XML document for Plugin StableBit!"); }, success: function stablebit_buildblock(xml) { populateErrors(xml); stablebit_buildTable(xml); if (stablebit_show) { plugin_translate("StableBit"); $("#Plugin_StableBit").show(); } } }); } $(document).ready(function stablebit_buildpage() { $("#footer").before(buildBlock("StableBit", 1, true)); $("#Plugin_StableBit").addClass("halfsize"); stablebit_request(); $("#Reload_StableBitTable").click(function stablebit_reload(id) { stablebit_request(); $(this).attr("title", datetime()); }); }); phpsysinfo-3.4.4/plugins/stablebit/js/stablebit_bootstrap.js000066400000000000000000000106021467431054600244070ustar00rootroot00000000000000function renderPlugin_stablebit(data) { var directives = { IsHot: { html: function () { return (this.IsHot === "1") ? "YES" : "NO"; } }, IsSmartWarning: { html: function () { return (this.IsSmartWarning === "1") ? "YES" : "NO"; } }, IsSmartPastThresholds: { html: function () { return (this.IsSmartPastThresholds === "1") ? "YES" : "NO"; } }, IsSmartPastAdvisoryThresholds: { html: function () { return (this.IsSmartPastAdvisoryThresholds === "1") ? "YES" : "NO"; } }, IsSmartFailurePredicted: { html: function () { return (this.IsSmartFailurePredicted === "1") ? "YES" : "NO"; } }, IsDamaged: { html: function () { return (this.IsDamaged === "1") ? "YES" : "NO"; } }, TemperatureC: { html: function () { return formatTemp(this.TemperatureC, data.Options["@attributes"].tempFormat); } }, Size: { html: function () { return formatBytes(this.Size, data.Options["@attributes"].byteFormat); } } }; if (data.Plugins.Plugin_StableBit !== undefined) { var disks = items(data.Plugins.Plugin_StableBit.Disk); if (disks.length > 0) { var i, proc_param; var html = ""; var paramlist = {SerialNumber:4, Firmware:5, Size:6, PowerState:7, TemperatureC:8, IsHot:9, IsSmartWarning:10, IsSmartPastThresholds:11, IsSmartPastAdvisoryThresholds:12, IsSmartFailurePredicted:13, IsDamaged:14}; for (i = 0; i < disks.length; i++) { try { html+=""; html+=""; html+=""; html+=""; for (proc_param in paramlist) { if (disks[i]["@attributes"][proc_param] !== undefined) { html+=""; html+="" + genlang(paramlist[proc_param], 'stablebit') + ""; html+=""; html+=""; } } } catch (err) { $("#stablebit-" + i).hide(); } } $("#stablebit-data").empty().append(html); for (i = 0; i < disks.length; i++) { try { $('#stablebit-'+ i).render(disks[i]["@attributes"]); $("#stablebit-" + i).show(); for (proc_param in paramlist) { if (disks[i]["@attributes"][proc_param] !== undefined) { $('#stablebit-'+ i+ "-" + proc_param).render(disks[i]["@attributes"], directives); } } } catch (err) { $("#stablebit-" + i).hide(); } } $('#stablebit').treegrid({ initialState: 'expanded', expanderExpandedClass: 'normalicon normalicon-down', expanderCollapsedClass: 'normalicon normalicon-right' }); $('#block_stablebit').show(); } else { $('#block_stablebit').hide(); } } else { $('#block_stablebit').hide(); } } phpsysinfo-3.4.4/plugins/stablebit/lang/000077500000000000000000000000001467431054600203115ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/stablebit/lang/en.xml000066400000000000000000000041411467431054600214350ustar00rootroot00000000000000 StableBit Scanner Information Disk Value Serial Number Firmware Size Power state Temperature Is Hot Is SMART Warning Is SMART Past Thresholds Is SMART Past Advisory Thresholds Is SMART Failure Predicted Is Damaged phpsysinfo-3.4.4/plugins/stablebit/lang/gr.xml000066400000000000000000000045661467431054600214560ustar00rootroot00000000000000 Πληροφορίες Ανιχνευτή StableBit Δίσκος Τιμή Σειριακός Αριθμός Yλικολογισμικό Μέγεθος Κατάσταση ενέργειας Θερμοκρασία Είναι πολύ ζεστός Έχει Προειδοποίηση SMART Έχει Προηγούμενα Όρια SMART Έχει Προηγούμενα Ενδεικνυόμενα Κατώτατα Όρια SMART Έχει προβλεπόμενη αποτυχία SMART Έχει Βλάβη phpsysinfo-3.4.4/plugins/stablebit/stablebit_bootstrap.html000066400000000000000000000017521467431054600243310ustar00rootroot00000000000000 phpsysinfo-3.4.4/plugins/updatenotifier/000077500000000000000000000000001467431054600204415ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/updatenotifier/class.updatenotifier.inc.php000066400000000000000000000120151467431054600260470ustar00rootroot00000000000000 * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version $Id: class.updatenotifier.inc.php 661 2012-08-27 11:26:39Z namiltd $ * @link http://phpsysinfo.sourceforge.net */ class UpdateNotifier extends PSI_Plugin { /** * variable, which holds the content of the command * @var array */ private $_filecontent = array(); /** * variable, which holds the result before the xml is generated out of this array * @var array */ private $_result = array(); /** * read the data into an internal array and also call the parent constructor * * @param String $enc encoding */ public function __construct($enc) { parent::__construct(__CLASS__, $enc); $buffer_info = ""; if (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT')) switch (strtolower(PSI_PLUGIN_UPDATENOTIFIER_ACCESS)) { case 'command': if (defined('PSI_PLUGIN_UPDATENOTIFIER_UBUNTU_LANDSCAPE_FORMAT') && PSI_PLUGIN_UPDATENOTIFIER_UBUNTU_LANDSCAPE_FORMAT) { CommonFunctions::executeProgram("/usr/lib/update-notifier/apt-check", "--human-readable", $buffer_info); } else { CommonFunctions::executeProgram("/usr/lib/update-notifier/apt-check", "2>&1", $buffer_info); } break; case 'data': if (!defined('PSI_EMU_HOSTNAME')) { if (defined('PSI_PLUGIN_UPDATENOTIFIER_FILE') && is_string(PSI_PLUGIN_UPDATENOTIFIER_FILE)) { CommonFunctions::rfts(PSI_PLUGIN_UPDATENOTIFIER_FILE, $buffer_info); } else { CommonFunctions::rfts("/var/lib/update-notifier/updates-available", $buffer_info); } } else { //if (defined('PSI_EMU_PORT') if (defined('PSI_PLUGIN_UPDATENOTIFIER_FILE') && is_string(PSI_PLUGIN_UPDATENOTIFIER_FILE)) { CommonFunctions::executeProgram('cat', PSI_PLUGIN_UPDATENOTIFIER_FILE, $buffer_info); } else { CommonFunctions::executeProgram('cat', "/var/lib/update-notifier/updates-available", $buffer_info); } } break; default: $this->global_error->addConfigError("__construct()", "[updatenotifier] ACCESS"); } if (trim($buffer_info) != "") { // Remove blank lines $this->_filecontent = preg_split("/\r?\n/", $buffer_info, -1, PREG_SPLIT_NO_EMPTY); } } /** * doing all tasks to get the required informations that the plugin needs * result is stored in an internal array * * @return void */ public function execute() { if (empty($this->_filecontent)) { return; } if (defined('PSI_PLUGIN_UPDATENOTIFIER_UBUNTU_LANDSCAPE_FORMAT') && PSI_PLUGIN_UPDATENOTIFIER_UBUNTU_LANDSCAPE_FORMAT) { /* Ubuntu Landscape format: - line 1: packages to update - line 2: security packages to update */ if (count($this->_filecontent) >= 1) { foreach ($this->_filecontent as $line) { if (preg_match("/^(\d+)\s/", $line, $num) && !preg_match("/UA Infra|ESM Apps/", $line)) { $this->_result[] = $num[1]; } } if (empty($this->_result)) { $this->global_error->addWarning("Unable to parse UpdateNotifier file"); } } else { $this->global_error->addWarning("Unable to parse UpdateNotifier file"); } } else { /* Universal format: A;B - A: packages to update - B: security packages to update */ if (count($this->_filecontent) == 1 && strpos($this->_filecontent[0], ";") !== false) { $this->_result = explode(";", $this->_filecontent[0]); } else { $this->global_error->addWarning("Unable to parse UpdateNotifier file"); } } } /** * generates the XML content for the plugin * * @return SimpleXMLElement entire XML content for the plugin */ public function xml() { if (!empty($this->_result) && is_numeric($this->_result[0])) { $xmluu = $this->xml->addChild("UpdateNotifier"); $xmluu->addChild("packages", $this->_result[0]); if (isset($this->_result[1]) && is_numeric($this->_result[1])) { $xmluu->addChild("security", $this->_result[1]); } else { $xmluu->addChild("security", '0'); } } return $this->xml->getSimpleXmlElement(); } } phpsysinfo-3.4.4/plugins/updatenotifier/js/000077500000000000000000000000001467431054600210555ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/updatenotifier/js/updatenotifier.js000066400000000000000000000107431467431054600244420ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008 by phpSysInfo - A PHP System Information Script * * http://phpsysinfo.sourceforge.net/ * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ /*global $, jQuery, buildBlock, datetime, plugin_translate, genlang */ "use strict"; var UpdateNotifier_show = false, UpdateNotifier_table; /** * insert content into table * @param {jQuery} xml plugin-XML */ function updatenotifier_populate(xml) { var html = "", hostname = ""; hostname = $("Plugins Plugin_UpdateNotifier", xml).attr('Hostname'); if (hostname !== undefined) { $('span[class=Hostname_UpdateNotifier]').html(hostname); } $("Plugins Plugin_UpdateNotifier UpdateNotifier", xml).each(function(idp) { var packages = "", security = ""; packages = $("packages", this).text(); security = $("security", this).text(); //UpdateNotifier_table.fnAddData([packages]); //UpdateNotifier_table.fnAddData([security]); html = " \n"; html += " " + packages + " " + genlang(3, "UpdateNotifier") + "\n"; html += " \n"; html += " \n"; html += " " + security + " " + genlang(4, "UpdateNotifier") + "\n"; html += " \n"; $("#Plugin_UpdateNotifier tbody").empty().append(html); if ((packages <= 0) && (security <= 0)) { $("#UpdateNotifierTable-info").html(genlang(5, "UpdateNotifier")); } else { $("#UpdateNotifierTable-info").html(genlang(2, "UpdateNotifier")); } UpdateNotifier_show = true; }); } /** * fill the plugin block with table structure */ function updatenotifier_buildTable() { var html = ""; html += "
    \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += "
    " + genlang(2, "UpdateNotifier") + "
    \n"; html += "
    \n"; $("#Plugin_UpdateNotifier").append(html); } /** * load the xml via ajax */ function updatenotifier_request() { $("#Reload_UpdateNotifierTable").attr("title", "reload"); $.ajax({ url: "xml.php?plugin=UpdateNotifier", dataType: "xml", error: function () { $.jGrowl("Error loading XML document for Plugin UpdateNotifier!"); }, success: function updatenotifier_buildblock(xml) { populateErrors(xml); updatenotifier_populate(xml); if (UpdateNotifier_show) { plugin_translate("UpdateNotifier"); $("#Plugin_UpdateNotifier").show(); } } }); } $(document).ready(function() { $("#footer").before(buildBlock("UpdateNotifier", 1, true)); $("#Plugin_UpdateNotifier").addClass("halfsize"); updatenotifier_buildTable(); updatenotifier_request(); $("#Reload_UpdateNotifierTable").click(function updatenotifier_reload(id) { updatenotifier_request(); $(this).attr("title", datetime()); }); }); phpsysinfo-3.4.4/plugins/updatenotifier/js/updatenotifier_bootstrap.js000066400000000000000000000016631467431054600265400ustar00rootroot00000000000000function renderPlugin_updatenotifier(data) { var directives = { updateNotifierNbPackages: { text: function () { return this.packages; } }, updateNotifierNbSecPackages: { text: function () { return this.security; } } }; if ((data.Plugins.Plugin_UpdateNotifier !== undefined) && (data.Plugins.Plugin_UpdateNotifier.UpdateNotifier !== undefined)){ $('#updatenotifier').render(data.Plugins.Plugin_UpdateNotifier.UpdateNotifier, directives); if ((data.Plugins.Plugin_UpdateNotifier.UpdateNotifier.packages <= 0) && (data.Plugins.Plugin_UpdateNotifier.UpdateNotifier.security <= 0) ) { $("#updatenotifier-info").html(""+genlang(5, 'updatenotifier')+""); } $('#block_updatenotifier').show(); } else { $('#block_updatenotifier').hide(); } } phpsysinfo-3.4.4/plugins/updatenotifier/lang/000077500000000000000000000000001467431054600213625ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/updatenotifier/lang/cz.xml000066400000000000000000000027071467431054600225260ustar00rootroot00000000000000 Notifikátor aktualizací Jsou dostupné aktualizace! balíčků je připraveno k aktualizaci. balíčků obsahuje bezpečnostní aktualizace. Žádné aktualizace jsou dostupné Number of packages Number of security packages phpsysinfo-3.4.4/plugins/updatenotifier/lang/de.xml000066400000000000000000000026331467431054600225000ustar00rootroot00000000000000 Updates Notifier Updates verfügbar Pakete können aktualisiert werden. Updates sind Sicherheits-Updates. Keine Updates verfügbar Anzahl Pakete Anzahl Sicherheitspakete phpsysinfo-3.4.4/plugins/updatenotifier/lang/en.xml000066400000000000000000000026001467431054600225040ustar00rootroot00000000000000 Updates Notifier Updates available packages can be updated. updates are security updates. No updates available Number of packages Number of security packages phpsysinfo-3.4.4/plugins/updatenotifier/lang/fr.xml000066400000000000000000000026461467431054600225230ustar00rootroot00000000000000 Updates Notifier Mises à jour disponibles paquets peuvent être mit à jour. mises à jour concernent la sécurité. Pas de mises à jour disponibles Number of packages Number of security packages phpsysinfo-3.4.4/plugins/updatenotifier/lang/gr.xml000066400000000000000000000030761467431054600225220ustar00rootroot00000000000000 Ειδοποιήσεις Ενημερώσεων Διαθέσιμες Ενημερώσεις πακέτα μπορούν να ενημερωθούν. ενημερώσεις είναι ενημερώσεις ασφαλείας. Δεν υπάρχουν ενημερώσεις Αριθμός πακέτων Αριθμός πακέτων ασφαλείας phpsysinfo-3.4.4/plugins/updatenotifier/lang/pl.xml000066400000000000000000000026651467431054600225300ustar00rootroot00000000000000 Updates Notifier Aktualizacje dostępne pakietów do aktualizacji. to aktualizacje zabezpieczeń. Brak dostępnych aktualizacji Liczba pakietów aktualizacyjnych Liczba pakietów aktualizacji zabezpieczeń phpsysinfo-3.4.4/plugins/updatenotifier/lang/ro.xml000066400000000000000000000026261467431054600225320ustar00rootroot00000000000000 Updates Notifier Actualizări Disponibile Pachetele pot fi actualizate. Sunt actualizări de securitate. Nu actualizări disponibile Number of packages Number of security packages phpsysinfo-3.4.4/plugins/updatenotifier/lang/ru.xml000066400000000000000000000030121467431054600225260ustar00rootroot00000000000000 Оповещения об обновлениях Доступно обновление Пакеты могут быть обновлены. Обновления безопасности. Нет доступных обновлений Number of packages Number of security packages phpsysinfo-3.4.4/plugins/updatenotifier/updatenotifier_bootstrap.html000066400000000000000000000020701467431054600264450ustar00rootroot00000000000000 phpsysinfo-3.4.4/plugins/uprecords/000077500000000000000000000000001467431054600174255ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/uprecords/class.uprecords.inc.php000066400000000000000000000076371467431054600240350ustar00rootroot00000000000000 * @copyright 2014 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 1.0 * @link http://phpsysinfo.sourceforge.net */ class uprecords extends PSI_Plugin { private $_lines; public function __construct($enc) { parent::__construct(__CLASS__, $enc); $this->_lines = array(); } /** * get uprecords information * * @return array uprecords in array with label */ private function getUprecords() { $result = array(); $i = 0; foreach ($this->_lines as $line) { if (($i > 1) and (strpos($line, '---') === false)) { $buffer = preg_split("/\s*[ |]\s+/", ltrim(ltrim($line, '->'), ' ')); if (defined('PSI_PLUGIN_UPRECORDS_SHORT_MODE') && PSI_PLUGIN_UPRECORDS_SHORT_MODE && !is_numeric($buffer[0])) { break; } if (strpos($line, '->') !== false) { if (defined('PSI_PLUGIN_UPRECORDS_DENOTE_BY_ASTERISK') && PSI_PLUGIN_UPRECORDS_DENOTE_BY_ASTERISK) { $buffer[0] .= ' *'; } else { $buffer[0] = '-> '.$buffer[0]; } } if (count($buffer) > 4) { $buffer[3] = $buffer[3].' '.$buffer[4]; } $result[$i]['hash'] = $buffer[0]; $result[$i]['Uptime'] = $buffer[1]; $result[$i]['System'] = $buffer[2]; //Date formating $result[$i]['Bootup'] = preg_replace("/^(\S+)(\s+)/", "$1,$2", preg_replace("/^(\S+\s+\S+\s+)(\d)(\s+)/", "$1 0$2$3", trim($buffer[3])." GMT")); } $i++; } return $result; } public function execute() { $this->_lines = array(); if (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT')) switch (strtolower(PSI_PLUGIN_UPRECORDS_ACCESS)) { case 'command': $lines = ""; $options = ""; if (defined('PSI_PLUGIN_UPRECORDS_MAX_ENTRIES')) { if (($ment = max(intval(PSI_PLUGIN_UPRECORDS_MAX_ENTRIES), 0)) != 10) { $options=" -m ".$ment; } } if (defined('PSI_PLUGIN_UPRECORDS_SHORT_MODE') && PSI_PLUGIN_UPRECORDS_SHORT_MODE) { $options .= " -s"; } if (CommonFunctions::executeProgram('TZ=GMT uprecords', '-a -w'.$options, $lines) && !empty($lines)) $this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); break; case 'data': if (!defined('PSI_EMU_HOSTNAME') && CommonFunctions::rftsdata("uprecords.tmp", $lines) && !empty($lines)) $this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); break; default: $this->global_error->addConfigError("execute()", "[uprecords] ACCESS"); } } public function xml() { if (empty($this->_lines)) return $this->xml->getSimpleXmlElement(); $arrBuff = $this->getUprecords(); if (sizeof($arrBuff) > 0) { $uprecords = $this->xml->addChild("Uprecords"); foreach ($arrBuff as $arrValue) { $item = $uprecords->addChild('Item'); $item->addAttribute('hash', $arrValue['hash']); $item->addAttribute('Uptime', $arrValue['Uptime']); $item->addAttribute('System', $arrValue['System']); $item->addAttribute('Bootup', $arrValue['Bootup']); } } return $this->xml->getSimpleXmlElement(); } } phpsysinfo-3.4.4/plugins/uprecords/js/000077500000000000000000000000001467431054600200415ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/uprecords/js/uprecords.js000066400000000000000000000122041467431054600224040ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008 by phpSysInfo - A PHP System Information Script * * http://phpsysinfo.sourceforge.net/ * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //$Id: uprecords.js 661 2014-01-08 11:26:39 aolah76 $ /*global $, jQuery, buildBlock, datetime, plugin_translate, genlang */ "use strict"; var uprecords_show = false; /** * insert content into table * @param {jQuery} xml plugin-XML */ function uprecords_populate(xml) { var html = "", datetimeFormat = "", hostname = ""; hostname = $("Plugins Plugin_uprecords", xml).attr('Hostname'); if (hostname !== undefined) { $('span[class=Hostname_uprecords]').html(hostname); } $("Options", xml).each(function getByteFormat(id) { datetimeFormat = $(this).attr("datetimeFormat"); }); $("Plugins Plugin_uprecords uprecords Item", xml).each(function uprecords_getitem(idp) { html += " \n"; html += " " + $(this).attr("hash") + "\n"; html += " " + $(this).attr("Uptime") + "\n"; html += " " + $(this).attr("System") + "\n"; /* var lastboot = new Date($(this).attr("Bootup")); if (typeof(lastboot.toUTCString)==="function") { html += " " + lastboot.toUTCString() + "\n"; } else { //deprecated html += " " + lastboot.toGMTString() + "\n"; } */ if ((datetimeFormat !== undefined) && (datetimeFormat.toLowerCase() === "locale")) { var lastboot = new Date($(this).attr("Bootup")); html += " " + lastboot.toLocaleString() + "\n"; } else { html += " " + $(this).attr("Bootup") + "\n"; } html += " \n"; uprecords_show = true; }); $("#Plugin_uprecordsTable-tbody").empty().append(html); $('#Plugin_uprecordsTable tr:nth-child(even)').addClass('even'); } function uprecords_buildTable() { var html = ""; html += "
    \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += "
    " + genlang(101, "uprecords") + "" + genlang(102, "uprecords") + "" + genlang(103, "uprecords") + "" + genlang(104, "uprecords") + "
    \n"; html += "
    \n"; $("#Plugin_uprecords").append(html); } /** * load the xml via ajax */ function uprecords_request() { $("#Reload_uprecordsTable").attr("title", "reload"); $.ajax({ url: "xml.php?plugin=uprecords", dataType: "xml", error: function uprecords_error() { $.jGrowl("Error loading XML document for Plugin uprecords!"); }, success: function uprecords_buildblock(xml) { populateErrors(xml); uprecords_populate(xml); if (uprecords_show) { plugin_translate("uprecords"); $("#Plugin_uprecords").show(); } } }); } $(document).ready(function uprecords_buildpage() { $("#footer").before(buildBlock("uprecords", 1, true)); $("#Plugin_uprecords").addClass("fullsize"); uprecords_buildTable(); uprecords_request(); $("#Reload_uprecordsTable").click(function uprecords_reload(id) { uprecords_request(); $(this).attr("title", datetime()); }); }); phpsysinfo-3.4.4/plugins/uprecords/js/uprecords_bootstrap.js000066400000000000000000000022131467431054600245000ustar00rootroot00000000000000function renderPlugin_uprecords(data) { var directives = { hash: { html: function () { return this.hash; } }, Bootup: { html: function () { var datetimeFormat; if (((datetimeFormat = data.Options["@attributes"].datetimeFormat) !== undefined) && (datetimeFormat.toLowerCase() === "locale")) { var bootup = new Date(this.Bootup); return bootup.toLocaleString(); } else { return this.Bootup; } } } }; if ((data.Plugins.Plugin_uprecords !== undefined) && (data.Plugins.Plugin_uprecords.Uprecords !== undefined)) { var upitems = items(data.Plugins.Plugin_uprecords.Uprecords.Item); if (upitems.length > 0) { var up_memory = []; up_memory.push_attrs(upitems); $('#uprecords-data').render(up_memory, directives); $('#block_uprecords').show(); } else { $('#block_uprecords').hide(); } } else { $('#block_uprecords').hide(); } } phpsysinfo-3.4.4/plugins/uprecords/lang/000077500000000000000000000000001467431054600203465ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/uprecords/lang/en.xml000066400000000000000000000017751467431054600215040ustar00rootroot00000000000000 Uprecords # Uptime System Boot up phpsysinfo-3.4.4/plugins/uprecords/lang/fr.xml000066400000000000000000000016761467431054600215110ustar00rootroot00000000000000 Uprecords # Uptime Système Démarrage phpsysinfo-3.4.4/plugins/uprecords/lang/gr.xml000066400000000000000000000020341467431054600214770ustar00rootroot00000000000000 Uprecords # Ώρες Λειτουργίας Σύστημα Εκκίνηση phpsysinfo-3.4.4/plugins/uprecords/lang/hu.xml000066400000000000000000000020301467431054600214770ustar00rootroot00000000000000 Uprecords # Uptime Rendszer Rendszerindítás időpontja phpsysinfo-3.4.4/plugins/uprecords/lang/pl.xml000066400000000000000000000020201467431054600214750ustar00rootroot00000000000000 Uprecords # Czas pracy System Wystartował phpsysinfo-3.4.4/plugins/uprecords/lang/ro.xml000066400000000000000000000017661467431054600215220ustar00rootroot00000000000000 Uprecords # Uptime System Boot up phpsysinfo-3.4.4/plugins/uprecords/lang/ru.xml000066400000000000000000000020561467431054600215210ustar00rootroot00000000000000 Состояное системы # Аптайм Система Загружено phpsysinfo-3.4.4/plugins/uprecords/uprecords_bootstrap.html000066400000000000000000000027131467431054600244210ustar00rootroot00000000000000 phpsysinfo-3.4.4/plugins/viewer/000077500000000000000000000000001467431054600167205ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/viewer/class.viewer.inc.php000066400000000000000000000061351467431054600226130ustar00rootroot00000000000000_lines = array(); } /** * get viewer information * * @return array viewer in array with label */ private function getViewer() { $result = array(); $i = 0; foreach ($this->_lines as $line) { $result[$i]['line'] = $line; $i++; } return $result; } public function execute() { $this->_lines = array(); if (!defined('PSI_EMU_HOSTNAME') || defined('PSI_EMU_PORT')) switch (strtolower(PSI_PLUGIN_VIEWER_ACCESS)) { case 'command': if (defined('PSI_PLUGIN_VIEWER_COMMAND') && is_string(PSI_PLUGIN_VIEWER_COMMAND)) { if (defined('PSI_PLUGIN_VIEWER_PARAMS') && is_string(PSI_PLUGIN_VIEWER_PARAMS)) { $params = PSI_PLUGIN_VIEWER_PARAMS; } else { $params = ""; } $this->name = trim(PSI_PLUGIN_VIEWER_COMMAND." ".$params); $lines = ""; if ((PSI_OS == 'WINNT') && ($cp = CommonFunctions::getcp())) { if (CommonFunctions::executeProgram('cmd', '/c chcp '.$cp.' >nul & '.$this->name, $lines) && !empty($lines)) $this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); } else { if (CommonFunctions::executeProgram(PSI_PLUGIN_VIEWER_COMMAND, $params, $lines) && !empty($lines)) $this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); } } else { $this->global_error->addConfigError("execute()", "[viewer] COMMAND"); } break; case 'data': if (!defined('PSI_EMU_HOSTNAME') && CommonFunctions::rftsdata("viewer.tmp", $lines) && !empty($lines)) $this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY); break; default: $this->global_error->addConfigError("execute()", "[viewer] ACCESS"); } } public function xml() { if (empty($this->_lines)) return $this->xml->getSimpleXmlElement(); $arrBuff = $this->getViewer(); if (sizeof($arrBuff) > 0) { $viewer = $this->xml->addChild("Viewer"); $viewer->addAttribute("Name", $this->name); foreach ($arrBuff as $arrValue) { $item = $viewer->addChild('Item'); $item->addAttribute('Line', $arrValue['line']); } } return $this->xml->getSimpleXmlElement(); } } phpsysinfo-3.4.4/plugins/viewer/js/000077500000000000000000000000001467431054600173345ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/viewer/js/viewer.js000066400000000000000000000101041467431054600211670ustar00rootroot00000000000000/*************************************************************************** * Copyright (C) 2008 by phpSysInfo - A PHP System Information Script * * http://phpsysinfo.sourceforge.net/ * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty 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., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //$Id: viewer.js 661 2016-05-03 11:26:39 erpomata $ /*global $, jQuery, buildBlock, datetime, plugin_translate */ "use strict"; var viewer_show = false; /** * insert content into table * @param {jQuery} xml plugin-XML */ function viewer_populate(xml) { var html = "", name = "", hostname = ""; hostname = $("Plugins Plugin_Viewer", xml).attr('Hostname'); if (hostname !== undefined) { $('span[class=Hostname_Viewer]').html(hostname); } name = $("Plugins Plugin_Viewer Viewer", xml).attr("Name"); $("#Plugin_viewerTable-th").empty(); if (name !== undefined) $("#Plugin_viewerTable-th").append(name); $("Plugins Plugin_Viewer Viewer Item", xml).each(function viewer_getitem(idp) { html += " \n"; if ($(this).attr("Line") === "") html += "  \n"; else html += " " + $(this).attr("Line") + "\n"; html += " \n"; viewer_show = true; }); $("#Plugin_viewerTable-tbody").empty().append(html); $('#Plugin_viewerTable tr:nth-child(even)').addClass('even'); } function viewer_buildTable() { var html = ""; html += "
    \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += " \n"; html += "
    \n"; html += "
    \n"; $("#Plugin_viewer").append(html); } /** * load the xml via ajax */ function viewer_request() { $("#Reload_viewerTable").attr("title", "reload"); $.ajax({ url: "xml.php?plugin=viewer", dataType: "xml", error: function viewer_error() { $.jGrowl("Error loading XML document for Plugin Viewer!"); }, success: function viewer_buildblock(xml) { populateErrors(xml); viewer_populate(xml); if (viewer_show) { plugin_translate("viewer"); $("#Plugin_viewer").show(); } } }); } $(document).ready(function viewer_buildpage() { $("#footer").before(buildBlock("viewer", 1, true)); $("#Plugin_viewer").addClass("fullsize"); viewer_buildTable(); viewer_request(); $("#Reload_viewerTable").click(function viewer_reload(id) { viewer_request(); $(this).attr("title", datetime()); }); }); phpsysinfo-3.4.4/plugins/viewer/js/viewer_bootstrap.js000066400000000000000000000016711467431054600232750ustar00rootroot00000000000000function renderPlugin_viewer(data) { var directives = { Line: { html: function () { if (this.Line === "") return " "; else return this.Line; } } }; if ((data.Plugins.Plugin_Viewer !== undefined) && (data.Plugins.Plugin_Viewer.Viewer !== undefined)) { var name = data.Plugins.Plugin_Viewer.Viewer["@attributes"].Name; $('#viewer-th').empty(); if (name !== undefined) $('#viewer-th').append(name); var upitems = items(data.Plugins.Plugin_Viewer.Viewer.Item); if (upitems.length > 0) { var up_memory = []; up_memory.push_attrs(upitems); $('#viewer-data').render(up_memory, directives); $('#block_viewer').show(); } else { $('#block_viewer').hide(); } } else { $('#block_viewer').hide(); } } phpsysinfo-3.4.4/plugins/viewer/lang/000077500000000000000000000000001467431054600176415ustar00rootroot00000000000000phpsysinfo-3.4.4/plugins/viewer/lang/en.xml000066400000000000000000000011371467431054600207670ustar00rootroot00000000000000 Viewer phpsysinfo-3.4.4/plugins/viewer/lang/gr.xml000066400000000000000000000011671467431054600210000ustar00rootroot00000000000000 Πρόγραμμα Περιήγησης phpsysinfo-3.4.4/plugins/viewer/lang/pl.xml000066400000000000000000000011661467431054600210020ustar00rootroot00000000000000 Przeglądarka phpsysinfo-3.4.4/plugins/viewer/viewer_bootstrap.html000066400000000000000000000016561467431054600232140ustar00rootroot00000000000000 phpsysinfo-3.4.4/read_config.php000066400000000000000000000402461467431054600167150ustar00rootroot00000000000000$group) { if (strtoupper($name)=="MAIN") { $name_prefix='PSI_'; } elseif (strtoupper(substr($name, 0, 7))=="SENSOR_") { $name_prefix='PSI_'.strtoupper($name).'_'; } else { $name_prefix='PSI_PLUGIN_'.strtoupper($name).'_'; } foreach ($group as $param=>$value) { if ((trim($value)==="") || (trim($value)==="0")) { define($name_prefix.strtoupper($param), false); } elseif (trim($value)==="1") { define($name_prefix.strtoupper($param), true); } else { if ((($paramup = strtoupper($param)) !== 'WMI_PASSWORD') && ($paramup !== 'SSH_PASSWORD') && strstr($value, ',')) { define($name_prefix.$paramup, 'return '.var_export(preg_split('/\s*,\s*/', trim($value), -1, PREG_SPLIT_NO_EMPTY), 1).';'); } else { define($name_prefix.$paramup, trim($value)); } } } } } if (defined('PSI_ALLOWED') && is_string(PSI_ALLOWED)) { if (preg_match(ARRAY_EXP, PSI_ALLOWED)) { $allowed = eval(strtolower(PSI_ALLOWED)); } else { $allowed = array(strtolower(PSI_ALLOWED)); } if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) { $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; } else { if (isset($_SERVER["HTTP_CLIENT_IP"])) { $ip = $_SERVER["HTTP_CLIENT_IP"]; } else { $ip = $_SERVER["REMOTE_ADDR"]; } } $ip = preg_replace("/^::ffff:/", "", strtolower($ip)); $ip_decimal = ip2long($ip); if ($ip_decimal === false) { echo "Client IP wrong address (".$ip."). Client not allowed."; die(); } // code based on https://gist.github.com/tott/7684443 $was = false; foreach ($allowed as $allow) { if (strpos($allow, '/') === false) { $was = ($allow === $ip); } else { list($allow, $netmask) = explode('/', $allow, 2); $allow_decimal = ip2long($allow); $wildcard_decimal = pow(2, (32 - $netmask)) - 1; $netmask_decimal = ~$wildcard_decimal; $was = (($ip_decimal & $netmask_decimal) === ($allow_decimal & $netmask_decimal)); } if ($was) { break; } } if (!$was) { echo "Client IP address (".$ip.") not allowed."; die(); } } if (isset($_GET['jsonp']) && (!defined('PSI_JSONP') || !PSI_JSONP)) { echo "JSONP data mode not enabled in phpsysinfo.ini."; die(); } /* default error handler */ if (function_exists('errorHandlerPsi')) { restore_error_handler(); } /* fatal errors only */ $old_err_rep = error_reporting(); error_reporting(E_ERROR); /* get git revision */ if (file_exists(PSI_APP_ROOT.'/.git/HEAD')) { $contents = @file_get_contents(PSI_APP_ROOT.'/.git/HEAD'); if ($contents && preg_match("/^ref:\s+(.*)\/([^\/\s]*)/m", $contents, $matches)) { $contents = @file_get_contents(PSI_APP_ROOT.'/.git/'.$matches[1]."/".$matches[2]); if ($contents && preg_match("/^([^\s]*)/m", $contents, $revision)) { define('PSI_VERSION_STRING', PSI_VERSION ."-".$matches[2]."-".substr($revision[1], 0, 7)); } else { define('PSI_VERSION_STRING', PSI_VERSION ."-".$matches[2]); } } } /* get svn revision */ if (!defined('PSI_VERSION_STRING') && file_exists(PSI_APP_ROOT.'/.svn/entries')) { $contents = @file_get_contents(PSI_APP_ROOT.'/.svn/entries'); if ($contents && preg_match("/dir\n(.+)/", $contents, $matches)) { define('PSI_VERSION_STRING', PSI_VERSION."-r".$matches[1]); } else { define('PSI_VERSION_STRING', PSI_VERSION); } } if (!defined('PSI_VERSION_STRING')) { define('PSI_VERSION_STRING', PSI_VERSION); } if (defined('PSI_ROOTFS') && is_string(PSI_ROOTFS) && (PSI_ROOTFS !== '') && (PSI_ROOTFS !== '/')) { $rootfs = PSI_ROOTFS; if ($rootfs[0] === '/') { define('PSI_ROOT_FILESYSTEM', $rootfs); } else { define('PSI_ROOT_FILESYSTEM', ''); } } else { define('PSI_ROOT_FILESYSTEM', ''); } if (!defined('PSI_OS')) { //if not overloaded in phpsysinfo.ini /* get Linux code page */ if ((PHP_OS == 'Linux') || (PHP_OS == 'GNU')) { if (file_exists($fname = PSI_ROOT_FILESYSTEM.'/etc/sysconfig/i18n') || file_exists($fname = PSI_ROOT_FILESYSTEM.'/etc/default/locale') || file_exists($fname = PSI_ROOT_FILESYSTEM.'/etc/locale.conf') || file_exists($fname = PSI_ROOT_FILESYSTEM.'/etc/sysconfig/language') || file_exists($fname = PSI_ROOT_FILESYSTEM.'/etc/profile.d/lang.sh') || file_exists($fname = PSI_ROOT_FILESYSTEM.'/etc/profile.d/i18n.sh') || file_exists($fname = PSI_ROOT_FILESYSTEM.'/etc/profile')) { $contents = @file_get_contents($fname); } else { $contents = false; if (PHP_OS == 'Linux') { if (file_exists(PSI_ROOT_FILESYSTEM.'/system/build.prop')) { //Android define('PSI_OS', 'Android'); if ((PSI_ROOT_FILESYSTEM === '') && function_exists('exec') && @exec('uname -o 2>/dev/null', $unameo) && (sizeof($unameo)>0) && (($unameo0 = trim($unameo[0])) != "")) { define('PSI_UNAMEO', $unameo0); // is Android on Termux } if ((PSI_ROOT_FILESYSTEM === '') && !defined('PSI_MODE_POPEN')) { //if not overloaded in phpsysinfo.ini if (!function_exists("proc_open")) { //proc_open function test by executing 'pwd' bbbmand define('PSI_MODE_POPEN', true); //use popen() function - no stderr error handling (but with problems with timeout) } else { $out = ''; $err = ''; $pipes = array(); $descriptorspec = array(0=>array("pipe", "r"), 1=>array("pipe", "w"), 2=>array("pipe", "w")); $process = proc_open("pwd 2>/dev/null ", $descriptorspec, $pipes); if (!is_resource($process)) { define('PSI_MODE_POPEN', true); } else { $w = null; $e = null; while (!(feof($pipes[1]) && feof($pipes[2]))) { $read = array($pipes[1], $pipes[2]); $n = stream_select($read, $w, $e, 5); if (($n === false) || ($n === 0)) { break; } foreach ($read as $r) { if ($r == $pipes[1]) { $out .= fread($r, 4096); } elseif (feof($pipes[1]) && ($r == $pipes[2])) {//read STDERR after STDOUT $err .= fread($r, 4096); } } } if (($out === null) || (trim($out) == "") || (substr(trim($out), 0, 1) != "/")) { define('PSI_MODE_POPEN', true); } fclose($pipes[0]); fclose($pipes[1]); fclose($pipes[2]); // It is important that you close any pipes before calling // proc_close in order to avoid a deadlock proc_close($process); } } } } elseif (file_exists(PSI_ROOT_FILESYSTEM.'/var/mobile/Library/Cydia/metadata.cb0')) { //jailbroken iOS with Cydia define('PSI_OS', 'Darwin'); } } } if (!(defined('PSI_SYSTEM_CODEPAGE') && defined('PSI_SYSTEM_LANG')) //also if both not overloaded in phpsysinfo.ini && $contents && (preg_match('/^(LANG="?[^"\n]*"?)/m', $contents, $matches) || preg_match('/^RC_(LANG="?[^"\n]*"?)/m', $contents, $matches) || preg_match('/^\s*export (LANG="?[^"\n]*"?)/m', $contents, $matches))) { if (!defined('PSI_SYSTEM_CODEPAGE')) { if (file_exists($vtfname = PSI_ROOT_FILESYSTEM.'/sys/module/vt/parameters/default_utf8') && (trim(@file_get_contents($vtfname)) === "1")) { define('PSI_SYSTEM_CODEPAGE', 'UTF-8'); } elseif ((PSI_ROOT_FILESYSTEM === '') && function_exists('exec') && @exec($matches[1].' locale -k LC_CTYPE 2>/dev/null', $lines)) { //if not overloaded in phpsysinfo.ini foreach ($lines as $line) { if (preg_match('/^charmap="?([^"]*)/', $line, $matches2)) { define('PSI_SYSTEM_CODEPAGE', $matches2[1]); break; } } } } if ((PSI_ROOT_FILESYSTEM === '') && !defined('PSI_SYSTEM_LANG') && function_exists('exec') && @exec($matches[1].' locale 2>/dev/null', $lines2)) { //also if not overloaded in phpsysinfo.ini foreach ($lines2 as $line) { if (preg_match('/^LC_MESSAGES="?([^\."@]*)/', $line, $matches2)) { $lang = ""; if (is_readable(PSI_APP_ROOT.'/data/languages.ini') && ($langdata = @parse_ini_file(PSI_APP_ROOT.'/data/languages.ini', true))) { if (isset($langdata['Linux']['_'.$matches2[1]])) { $lang = $langdata['Linux']['_'.$matches2[1]]; } } if ($lang == "") { $lang = 'Unknown'; } define('PSI_SYSTEM_LANG', $lang.' ('.$matches2[1].')'); break; } } } } } elseif (PHP_OS == 'Haiku') { if (!(defined('PSI_SYSTEM_CODEPAGE') && defined('PSI_SYSTEM_LANG')) //also if both not overloaded in phpsysinfo.ini && (PSI_ROOT_FILESYSTEM === '') && function_exists('exec') && @exec('locale --message 2>/dev/null', $lines)) { foreach ($lines as $line) { if (preg_match('/^"?([^\."]*)\.?([^"]*)/', $line, $matches2)) { if (!defined('PSI_SYSTEM_CODEPAGE') && isset($matches2[2]) && ($matches2[2] !== null) && (trim($matches2[2]) != "")) { //also if not overloaded in phpsysinfo.ini define('PSI_SYSTEM_CODEPAGE', $matches2[2]); } if (!defined('PSI_SYSTEM_LANG')) { //if not overloaded in phpsysinfo.ini $lang = ""; if (is_readable(PSI_APP_ROOT.'/data/languages.ini') && ($langdata = @parse_ini_file(PSI_APP_ROOT.'/data/languages.ini', true))) { if (isset($langdata['Linux']['_'.$matches2[1]])) { $lang = $langdata['Linux']['_'.$matches2[1]]; } } if ($lang == "") { $lang = 'Unknown'; } define('PSI_SYSTEM_LANG', $lang.' ('.$matches2[1].')'); } break; } } } } elseif ((PHP_OS == 'Darwin') || (defined('PSI_OS') && (PSI_OS == 'Darwin'))){ if (!defined('PSI_SYSTEM_LANG') //if not overloaded in phpsysinfo.ini && (PSI_ROOT_FILESYSTEM === '') && function_exists('exec') && @exec('defaults read /Library/Preferences/.GlobalPreferences AppleLocale 2>/dev/null', $lines)) { $lang = ""; if (is_readable(PSI_APP_ROOT.'/data/languages.ini') && ($langdata = @parse_ini_file(PSI_APP_ROOT.'/data/languages.ini', true))) { if (isset($langdata['Linux']['_'.$lines[0]])) { $lang = $langdata['Linux']['_'.$lines[0]]; } } if ($lang == "") { $lang = 'Unknown'; } define('PSI_SYSTEM_LANG', $lang.' ('.$lines[0].')'); } } } /* maximum time in seconds a script is allowed to run before it is terminated by the parser */ if (defined('PSI_MAX_TIMEOUT')) { ini_set('max_execution_time', max(intval(PSI_MAX_TIMEOUT), 0)); } else { ini_set('max_execution_time', 30); } /* executeProgram() timeout value in seconds */ if (defined('PSI_EXEC_TIMEOUT')) { define('PSI_EXEC_TIMEOUT_INT', max(intval(PSI_EXEC_TIMEOUT), 1)); } else { define('PSI_EXEC_TIMEOUT_INT', 30); } /* snmprealwalk() and executeProgram("snmpwalk") number of seconds until the first timeout */ if (defined('PSI_SNMP_TIMEOUT')) { define('PSI_SNMP_TIMEOUT_INT', max(intval(PSI_SNMP_TIMEOUT), 1)); } else { define('PSI_SNMP_TIMEOUT_INT', 3); } /* snmprealwalk() and executeProgram("snmpwalk") number of times to retry if timeouts occur */ if (defined('PSI_SNMP_RETRY')) { define('PSI_SNMP_RETRY_INT', max(intval(PSI_SNMP_RETRY), 0)); } else { define('PSI_SNMP_RETRY_INT', 0); } if (!defined('PSI_OS')) { define('PSI_OS', PHP_OS); } if (!defined('PSI_SYSTEM_LANG')) { define('PSI_SYSTEM_LANG', null); } if (!defined('PSI_SYSTEM_CODEPAGE')) { //if not overloaded in phpsysinfo.ini if ((PSI_OS=='Android') || (PSI_OS=='Darwin')) { define('PSI_SYSTEM_CODEPAGE', 'UTF-8'); } elseif (PSI_OS=='Minix') { define('PSI_SYSTEM_CODEPAGE', 'CP437'); } elseif (PSI_OS!='WINNT') { define('PSI_SYSTEM_CODEPAGE', null); } } if (!defined('PSI_JSON_ISSUE')) { //if not overloaded in phpsysinfo.ini if (!extension_loaded("simplexml")) { die("phpSysInfo requires the simplexml extension to php in order to work properly."); } if (simplexml_load_string("
    \n") !== simplexml_load_string("")) { // json_encode issue test define('PSI_JSON_ISSUE', true); // Problem must be solved } } /* restore error level */ error_reporting($old_err_rep); /* restore error handler */ if (function_exists('errorHandlerPsi')) { set_error_handler('errorHandlerPsi'); } } phpsysinfo-3.4.4/sample/000077500000000000000000000000001467431054600152175ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/aix/000077500000000000000000000000001467431054600160005ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/aix/prtconf1.txt000066400000000000000000000065061467431054600203040ustar00rootroot00000000000000System Model: IBM,9133-55A Machine Serial Number: 05F8123A Processor Type: PowerPC_POWER5 Number Of Processors: 4 Processor Clock Speed: 1499 MHz CPU Type: 64-bit Kernel Type: 64-bit LPAR Info: 1 galaxy198 Memory Size: 4096 MB Good Memory Size: 4096 MB Platform Firmware level: Not Available Firmware Version: IBM,SF240_338 Console Login: enable Auto Restart: true Full Core: false Network Information Host Name: testibm IP Address: 192.168.1.2 Sub Netmask: 255.255.255.0 Gateway: 192.168.1.1 Name Server: 192.168.1.1 Domain Name: foo.com Paging Space Information Total Paging Space: 8192MB Percent Used: 1% Volume Groups Information ============================================================================== rootvg: PV_NAME PV STATE TOTAL PPs FREE PPs FREE DISTRIBUTION hdisk0 active 525 383 109..24..42..99..109 ============================================================================== INSTALLED RESOURCE LIST The following resources are installed on the machine. +/- = Added or deleted from Resource List. * = Diagnostic support not available. Model Architecture: chrp Model Implementation: Multiple Processor, PCI bus + sys0 System Object + sysplanar0 System Planar * vio0 Virtual I/O Bus * vsa0 U9133.55A.06F865G-V1-C0 LPAR Virtual Serial Adapter * vty0 U9133.55A.06F865G-V1-C0-L0 Asynchronous Terminal * pci2 U787B.001.DNWCF4C-P1 PCI Bus * pci7 U787B.001.DNWCF4C-P1 PCI Bus + ent2 U787B.001.DNWCF4C-P1-T9 2-Port 10/100/1000 Base-TX PCI-X Adapter (14108902) + ent3 U787B.001.DNWCF4C-P1-T10 2-Port 10/100/1000 Base-TX PCI-X Adapter (14108902) * pci8 U787B.001.DNWCF4C-P1 PCI Bus + usbhc0 U787B.001.DNWCF4C-P1 USB Host Controller (33103500) + usbhc1 U787B.001.DNWCF4C-P1 USB Host Controller (33103500) * pci9 U787B.001.DNWCF4C-P1 PCI Bus + fcs2 U787B.001.DNWCF4C-P1-C1-T1 FC Adapter * fcnet2 U787B.001.DNWCF4C-P1-C1-T1 Fibre Channel Network Protocol Device * fscsi2 U787B.001.DNWCF4C-P1-C1-T1 FC SCSI I/O Controller Protocol Device + mem0 Memory + proc0 Processor + proc2 Processor + proc4 Processor + proc6 Processor phpsysinfo-3.4.4/sample/aix/prtconf2.txt000066400000000000000000000126221467431054600203010ustar00rootroot00000000000000System Model: IBM,7998-61X Machine Serial Number: 01sd123 Processor Type: PowerPC_POWER6 Processor Implementation Mode: POWER 6 Processor Version: PV_6 Number Of Processors: 4 Processor Clock Speed: 4005 MHz CPU Type: 64-bit Kernel Type: 64-bit LPAR Info: 1 06-5BD4A Memory Size: 31616 MB Good Memory Size: 31616 MB Platform Firmware level: EA350_132 Firmware Version: IBM,EA350_132 Console Login: enable Auto Restart: true Full Core: false Network Information Host Name: SAPIBM IP Address: 192.168.1.1 Sub Netmask: 255.255.252.0 Gateway: 192.168.1.1 Name Server: Domain Name: Paging Space Information Total Paging Space: 512MB Percent Used: 3% Volume Groups Information ============================================================================== ============================================================================== INSTALLED RESOURCE LIST The following resources are installed on the machine. +/- = Added or deleted from Resource List. * = Diagnostic support not available. Model Architecture: chrp Model Implementation: Multiple Processor, PCI bus + sys0 System Object + sysplanar0 System Planar * vio0 Virtual I/O Bus * vsa0 U7998.61X.065BD4A-V1-C0 LPAR Virtual Serial Adapter * vty0 U7998.61X.065BD4A-V1-C0-L0 Asynchronous Terminal * pci3 U78A5.001.WIH4F4F-P1 PCI Bus + fcs0 U78A5.001.WIH4F4F-P1-C6-T1 FC Adapter + fscsi0 U78A5.001.WIH4F4F-P1-C6-T1 FC SCSI I/O Controller Protocol Device * hdisk1 U78A5.001.WIH4F4F-P1-C6-T1-W5006048C52A8FD87-L25000000000000 EMC Symmetrix FCP Raid5 * hdisk2 U78A5.001.WIH4F4F-P1-C6-T1-W5006048C52A8FD87-L26000000000000 EMC Symmetrix FCP Raid5 * hdisk0 U78A5.001.WIH4F4F-P1-C6-T1-W5006048C52A8FD87-L0 EMC Symmetrix FCP Raid1 * hdisk30 U78A5.001.WIH4F4F-P1-C6-T1-W5006048C52A8FD87-L44000000000000 EMC Symmetrix FCP Raid5 * hdiskpower0 U78A5.001.WIH4F4F-P1-C6-T1-L2 PowerPath Device * hdiskpower1 U78A5.001.WIH4F4F-P1-C6-T1-L3 PowerPath Device * hdiskpower2 U78A5.001.WIH4F4F-P1-C6-T1-L4 PowerPath Device * hdisk3 U78A5.001.WIH4F4F-P1-C6-T1-W5006048452A8FD86-L0 EMC Symmetrix FCP Raid1 * hdisk4 U78A5.001.WIH4F4F-P1-C6-T1-W5006048C52A8FD86-L0 EMC Symmetrix FCP Raid1 + fcs1 U78A5.001.WIH4F4F-P1-C6-T2 FC Adapter + fscsi1 U78A5.001.WIH4F4F-P1-C6-T2 FC SCSI I/O Controller Protocol Device * pci2 U78A5.001.WIH4F4F-P1 PCI Bus + ati0 U78A5.001.WIH4F4F-P1-C5-T1 Native Display Graphics Adapter * pci1 U78A5.001.WIH4F4F-P1 PCI Bus + usbhc0 U78A5.001.WIH4F4F-P1 USB Host Controller (33103500) + usbhc1 U78A5.001.WIH4F4F-P1 USB Host Controller (33103500) + usbhc2 U78A5.001.WIH4F4F-P1 USB Enhanced Host Controller (3310e000) * pci0 U78A5.001.WIH4F4F-P1 PCI Bus + sissas0 U78A5.001.WIH4F4F-P1-T5 PCI-X266 Planar 3Gb SAS Adapter * sas0 U78A5.001.WIH4F4F-P1-T5 Controller SAS Protocol * sfwcomm0 SAS Storage Framework Comm + ses0 U78A5.001.WIH4F4F-P1-Y1 SAS Enclosure Services Device * sata0 U78A5.001.WIH4F4F-P1-T5 Controller SATA Protocol * lhea0 U78A5.001.WIH4F4F-P1 Logical Host Ethernet Adapter (l-hea) + ent1 U78A5.001.WIH4F4F-P1-T7 Logical Host Ethernet Port (lp-hea) + ent0 U78A5.001.WIH4F4F-P1-T6 Logical Host Ethernet Port (lp-hea) + L2cache0 L2 Cache + mem0 Memory + proc0 Processor + proc2 Processor + proc4 Processor + proc6 Processor + cd0 U78A5.001.WIH4F4F-P1-T1-L1-L2-L3 USB DVD-ROM Drive * kbd0 U78A5.001.WIH4F4F-P1-T2-L1 USB keyboard * mouse0 U78A5.001.WIH4F4F-P1-T2-L1 USB mousephpsysinfo-3.4.4/sample/distrotest/000077500000000000000000000000001467431054600174235ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/4MLinux/000077500000000000000000000000001467431054600207235ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/4MLinux/10.0-server.txt000066400000000000000000000000561467431054600233470ustar00rootroot00000000000000----------/etc/4MLinux-version---------- 10.0 phpsysinfo-3.4.4/sample/distrotest/ALT/000077500000000000000000000000001467431054600200435ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/ALT/6.0.0.txt000066400000000000000000000007211467431054600212450ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: n/a Distributor ID: ALT Description: ALT Linux 6.0.0 Centaurus (Cheiron) Release: 6.0.0 Codename: Cheiron ----------/etc/altlinux-release---------- ALT Linux 6.0.0 Centaurus (Cheiron) ----------/etc/fedora-release---------- ALT Linux 6.0.0 Centaurus (Cheiron) ----------/etc/redhat-release---------- ALT Linux 6.0.0 Centaurus (Cheiron) ----------/etc/system-release---------- ALT Linux 6.0.0 Centaurus (Cheiron) phpsysinfo-3.4.4/sample/distrotest/ALT/7.0.0-Simply.txt000066400000000000000000000010531467431054600225200ustar00rootroot00000000000000----------/etc/altlinux-release---------- Simply Linux 7.0.0 (Dory) ----------/etc/fedora-release---------- Simply Linux 7.0.0 (Dory) ----------/etc/os-release---------- NAME="Simply Linux" VERSION="7.0.0 (Dory)" ID=altlinux VERSION_ID=7.0.0 PRETTY_NAME="Simply Linux 7.0.0 (Dory)" ANSI_COLOR="1;36" CPE_NAME="cpe:/o:alt linux:slinux:7.0.0" HOME_URL="http://simplylinux.ru/" BUG_REPORT_URL="https://bugs.altlinux.org/" ----------/etc/redhat-release---------- Simply Linux 7.0.0 (Dory) ----------/etc/system-release---------- Simply Linux 7.0.0 (Dory) phpsysinfo-3.4.4/sample/distrotest/ALT/7.0.1.txt000066400000000000000000000011311467431054600212430ustar00rootroot00000000000000----------/etc/altlinux-release---------- ALT Linux 7.0.1 Centaurus (Pholus) ----------/etc/fedora-release---------- ALT Linux 7.0.1 Centaurus (Pholus) ----------/etc/os-release---------- NAME="ALT Linux" VERSION="7.0.1 (Pholus)" ID=altlinux VERSION_ID=6.9.0 PRETTY_NAME="ALT Linux 7.0.1 Centaurus (Pholus)" ANSI_COLOR="1;33" CPE_NAME="cpe:/o:alt linux:centaurus:7.0.1" HOME_URL="http://altlinux.ru/" BUG_REPORT_URL="https://bugs.altlinux.org/" ----------/etc/redhat-release---------- ALT Linux 7.0.1 Centaurus (Pholus) ----------/etc/system-release---------- ALT Linux 7.0.1 Centaurus (Pholus) phpsysinfo-3.4.4/sample/distrotest/Absolute/000077500000000000000000000000001467431054600212015ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Absolute/15.0.txt000066400000000000000000000005111467431054600223220ustar00rootroot00000000000000----------/etc/os-release---------- NAME=Absolute VERSION="15.0" ID=Absolute VERSION_ID=15.0 PRETTY_NAME="Absolute 15.0 (Slackware-15.0)" ANSI_COLOR="0;34" CPE_NAME="cpe:/o:absolute:absolute_linux:15.0" HOME_URL="https://absolutelinux.org/" VERSION_CODENAME=StaleCracker ----------/etc/slackware-version---------- Slackware 15.0 phpsysinfo-3.4.4/sample/distrotest/Alma/000077500000000000000000000000001467431054600202755ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Alma/8.3.txt000066400000000000000000000016551467431054600213550ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: AlmaLinux Description: AlmaLinux release 8.3 (Purple Manul) Release: 8.3 Codename: PurpleManul ----------/etc/almalinux-release---------- AlmaLinux release 8.3 (Purple Manul) ----------/etc/centos-release---------- AlmaLinux release 8.3 (Purple Manul) ----------/etc/os-release---------- NAME="AlmaLinux" VERSION="8.3 (Purple Manul)" ID="almalinux" ID_LIKE="rhel centos fedora" VERSION_ID="8.3" PLATFORM_ID="platform:el8" PRETTY_NAME="AlmaLinux 8.3 (Purple Manul)" ANSI_COLOR="0;34" CPE_NAME="cpe:/o:almalinux:almalinux:8.3:GA" HOME_URL="https://almalinux.org/" BUG_REPORT_URL="https://bugs.almalinux.org/" ALMALINUX_MANTISBT_PROJECT="AlmaLinux-8" ALMALINUX_MANTISBT_PROJECT_VERSION="8.3" ----------/etc/redhat-release---------- AlmaLinux release 8.3 (Purple Manul) ----------/etc/system-release---------- AlmaLinux release 8.3 (Purple Manul) phpsysinfo-3.4.4/sample/distrotest/Alpine/000077500000000000000000000000001467431054600206335ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Alpine/2.6.4.txt000066400000000000000000000000561467431054600220440ustar00rootroot00000000000000----------/etc/alpine-release---------- 2.6.4 phpsysinfo-3.4.4/sample/distrotest/Amazon/000077500000000000000000000000001467431054600206505ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Amazon/2013.09.txt000066400000000000000000000005061467431054600222260ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch Distributor ID: AmazonAMI Description: Amazon Linux AMI release 2013.09 Release: 2013.09 Codename: n/a ----------/etc/system-release---------- Amazon Linux AMI release 2013.09 phpsysinfo-3.4.4/sample/distrotest/Amazon/2016.09.txt000066400000000000000000000010701467431054600222260ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch Distributor ID: AmazonAMI Description: Amazon Linux AMI release 2016.09 Release: 2016.09 Codename: n/a ----------/etc/os-release---------- NAME="Amazon Linux AMI" VERSION="2016.09" ID="amzn" ID_LIKE="rhel fedora" VERSION_ID="2016.09" PRETTY_NAME="Amazon Linux AMI 2016.09" ANSI_COLOR="0;33" CPE_NAME="cpe:/o:amazon:linux:2016.09:ga" HOME_URL="http://aws.amazon.com/amazon-linux-ami/" ----------/etc/system-release---------- Amazon Linux AMI release 2016.09 phpsysinfo-3.4.4/sample/distrotest/Arch/000077500000000000000000000000001467431054600203005ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Arch/2011.08.19-ISO.txt000066400000000000000000000000721467431054600225310ustar00rootroot00000000000000----------/etc/arch-release---------- Arch Linux Live ISO phpsysinfo-3.4.4/sample/distrotest/Arch/2013.11.01.txt000066400000000000000000000004131467431054600220630ustar00rootroot00000000000000----------/etc/arch-release---------- ----------/etc/os-release---------- NAME="Arch Linux" ID=arch PRETTY_NAME="Arch Linux" ANSI_COLOR="0;36" HOME_URL="https://www.archlinux.org/" SUPPORT_URL="https://bbs.archlinux.org/" BUG_REPORT_URL="https://bugs.archlinux.org/" phpsysinfo-3.4.4/sample/distrotest/Arch/2014.01.05.txt000066400000000000000000000010341467431054600220670ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: 1.4 Distributor ID: Arch Description: Arch Linux Release: rolling Codename: n/a ----------/etc/arch-release---------- Arch Linux release ----------/etc/lsb-release---------- LSB_VERSION=1.4 DISTRIB_ID=Arch DISTRIB_RELEASE=rolling DISTRIB_DESCRIPTION="Arch Linux" ----------/etc/os-release---------- NAME="Arch Linux" ID=arch PRETTY_NAME="Arch Linux" ANSI_COLOR="0;36" HOME_URL="https://www.archlinux.org/" SUPPORT_URL="https://bbs.archlinux.org/" BUG_REPORT_URL="https://bugs.archlinux.org/" phpsysinfo-3.4.4/sample/distrotest/Arch/2017.03.07-ARM.txt000066400000000000000000000004721467431054600225200ustar00rootroot00000000000000----------/etc/arch-release---------- ----------/etc/os-release---------- NAME="Arch Linux ARM" ID=archarm ID_LIKE=arch PRETTY_NAME="Arch Linux ARM" ANSI_COLOR="0;36" HOME_URL="http://archlinuxarm.org/" SUPPORT_URL="https://archlinuxarm.org/forum" BUG_REPORT_URL="https://github.com/archlinuxarm/PKGBUILDs/issues" phpsysinfo-3.4.4/sample/distrotest/Archcraft/000077500000000000000000000000001467431054600213205ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Archcraft/2023.01.01.txt000066400000000000000000000013631467431054600231100ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: n/a Distributor ID: archcraft Description: Archcraft Release: rolling Codename: n/a ----------/etc/arch-release---------- ----------/etc/lsb-release---------- DISTRIB_ID=archcraft DISTRIB_RELEASE=rolling DISTRIB_DESCRIPTION="Archcraft" ----------/etc/os-release---------- NAME="Archcraft" PRETTY_NAME="Archcraft" ID=archcraft ID_LIKE=arch BUILD_ID=rolling ANSI_COLOR="38;2;23;147;209" HOME_URL="https://archcraft.io" DOCUMENTATION_URL="https://wiki.archcraft.io" SUPPORT_URL="https://www.reddit.com/r/archcraft" BUG_REPORT_URL="https://github.com/archcraft-os/archcraft/issues" PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/" LOGO=archcraft IMAGE_ID=archcraft IMAGE_VERSION=2023.01.01 phpsysinfo-3.4.4/sample/distrotest/Archman/000077500000000000000000000000001467431054600207745ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Archman/2022-07.txt000066400000000000000000000013331467431054600223460ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: n/a Distributor ID: Archman Description: Rolling Release Release: 2022-07 Codename: Freedom ----------/etc/arch-release---------- ----------/etc/lsb-release---------- DISTRIB_ID=Archman DISTRIB_RELEASE=2022-07 DISTRIB_DESCRIPTION="Rolling Release" DISTRIB_CODENAME="Freedom" ----------/etc/os-release---------- NAME="Archman" PRETTY_NAME="Archman" ID=archman BUILD_ID=rolling ANSI_COLOR="38;2;23;147;209" HOME_URL="https://archman.org" DOCUMENTATION_URL="https://archman.org/topluluk/belgeler" SUPPORT_URL="https://archman.org/topluluk" BUG_REPORT_URL="https://gitlab.com/groups/Archman-OS/-/issues" PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/" LOGO=archman phpsysinfo-3.4.4/sample/distrotest/Arco/000077500000000000000000000000001467431054600203075ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Arco/22.01.10_l.txt000066400000000000000000000013671467431054600222530ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: 1.4 Distributor ID: ArcoLinux Description: ArcoLinux Release: rolling Codename: n/a ----------/etc/arch-release---------- Arch Linux release ----------/etc/arcolinux-release---------- LSB_VERSION=1.4 DISTRIB_ID=ArcoLinux DISTRIB_RELEASE=rolling DISTRIB_DESCRIPTION="ArcoLinux" ----------/etc/lsb-release---------- LSB_VERSION=1.4 DISTRIB_ID=ArcoLinux DISTRIB_RELEASE=rolling DISTRIB_DESCRIPTION="ArcoLinux" ----------/etc/os-release---------- NAME=ArcoLinux ID=arcolinux ID_LIKE=arch BUILD_ID=rolling ANSI_COLOR="0;36" HOME_URL="https://arcolinux.info/" SUPPORT_URL="https://arcolinuxforum.com/" BUG_REPORT_URL="https://github.com/arcolinux/" LOGO=arcolinux-hello IMAGE_ID=arcolinuxl IMAGE_VERSION=v22.01.10 phpsysinfo-3.4.4/sample/distrotest/Armbian/000077500000000000000000000000001467431054600207745ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Armbian/23.02.2.txt000066400000000000000000000021701467431054600223410ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: Debian Description: Debian GNU/Linux 11 (bullseye) Release: 1 Codename: bullseye ----------/etc/armbian-image-release---------- # PLEASE DO NOT EDIT THIS FILE BOARD=uefi-x86 BOARD_NAME="UEFI x86" BOARDFAMILY=uefi-x86 BUILD_REPOSITORY_URL=https://github.com/armbian/build BUILD_REPOSITORY_COMMIT=1a8daf0 VERSION=23.02.2 LINUXFAMILY=x86 ARCH=x86_64 IMAGE_TYPE=stable BOARD_TYPE=conf INITRD_ARCH= KERNEL_IMAGE_TYPE=stable ----------/etc/armbian-release---------- # PLEASE DO NOT EDIT THIS FILE BOARD=uefi-x86 BOARD_NAME="UEFI x86" BOARDFAMILY=uefi-x86 BUILD_REPOSITORY_URL=https://github.com/armbian/build BUILD_REPOSITORY_COMMIT=1a8daf0 VERSION=23.02.2 LINUXFAMILY=x86 ARCH=x86_64 IMAGE_TYPE=stable BOARD_TYPE=conf INITRD_ARCH= KERNEL_IMAGE_TYPE=stable ----------/etc/os-release---------- PRETTY_NAME="Armbian 23.02.2 Bullseye" NAME="Debian GNU/Linux" VERSION_ID="11" VERSION="11 (bullseye)" VERSION_CODENAME=bullseye ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" ----------/etc/debian_version---------- 11.6 phpsysinfo-3.4.4/sample/distrotest/Artix/000077500000000000000000000000001467431054600205125ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Artix/20210726.txt000066400000000000000000000013131467431054600221540ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: 1.4 Distributor ID: Artix Description: Artix Linux Release: rolling Codename: n/a ----------/etc/artix-release---------- Artix Linux release ----------/etc/lsb-release---------- LSB_VERSION=1.4 DISTRIB_ID=Artix DISTRIB_RELEASE=rolling DISTRIB_DESCRIPTION="Artix Linux" VERSION_ID=20210726 VARIANT=xfce-openrc ----------/etc/os-release---------- NAME="Artix Linux" PRETTY_NAME="Artix Linux" ID=artix BUILD_ID=rolling ANSI_COLOR="0;36" HOME_URL="https://artixlinux.org/" DOCUMENTATION_URL="https://wiki.artixlinux.org/" SUPPORT_URL="https://forum.artixlinux.org/" BUG_REPORT_URL="https://bugs.artixlinux.org/" LOGO=artixlinux VERSION_ID=20210726 VARIANT=xfce-openrc phpsysinfo-3.4.4/sample/distrotest/BOSS/000077500000000000000000000000001467431054600201715ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/BOSS/1.0-server.txt000066400000000000000000000005241467431054600225350ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: core-2.0-noarch:core-3.0-noarch:core-3.1-noarch:core-2.0-ia32:core-3.0-ia32:core-3.1-ia32 Distributor ID: BOSS Server Beta Description: BOSS Server Beta GNU/Linux anant Release: anant Codename: 1.0 ----------/etc/boss_version---------- anant ----------/etc/debian_version---------- lenny/sid phpsysinfo-3.4.4/sample/distrotest/BOSS/5.0.txt000066400000000000000000000010051467431054600212300ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: BOSS Description: BOSS GNU/Linux 5.0 (anokha) Release: 5.0 Codename: anokha ----------/etc/os-release---------- PRETTY_NAME="BOSS GNU/Linux 5.0 (anokha)" NAME="BOSS GNU/Linux" VERSION_ID="5.0" VERSION="5.0 (anokha)" ID=debian ANSI_COLOR="1;31" HOME_URL="http://www.bosslinux.in/" SUPPORT_URL="http://www.bosslinux.in/support-centre" BUG_REPORT_URL="http://bugzilla.bosslinux.in/" ----------/etc/boss_version---------- 5.0 ----------/etc/debian_version---------- 7.0 phpsysinfo-3.4.4/sample/distrotest/BigLinux/000077500000000000000000000000001467431054600211445ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/BigLinux/19.04.txt000066400000000000000000000012231467431054600223560ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: Ubuntu Description: BigLinux based in Ubuntu 19.04 Release: 19.04 Codename: disco ----------/etc/lsb-release---------- DISTRIB_ID=BigLinux based in Ubuntu 19.04" DISTRIB_RELEASE=19.04 DISTRIB_CODENAME=Disco DISTRIB_DESCRIPTION="BigLinux 19.04" ----------/etc/os-release---------- NAME="BigLinux based in Ubuntu" VERSION="19.04 (Disco)" ID=BigLinux ID_LIKE=ubuntu PRETTY_NAME="BigLinux based in Ubuntu 19.04" VERSION_ID="19.04" HOME_URL="https://www.biglinux.com.br/" SUPPORT_URL="https://forum.biglinux.com.br/" VERSION_CODENAME=disco UBUNTU_CODENAME=disco ----------/etc/debian_version---------- buster/sid phpsysinfo-3.4.4/sample/distrotest/BigLinux/20.04_RC1.txt000066400000000000000000000012151467431054600230140ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: Ubuntu Description: BigLinux based in Ubuntu 20.04 Release: 20.04 Codename: focal ----------/etc/lsb-release---------- DISTRIB_ID=BigLinux based in Ubuntu" DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=Focal DISTRIB_DESCRIPTION="BigLinux 20.04" ----------/etc/os-release---------- NAME="BigLinux based in Ubuntu" VERSION="20.04 (Focal)" ID=ubuntu ID_LIKE=ubuntu PRETTY_NAME="BigLinux based in Ubuntu 20.04" VERSION_ID="20.04" HOME_URL="https://www.biglinux.com.br/" SUPPORT_URL="https://forum.biglinux.com.br/" VERSION_CODENAME=focal UBUNTU_CODENAME=focal ----------/etc/debian_version---------- bullseye/sid phpsysinfo-3.4.4/sample/distrotest/BigLinux/2023-04-11_15-10.txt000066400000000000000000000017351467431054600234640ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: n/a Distributor ID: BigLinux based in Manjaro Linux Description: BigLinux Release: 2023-04-11_15-10 Codename: Sikaris ----------/etc/arch-release---------- Manjaro Linux ----------/etc/big-release---------- BUILD BUILD_BRANCH=stable UNIX_TIMESTAMP=19458 ----------/etc/lsb-release---------- DISTRIB_ID="BigLinux based in Manjaro Linux" DISTRIB_RELEASE=2023-04-11_15-10 DISTRIB_CODENAME=Sikaris DISTRIB_DESCRIPTION="BigLinux" ----------/etc/manjaro-release---------- Manjaro Linux ----------/etc/os-release---------- NAME="BigLinux based in Manjaro Linux" PRETTY_NAME="BigLinux based in Manjaro Linux" ID=manjaro ID_LIKE=arch BUILD_ID=rolling ANSI_COLOR="32;1;24;144;200" HOME_URL="https://www.biglinux.com.br" DOCUMENTATION_URL="https://manual.biglinux.com.br" SUPPORT_URL="https://forum.biglinux.com.br" BUG_REPORT_URL="https://docs.manjaro.org/reporting-bugs/" PRIVACY_POLICY_URL="https://manjaro.org/privacy-policy/" LOGO="biglinux-blue" phpsysinfo-3.4.4/sample/distrotest/BigLinux/7.10.txt000066400000000000000000000011611467431054600222710ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: Deepin Description: BigLinux 7.10 Release: 7.10 Codename: Trioxin ----------/etc/lsb-release---------- DISTRIB_ID=Deepin DISTRIB_RELEASE=7.10 DISTRIB_CODENAME=Trioxin DISTRIB_DESCRIPTION="BigLinux 7.10" ----------/etc/os-release---------- PRETTY_NAME="Deepin 15" NAME="Deepin" VERSION_ID="15.4.1" VERSION="15.4.1" ID=deepin HOME_URL="https://www.deepin.org/" BUG_REPORT_URL="http://feedback.deepin.org/feedback/" ----------/etc/deepin-version---------- [Release] Version=15.4.1 Type=Desktop Type[zh_CN]=xxx [Addition] Milestone= ----------/etc/debian_version---------- 8.0 phpsysinfo-3.4.4/sample/distrotest/Bluestar/000077500000000000000000000000001467431054600212045ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Bluestar/5.16.15.txt000066400000000000000000000007611467431054600225660ustar00rootroot00000000000000----------/etc/arch-release---------- ----------/etc/lsb-release---------- LSB_VERSION=1.4 DISTRIB_ID=BluestarLinux DISTRIB_RELEASE=rolling DISTRIB_DESCRIPTION="Bluestar Linux" ----------/etc/os-release---------- NAME="Arch Linux" PRETY_NAME="Arch Linux" ID=arch BUILD_ID=rolling ANSI_COLOR="38;2;23;147;209" HOME_URL="https://archlinux.org/" DOCUMENTATION_URL="https://wiki.archlinux.org/" SUPPORT_URL="https://bbs.archlinux.org/" BUG_REPORT_URL="https://bugs.archlinux.org/" LOGO=archlinux-logo phpsysinfo-3.4.4/sample/distrotest/Bodhi/000077500000000000000000000000001467431054600204505ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Bodhi/6.0.0.txt000066400000000000000000000013061467431054600216520ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: Ubuntu Description: Bodhi 6.0.0 Release: 20.04 Codename: focal ----------/etc/lsb-release---------- DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=focal DISTRIB_DESCRIPTION="Bodhi 6.0" ----------/etc/os-release---------- NAME="Ubuntu" VERSION="20.04.2 LTS (Focal Fossa)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Bodhi 6.0.0" VERSION_ID="20.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=focal UBUNTU_CODENAME=focal ----------/etc/debian_version---------- bullseye/sid phpsysinfo-3.4.4/sample/distrotest/CachyOS/000077500000000000000000000000001467431054600207145ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/CachyOS/221230.txt000066400000000000000000000014151467431054600222070ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: n/a Distributor ID: cachyos Description: CachyOS Release: rolling Codename: n/a ----------/etc/arch-release---------- ----------/etc/cachyos-release---------- LSB_VERSION=2.0 DISTRIB_ID=CachyOS DISTRIB_RELEASE=rolling DISTRIB_DESCRIPTION="CachyOS Linux" ----------/etc/lsb-release---------- DISTRIB_ID=cachyos DISTRIB_RELEASE="rolling" DISTRIB_DESCRIPTION="CachyOS" ----------/etc/os-release---------- NAME="CachyOS Linux" PRETTY_NAME="CachyOS" ID=cachyos ID_LIKE=arch BUILD_ID=rolling ANSI_COLOR="38;2;23;147;209" HOME_URL="https://cachyos.org/" DOCUMENTATION_URL="https://wiki.cachyos.org/" SUPPORT_URL="https://forum.cachyos.org/" BUG_REPORT_URL="https://github.com/cachyos" LOGO=cachyos IMAGE_ID=cachyos IMAGE_VERSION=2022.12.30 phpsysinfo-3.4.4/sample/distrotest/Calculate/000077500000000000000000000000001467431054600213205ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Calculate/13.11.txt000066400000000000000000000004661467431054600225320ustar00rootroot00000000000000----------/etc/gentoo-release---------- Calculate Linux Desktop 13.11 XFCE ----------/etc/os-release---------- NAME=Gentoo ID=gentoo PRETTY_NAME="Gentoo/Linux" ANSI_COLOR="1;32" HOME_URL="http://www.gentoo.org/" SUPPORT_URL="http://www.gentoo.org/main/en/support.xml" BUG_REPORT_URL="https://bugs.gentoo.org/" phpsysinfo-3.4.4/sample/distrotest/Canaima/000077500000000000000000000000001467431054600207545ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Canaima/4.1.txt000066400000000000000000000011271467431054600220200ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: Canaima Description: Canaima GNU/Linux 4.1 (kukenan) Release: 4.1 Codename: kukenan ----------/etc/os-release---------- PRETTY_NAME="Canaima GNU/Linux 4.1 (kukenan)" NAME="Canaima GNU/Linux" VERSION_ID="4.1" VERSION="4.1 (kukenan)" ID=canaima ANSI_COLOR="1;31" HOME_URL="http://http://canaima.softwarelibre.gob.ve/" SUPPORT_URL="http://http://canaima.softwarelibre.gob.ve/Soporte" BUG_REPORT_URL="http://http://trac.canaima.softwarelibre.gob.ve/canaima/" ----------/etc/canaima_version---------- 4.1 ----------/etc/debian_version---------- Canaima phpsysinfo-3.4.4/sample/distrotest/CentOS/000077500000000000000000000000001467431054600205565ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/CentOS/5.6.txt000066400000000000000000000005571467431054600216360ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarch Distributor ID: CentOS Description: CentOS release 5.6 (Final) Release: 5.6 Codename: Final ----------/etc/redhat-release---------- CentOS release 5.6 (Final) phpsysinfo-3.4.4/sample/distrotest/CentOS/6.5-SF.txt000066400000000000000000000003111467431054600221300ustar00rootroot00000000000000----------/etc/centos-release---------- CentOS release 6.5 (Final) ----------/etc/redhat-release---------- CentOS release 6.5 (Final) ----------/etc/system-release---------- CentOS release 6.5 (Final) phpsysinfo-3.4.4/sample/distrotest/CentOS/6.5.txt000066400000000000000000000012371467431054600216320ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch Distributor ID: CentOS Description: CentOS release 6.5 (Final) Release: 6.5 Codename: Final ----------/etc/centos-release---------- CentOS release 6.5 (Final) ----------/etc/lsb-release---------- LSB_VERSION=base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch ----------/etc/redhat-release---------- CentOS release 6.5 (Final) ----------/etc/system-release---------- CentOS release 6.5 (Final) phpsysinfo-3.4.4/sample/distrotest/CentOS/7.1.1503.txt000066400000000000000000000012271467431054600222150ustar00rootroot00000000000000----------/etc/centos-release---------- CentOS Linux release 7.1.1503 (Core) ----------/etc/os-release---------- NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" CENTOS_MANTISBT_PROJECT="CentOS-7" CENTOS_MANTISBT_PROJECT_VERSION="7" REDHAT_SUPPORT_PRODUCT="centos" REDHAT_SUPPORT_PRODUCT_VERSION="7" ----------/etc/redhat-release---------- CentOS Linux release 7.1.1503 (Core) ----------/etc/system-release---------- CentOS Linux release 7.1.1503 (Core) phpsysinfo-3.4.4/sample/distrotest/CentOS/Stream-8.txt000066400000000000000000000013761467431054600227260ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOSStream Description: CentOS Stream release 8 Release: 8 Codename: n/a ----------/etc/centos-release---------- CentOS Stream release 8 ----------/etc/os-release---------- NAME="CentOS Stream" VERSION="8" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="8" PLATFORM_ID="platform:el8" PRETTY_NAME="CentOS Stream 8" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:8" HOME_URL="https://centos.org/" BUG_REPORT_URL="https://bugzilla.redhat.com/" REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux 8" REDHAT_SUPPORT_PRODUCT_VERSION="CentOS Stream" ----------/etc/redhat-release---------- CentOS Stream release 8 ----------/etc/system-release---------- CentOS Stream release 8 phpsysinfo-3.4.4/sample/distrotest/Chakra/000077500000000000000000000000001467431054600206145ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Chakra/2013.02.txt000066400000000000000000000010301467431054600221540ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: n/a Distributor ID: Chakra Description: Chakra Release: 2013.02 Codename: Benz ----------/etc/chakra-release---------- ----------/etc/lsb-release---------- DISTRIB_ID="Chakra" DISTRIB_RELEASE="2013.02" DISTRIB_CODENAME="Benz" DISTRIB_DESCRIPTION="Chakra" ----------/etc/os-release---------- NAME="The Chakra-Project" VERSION="Benz" ID=chakra PRETTY_NAME="The Chakra-Project (Benz)" ANSI_COLOR="0;36" HOME_URL="http://www.chakra-linux.org/" BUG_REPORT_URL="http://chakra-linux.org/bugs/" phpsysinfo-3.4.4/sample/distrotest/Clear/000077500000000000000000000000001467431054600204515ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Clear/35000.txt000066400000000000000000000005461467431054600216660ustar00rootroot00000000000000----------/etc/os-release---------- NAME="Clear Linux OS" VERSION=1 ID=clear-linux-os ID_LIKE=clear-linux-os VERSION_ID=35000 PRETTY_NAME="Clear Linux OS" ANSI_COLOR="1;35" HOME_URL="https://clearlinux.org" SUPPORT_URL="https://clearlinux.org" BUG_REPORT_URL="mailto:dev@lists.clearlinux.org" PRIVACY_POLICY_URL="http://www.intel.com/privacy" BUILD_ID=35000 phpsysinfo-3.4.4/sample/distrotest/ClearOS/000077500000000000000000000000001467431054600207135ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/ClearOS/6.4.0-Beta.txt000066400000000000000000000004031467431054600227670ustar00rootroot00000000000000----------/etc/clearos-release---------- ClearOS Community release 6.4.0 Beta (Beta 2) ----------/etc/redhat-release---------- ClearOS Community release 6.4.0 Beta (Beta 2) ----------/etc/system-release---------- ClearOS Community release 6.4.0 Beta (Beta 2) phpsysinfo-3.4.4/sample/distrotest/Cloud/000077500000000000000000000000001467431054600204715ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Cloud/5.10.txt000066400000000000000000000010201467431054600216060ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarch Distributor ID: CloudLinuxServer Description: CloudLinux Server release 5.10 (Georgy Beregovoy) Release: 5.10 Codename: GeorgyBeregovoy ----------/etc/CloudLinux-release---------- CloudLinux Server release 5.10 (Georgy Beregovoy) ----------/etc/redhat-release---------- CloudLinux Server release 5.10 (Georgy Beregovoy) phpsysinfo-3.4.4/sample/distrotest/Cloud/6.4.txt000066400000000000000000000011551467431054600215430ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch Distributor ID: CloudLinuxServer Description: CloudLinux Server release 6.4 Release: 6.4 Codename: n/a ----------/etc/lsb-release---------- LSB_VERSION=base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch ----------/etc/redhat-release---------- CloudLinux Server release 6.4 ----------/etc/system-release---------- CloudLinux Server release 6.4 phpsysinfo-3.4.4/sample/distrotest/Cloud/7.2.txt000066400000000000000000000013541467431054600215430ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: n/a Description: NAME="CloudLinux" Release: n/a Codename: n/a ----------/etc/cloudlinux-release---------- CloudLinux release 7.2 (Valeri Kubasov) ----------/etc/os-release---------- NAME="CloudLinux" VERSION="7.2 (Valeri Kubasov)" ID="cloudlinux" ID_LIKE="rhel fedora centos" VERSION_ID="7.2" PRETTY_NAME="CloudLinux 7.2 (Valeri Kubasov)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:cloudlinux:cloudlinux:7" HOME_URL="https://www.cloudlinux.com/" BUG_REPORT_URL="https://helpdesk.cloudlinux.com/" ----------/etc/redhat-release---------- CloudLinux release 7.2 (Valeri Kubasov) ----------/etc/system-release---------- CloudLinux release 7.2 (Valeri Kubasov) phpsysinfo-3.4.4/sample/distrotest/Container/000077500000000000000000000000001467431054600213455ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Container/1409.2.0.txt000066400000000000000000000010031467431054600227730ustar00rootroot00000000000000----------/etc/lsb-release---------- DISTRIB_ID="Container Linux by CoreOS" DISTRIB_RELEASE=1409.2.0 DISTRIB_CODENAME="Ladybug" DISTRIB_DESCRIPTION="Container Linux by CoreOS 1409.2.0 (Ladybug)" ----------/etc/os-release---------- NAME="Container Linux by CoreOS" ID=coreos VERSION=1409.2.0 VERSION_ID=1409.2.0 BUILD_ID=2017-06-19-2321 PRETTY_NAME="Container Linux by CoreOS 1409.2.0 (Ladybug)" ANSI_COLOR="38;5;75" HOME_URL="https://coreos.com/" BUG_REPORT_URL="https://issues.coreos.com" COREOS_BOARD="amd64-usr" phpsysinfo-3.4.4/sample/distrotest/CoreOS/000077500000000000000000000000001467431054600205555ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/CoreOS/367.1.0.txt000066400000000000000000000005731467431054600221370ustar00rootroot00000000000000----------/etc/lsb-release---------- DISTRIB_ID=CoreOS DISTRIB_RELEASE=367.1.0 DISTRIB_CODENAME="Red Dog" DISTRIB_DESCRIPTION="CoreOS 367.1.0" ----------/etc/os-release---------- NAME=CoreOS ID=coreos VERSION=367.1.0 VERSION_ID=367.1.0 BUILD_ID= PRETTY_NAME="CoreOS 367.1.0" ANSI_COLOR="1;32" HOME_URL="https://coreos.com/" BUG_REPORT_URL="https://github.com/coreos/bugs/issues" phpsysinfo-3.4.4/sample/distrotest/Crux/000077500000000000000000000000001467431054600203445ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Crux/2.8.txt000066400000000000000000000000631467431054600214130ustar00rootroot00000000000000----------/usr/bin/crux---------- CRUX version 2.8 phpsysinfo-3.4.4/sample/distrotest/Debian/000077500000000000000000000000001467431054600206055ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Debian/5.0.3.txt000066400000000000000000000000561467431054600220120ustar00rootroot00000000000000----------/etc/debian_version---------- 5.0.3 phpsysinfo-3.4.4/sample/distrotest/Debian/6.0.6.txt000066400000000000000000000002671467431054600220220ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: Debian Description: Debian GNU/Linux 6.0.6 (squeeze) Release: 6.0.6 Codename: squeeze ----------/etc/debian_version---------- 6.0.6 phpsysinfo-3.4.4/sample/distrotest/Debian/8-20140106-netinstall.txt000066400000000000000000000003261467431054600245640ustar00rootroot00000000000000----------/etc/default-release---------- jessie ----------/etc/lsb-release---------- DISTRIB_ID=Debian DISTRIB_DESCRIPTION="Debian GNU/Linux installer" DISTRIB_RELEASE="8 (jessie) - installer build 20140106-00:05" phpsysinfo-3.4.4/sample/distrotest/Debian/8-20140106.txt000066400000000000000000000006701467431054600224130ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: Debian Description: Debian GNU/Linux testing (jessie) Release: testing Codename: jessie ----------/etc/os-release---------- PRETTY_NAME="Debian GNU/Linux jessie/sid" NAME="Debian GNU/Linux" ID=debian ANSI_COLOR="1;31" HOME_URL="http://www.debian.org/" SUPPORT_URL="http://www.debian.org/support/" BUG_REPORT_URL="http://bugs.debian.org/" ----------/etc/debian_version---------- jessie/sid phpsysinfo-3.4.4/sample/distrotest/Deepin/000077500000000000000000000000001467431054600206275ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Deepin/20.08.txt000066400000000000000000000016301467431054600220370ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: Deepin Description: Deepin 20.08 Release: 20.08 Codename: apricot ----------/etc/lsb-release---------- DISTRIB_ID=Deepin DISTRIB_RELEASE=20.08 DISTRIB_DESCRIPTION="Deepin 20.08" DISTRIB_CODENAME=apricot ----------/etc/os-release---------- PRETTY_NAME="Deepin 20.08" NAME="Deepin" VERSION_ID="20.08" VERSION="20.08" VERSION_CODENAME="apricot" ID=Deepin HOME_URL="https://www.deepin.org/" BUG_REPORT_URL="https://bbs.deepin.org/" ----------/etc/deepin-version---------- [Release] Version=20.8 Type=Desktop Type[zh_CN]=xxx Edition=Y2020E0001 Copyright=Y2020CR001 [Addition] Milestone= Buildid=build1 ----------/etc/os-version---------- [Version] SystemName=Deepin SystemName[zh_CN]=xxx ProductType=Desktop ProductType[zh_CN]=xxx EditionName=Community EditionName[zh_CN]=xxx MajorVersion=20 MinorVersion=20.8 OsBuild=11038.007 ----------/etc/debian_version---------- 10.10 phpsysinfo-3.4.4/sample/distrotest/Deepin/2013.txt000066400000000000000000000011241467431054600217530ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: LinuxDeepin Description: LinuxDeepin 2013 Release: 2013 Codename: raring ----------/etc/lsb-release---------- DISTRIB_ID=LinuxDeepin DISTRIB_RELEASE=2013 DISTRIB_CODENAME=raring DISTRIB_DESCRIPTION="LinuxDeepin 2013" ----------/etc/os-release---------- NAME="Ubuntu" VERSION="13.04, Raring Ringtail" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 13.04" VERSION_ID="13.04" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" ----------/etc/debian_version---------- wheezy/sid phpsysinfo-3.4.4/sample/distrotest/Deepin/23-alpha2.txt000066400000000000000000000016621467431054600227660ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: Deepin Description: Deepin 23 Release: 23 Codename: beige ----------/etc/lsb-release---------- DISTRIB_ID=Deepin DISTRIB_RELEASE=23 DISTRIB_DESCRIPTION="Deepin 23" DISTRIB_CODENAME=beige ----------/etc/os-release---------- PRETTY_NAME="Deepin 23" NAME="Deepin" VERSION_ID="23" VERSION="23" ID=Deepin HOME_URL="https://www.deepin.org/" BUG_REPORT_URL="https://bbs.deepin.org/" VERSION_CODENAME=beige ----------/etc/deepin-version---------- [Release] Version=23 Type=Desktop Type[zh_CN]=xxx Edition=Y2020E0001 Copyright=Y2020CR001 [Addition] Milestone= Buildid=build1 ----------/etc/os-version---------- [Version] SystemName=Deepin SystemName[zh_CN]=xxx ProductType=Desktop ProductType[zh_CN]=xxx EditionName=Community EditionName[zh_CN]=xxx (alpha2) MajorVersion=23 MinorVersion=23 OsBuild=21238.100 ----------/etc/debian_version---------- bookworm/sid ----------/etc/deepin_version---------- 23 phpsysinfo-3.4.4/sample/distrotest/Devuan/000077500000000000000000000000001467431054600206455ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Devuan/1.0.txt000066400000000000000000000007531467431054600217110ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: Devuan Description: Devuan GNU/Linux 1.0 (jessie) Release: 1.0 Codename: jessie ----------/etc/os-release---------- PRETTY_NAME="Devuan GNU/Linux 1 (jessie)" NAME="Devuan GNU/Linux" VERSION_ID="1" VERSION="1 (jessie)" ID=devuan HOME_URL="http://www.devuan.org/" SUPPORT_URL="http://www.devuan.org/support/" BUG_REPORT_URL="https://bugs.devuan.org/" ----------/etc/debian_version---------- 7.9 ----------/etc/devuan_version---------- jessie phpsysinfo-3.4.4/sample/distrotest/EasyOS/000077500000000000000000000000001467431054600205665ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/EasyOS/0.6.8.txt000066400000000000000000000030421467431054600217770ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: n/a Distributor ID: Quirky Description: Easy OS Release: 0.6.8 Codename: xerus64 ----------/etc/lsb-release---------- LSB_VERSION=n/a DISTRIB_ID=Quirky DISTRIB_RELEASE=0.6.8 DISTRIB_CODENAME=xerus64 DISTRIB_DESCRIPTION="Easy OS" ----------/etc/DISTRO_SPECS---------- #One or more words that identify this distribution: #Note: Ubuntu 16.04 LTS is named Xenial Xerus. DISTRO_NAME='Easy OS' #EASY #version number of this distribution: DISTRO_VERSION=0.6.8 #EASY #The distro whose binary packages were used to build this distribution: DISTRO_BINARY_COMPAT='ubuntu' #Prefix for some filenames: exs: unicornsave.2fs, unicorn-4.99.0.sfs DISTRO_FILE_PREFIX='xerus64' #The version of the distro whose binary packages were used to build this distro: DISTRO_COMPAT_VERSION='xenial' #the kernel pet package used: #DISTRO_KERNEL_PET='linux_kernel-4.11.12-aufs-xerus-amd64.pet' DISTRO_KERNEL_PET='linux_kernel-4.14.11-xerus64.pet' DISTRO_SKELETON_IMAGE='easy-skeleton-amd64-640mb.img.gz' #EASY #read by /usr/bin/xwin to bypass Xorg Wizard at first boot: DISTRO_XORG_AUTO='yes' DISTRO_TARGETARCH='amd64' #subname for online PETs dir. Ex: 'unicorn', dir 'pet_packages-unicorn', db file 'Packages-pet-unicorn-official': #note: prior to existence of this variable, online subname was set to $DISTRO_COMPAT_VERSION or via some hack code. DISTRO_DB_SUBNAME='xerus' #yes here will cause /lib/x86_64-linux-gnu to be a symlink to /lib (and /usr/lib...): DISTRO_ARCHDIR_SYMLINKS='no' DISTRO_ARCHDIR='x86_64-linux-gnu' DISTRO_PUPPYDATE='Jan 2018' phpsysinfo-3.4.4/sample/distrotest/EasyOS/0.9.4.txt000066400000000000000000000027631467431054600220070ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: n/a Distributor ID: Quirky Description: Easy Beaver Release: 0.9.4 Codename: beaver64 ----------/etc/lsb-release---------- LSB_VERSION=n/a DISTRIB_ID=Quirky DISTRIB_RELEASE=0.9.4 DISTRIB_CODENAME=beaver64 DISTRIB_DESCRIPTION="Easy Beaver" ----------/etc/DISTRO_SPECS---------- #One or more words that identify this distribution: #Note: Ubuntu 16.04 LTS is named Xenial Xerus. DISTRO_NAME='Easy Beaver' #EASY #version number of this distribution: DISTRO_VERSION=0.9.4 #EASY #The distro whose binary packages were used to build this distribution: DISTRO_BINARY_COMPAT='ubuntu' #Prefix for some filenames: exs: unicornsave.2fs, unicorn-4.99.0.sfs DISTRO_FILE_PREFIX='beaver64' #The version of the distro whose binary packages were used to build this distro: DISTRO_COMPAT_VERSION='bionic' #the kernel pet package used: DISTRO_KERNEL_PET='linux_kernel-4.18.9-beaver64.pet' DISTRO_SKELETON_IMAGE='easy-skeleton-amd64-640mb.img.gz' #EASY #read by /usr/bin/xwin to bypass Xorg Wizard at first boot: DISTRO_XORG_AUTO='yes' DISTRO_TARGETARCH='amd64' #subname for online PETs dir. Ex: 'unicorn', dir 'pet_packages-unicorn', db file 'Packages-pet-unicorn-official': #note: prior to existence of this variable, online subname was set to $DISTRO_COMPAT_VERSION or via some hack code. DISTRO_DB_SUBNAME='beaver' #yes here will cause /lib/x86_64-linux-gnu to be a symlink to /lib (and /usr/lib...): DISTRO_ARCHDIR_SYMLINKS='no' DISTRO_ARCHDIR='x86_64-linux-gnu' DISTRO_PUPPYDATE='Sep 2018' phpsysinfo-3.4.4/sample/distrotest/EasyOS/1.2.9.1.txt000066400000000000000000000033111467431054600221330ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: n/a Distributor ID: Quirky Description: Easy Pyro64 Release: 1.2.9.1 Codename: pyro64 ----------/etc/lsb-release---------- LSB_VERSION=n/a DISTRIB_ID=Quirky DISTRIB_RELEASE=1.2.9.1 DISTRIB_CODENAME=pyro64 DISTRIB_DESCRIPTION="Easy Pyro64" ----------/etc/DISTRO_SPECS---------- #One or more words that identify this distribution: DISTRO_NAME='Easy Pyro64' #version number of this distribution: DISTRO_VERSION=1.2.9.1 #The distro whose binary packages were used to build this distribution: DISTRO_BINARY_COMPAT='oe' #Prefix for some filenames: exs: aprilsave.2fs, april-5.1.3.4.sfs DISTRO_FILE_PREFIX='pyro64' #The version of the distro whose binary packages were used to build this distro: DISTRO_COMPAT_VERSION='pyro' #the kernel pet package used: Kernel 'linux-quirky' now compiled in OE, do not specify here if use that: DISTRO_KERNEL_PET='linux_kernel-5.4.1-pyro64.pet' #DISTRO_KERNEL_PET='linux_kernel-4.14.157-pyro64.pet' #DISTRO_KERNEL_PET='linux_kernel-5.2.21-pyro64.pet' #for Easy Linux, need to specify this skeleton image... DISTRO_SKELETON_IMAGE='easy-skeleton-amd64-1280mb.img.gz' DISTRO_TARGETARCH='amd64' #subname for online PETs dir. Ex: 'slacko14', dir 'pet_packages-slacko14', db file 'Packages-pet-slacko14-official': #note: prior to existence of this variable, online subname was set to $DISTRO_COMPAT_VERSION or via some hack code. DISTRO_DB_SUBNAME='pyro' #this will cause all of /lib64, /usr/lib64 and /usr/X11R7/lib moved into /lib, #/usr/lib, /usr/X11R7/lib, and the latter made into symlinks: DISTRO_ARCHDIR_SYMLINKS='no' #yes if want xorg to start immediately first boot (without cli dialogs): DISTRO_XORG_AUTO='yes' DISTRO_ARCHDIR='' DISTRO_PUPPYDATE='Dec 2019' phpsysinfo-3.4.4/sample/distrotest/EasyOS/2.1.11.txt000066400000000000000000000033571467431054600220570ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: n/a Distributor ID: Quirky Description: Easy Buster64 Release: 2.1.11 Codename: buster64 ----------/etc/lsb-release---------- LSB_VERSION=n/a DISTRIB_ID=Quirky DISTRIB_RELEASE=2.1.11 DISTRIB_CODENAME=buster64 DISTRIB_DESCRIPTION="Easy Buster64" ----------/etc/DISTRO_SPECS---------- #One or more words that identify this distribution: DISTRO_NAME='Easy Buster64' #version number of this distribution: DISTRO_VERSION=2.1.11 #The distro whose binary packages were used to build this distribution: DISTRO_BINARY_COMPAT='debian' #Prefix for some filenames: exs: aprilsave.2fs, april-5.1.3.4.sfs DISTRO_FILE_PREFIX='buster64' #The version of the distro whose binary packages were used to build this distro: DISTRO_COMPAT_VERSION='buster' #the kernel pet package used: Kernel 'linux-quirky' now compiled in OE, do not specify here if use that: DISTRO_KERNEL_PET='linux_kernel-5.4.6-buster64.pet' #DISTRO_KERNEL_PET='linux_kernel-4.19.88-buster64.pet' #DISTRO_KERNEL_PET='linux_kernel-5.2.21-buster64.pet' #for Easy Linux, need to specify this skeleton image... DISTRO_SKELETON_IMAGE='easy-skeleton-amd64-1280mb.img.gz' DISTRO_TARGETARCH='amd64' #subname for online PETs dir. Ex: 'slacko14', dir 'pet_packages-slacko14', db file 'Packages-pet-slacko14-official': #note: prior to existence of this variable, online subname was set to $DISTRO_COMPAT_VERSION or via some hack code. DISTRO_DB_SUBNAME='buster' #this will cause all of /lib64, /usr/lib64 and /usr/X11R7/lib moved into /lib, #/usr/lib, /usr/X11R7/lib, and the latter made into symlinks: DISTRO_ARCHDIR_SYMLINKS='no' #yes if want xorg to start immediately first boot (without cli dialogs): DISTRO_XORG_AUTO='yes' DISTRO_ARCHDIR='x86_64-linux-gnu' DISTRO_PUPPYDATE='Dec 2019' phpsysinfo-3.4.4/sample/distrotest/Eisfair/000077500000000000000000000000001467431054600210055ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Eisfair/1-2.6.5.txt000066400000000000000000000003411467431054600223520ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: n/a Distributor ID: eisfair project Description: eisfair-1 Release: 2.6.5 Codename: n/a ----------/etc/version---------- 2.6.5 ----------/etc/eisfair-system---------- eisfair-1 phpsysinfo-3.4.4/sample/distrotest/Eisfair/2-1.8.1.txt000066400000000000000000000001311467431054600223450ustar00rootroot00000000000000----------/etc/version---------- 1.8.1 ----------/etc/eisfair-system---------- eisfair-2 phpsysinfo-3.4.4/sample/distrotest/Eisfair/64-2.8.25.txt000066400000000000000000000005241467431054600225320ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: n/a Distributor ID: eisfair project Description: eisfair-64 Release: 2.8.25 Codename: n/a ----------/etc/os-release---------- NAME=eisfair VERSION="2.8.25" VERSION_ID="2.8.25" PRETTY_NAME="eisfair-64" ----------/etc/version---------- 2.8.25 ----------/etc/eisfair-system---------- eisfair-64 phpsysinfo-3.4.4/sample/distrotest/Elive/000077500000000000000000000000001467431054600204675ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Elive/3.8.30.txt000066400000000000000000000024161467431054600217640ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: Debian Description: Elive GNU/Linux 11 (on Debian bullseye) Release: 11 Codename: bullseye ----------/etc/lsb-release---------- # Defaults for debian DISTRIB_ID="Debian" DISTRIB_RELEASE="11" DISTRIB_CODENAME="bullseye" #DISTRIB_DESCRIPTION="Elive GNU/Linux 11 (on Debian bullseye)" # Important: The values should be the correct ones for Elive, but if you enable them it will break some debian stuff like update-notifier, update-manager-gnome, add-apt-repository, steam, and many others... - So better to stick at a Debian / bullseye compatible system #DISTRIB_ID="Elive" #DISTRIB_RELEASE="3.8.30" #DISTRIB_CODENAME="Opal+" #DISTRIB_DESCRIPTION="Elive beta 3.8.30 (Debian bullseye 11.3)" DISTRIB_DESCRIPTION="Elive beta 3.8.30" ----------/etc/os-release---------- PRETTY_NAME="Elive 32BIT 3.8.30 (beta)" NAME="Elive" VERSION_ID="11" VERSION="3.8.30 (beta)" ID=debian ID_LIKE=debian VERSION_CODENAME="bullseye" ANSI_COLOR="0;36" HOME_URL="https://www.elivecd.org" SUPPORT_URL="https://forum.elivelinux.org" BUG_REPORT_URL="https://bugs.elivecd.org" ----------/etc/elive-version---------- elive-codename: beta elive-version: 3.8.30 debian-version: bullseye date-builded: 2022-07-07 stable-release: no ----------/etc/debian_version---------- 11.1 phpsysinfo-3.4.4/sample/distrotest/EndeavourOS/000077500000000000000000000000001467431054600216155ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/EndeavourOS/21.4.txt000066400000000000000000000014251467431054600227440ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: 1.4 Distributor ID: EndeavourOS Description: EndeavourOS Linux Release: rolling Codename: rolling ----------/etc/arch-release---------- Arch Linux release ----------/etc/lsb-release---------- LSB_VERSION=1.4 DISTRIB_ID=EndeavourOS DISTRIB_RELEASE=rolling DISTRIB_DESCRIPTION="EndeavourOS Linux" DISTRIB_CODENAME=rolling ----------/etc/os-release---------- NAME='EndeavourOS' PRETTY_NAME='EndeavourOS' ID=arch BUILD_ID=rolling ANSI_COLOR="38;2;23;147;209" HOME_URL="https://endeavouros.com" DOCUMENTATION_URL='https://discovery.endeavouros.com' SUPPORT_URL='https://forum.endeavouros.com' BUG_REPORT_URL='https://forum.endeavouros.com/c/arch-based-related-questions/bug-reports' LOGO=endeavouros IMAGE_ID=endeavouros IMAGE_VERSION=2021.11.30 phpsysinfo-3.4.4/sample/distrotest/Endless/000077500000000000000000000000001467431054600210205ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Endless/3.3.16.txt000066400000000000000000000010111467431054600223020ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: Endless Description: Endless 3.3.16 Release: 3.3.16 Codename: endless ----------/etc/lsb-release---------- DISTRIB_ID=Endless DISTRIB_RELEASE=3.3.16 DISTRIB_CODENAME=endless DISTRIB_DESCRIPTION="Endless 3.3.16" ----------/etc/os-release---------- NAME="Endless" VERSION="3.3.16" ID="endless" ID_LIKE="ubuntu debian" PRETTY_NAME="Endless 3.3.16" VERSION_ID="3.3.16" HOME_URL="http://www.endlessm.com/" BUILD_ID="180405-120905" ----------/etc/debian_version---------- 9.0 phpsysinfo-3.4.4/sample/distrotest/EuroLinux/000077500000000000000000000000001467431054600213555ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/EuroLinux/8.4.txt000066400000000000000000000014771467431054600224400ustar00rootroot00000000000000----------lsb_release -a---------- LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: EuroLinux Description: EuroLinux release 8.4 (Vaduz) Release: 8.4 Codename: Vaduz ----------/etc/el-release---------- EuroLinux release 8.4 (Vaduz) ----------/etc/os-release---------- NAME="EuroLinux" VERSION="8.4 (Vaduz)" ID="eurolinux" ID_LIKE="rhel fedora centos" VERSION_ID="8.4" PLATFORM_ID="platform:el8" PRETTY_NAME="EuroLinux 8.4 (Vaduz)" ANSI_COLOR="0;34" CPE_NAME="cpe:/o:eurolinux:eurolinux:8" HOME_URL="https://www.euro-linux.com/" BUG_REPORT_URL="https://github.com/EuroLinux/eurolinux-distro-bugs-and-rfc/" REDHAT_SUPPORT_PRODUCT="EuroLinux" REDHAT_SUPPORT_PRODUCT_VERSION="8" ----------/etc/redhat-release---------- EuroLinux release 8.4 (Vaduz) ----------/etc/system-release---------- EuroLinux release 8.4 (Vaduz) phpsysinfo-3.4.4/sample/distrotest/ExTiX/000077500000000000000000000000001467431054600204245ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/ExTiX/22.12.txt000066400000000000000000000017161467431054600216360ustar00rootroot00000000000000----------lsb_release -a---------- Distributor ID: Deepin Description: ExTiX 22.12 - Deepin 20.8 Release: 20.8 Codename: apricot ----------/etc/lsb-release---------- DISTRIB_ID=Deepin DISTRIB_RELEASE=20.8 DISTRIB_DESCRIPTION="ExTiX Deepin 20.8" DISTRIB_CODENAME=apricot ----------/etc/os-release---------- PRETTY_NAME="ExTiX 22.12 - Deepin 20.8" NAME="Deepin" VERSION_ID="20.8" VERSION="20.8" VERSION_CODENAME="apricot" ID=Deepin HOME_URL="https://www.extix.se/" BUG_REPORT_URL="https://www.extix.se/" ----------/etc/deepin-version---------- [Release] Version=20.8 Type=Desktop Type[zh_CN]=社区版 Edition=Y2020E0001 Copyright=Y2020CR001 [Addition] Milestone= Buildid=build1 ----------/etc/os-version---------- [Version] SystemName=Deepin SystemName[zh_CN]=深度操作系统 ProductType=Desktop ProductType[zh_CN]=桌面 EditionName=Community EditionName[zh_CN]=社区版 MajorVersion=20 MinorVersion=20.8 OsBuild=11038.007 ----------/etc/debian_version---------- 10.10 phpsysinfo-3.4.4/sample/distrotest/Exherbo/000077500000000000000000000000001467431054600210175ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/distrotest/Exherbo/2019.09.08.txt000066400000000000000000000105521467431054600226330ustar00rootroot00000000000000----------/etc/os-release---------- NAME="Exherbo" PRETTY_NAME="Exherbo Linux" ID="exherbo" ANSI_COLOR="0;32" HOME_URL="https://www.exherbo.org/" SUPPORT_URL="irc://irc.freenode.net/#exherbo" BUG_REPORT_URL="https://bugs.exherbo.org/" ----------/etc/exherbo-release---------- a. WQa. _a/ _aw/ 4WQQ, jQQf ]QQQQ. 4WF _, jWQQ[ jQQQQ; .g, _s,. - _QL _QQQQw, ]QQQW dQ( -4QQc . 4QQQQQf ]QQ` vvnv( .nvnvnvnvnv~ .-Ins, 4QQQQ[ 4W .nvnvv,._%nnvnvnvnv= =vvv. QWQW` 4c ~"?' jP` _mQQQQQVXZa J^ _saaawaaass,,__. _aQQQQQD' )ZZo. .u 00:0c:29:10:ca:16 5985 0 822418 5321 0 3729407 0 0 le0 1500 192.168.1.0/2 192.168.1.162 5686 - 724874 5021 - 3646513 - - plip0 1500 0 0 0 0 0 0 0 0 lo0 16384 6722 0 711434 6722 0 711434 0 0 lo0 16384 fe80:3::1/64 fe80:3::1 0 - 0 0 - 0 - - lo0 16384 ::1/128 ::1 44 - 4724 44 - 4724 - - lo0 16384 127.0.0.0/8 127.0.0.1 6678 - 706710 6678 - 706710 - -phpsysinfo-3.4.4/sample/freebsd/netstat2.txt000066400000000000000000000014441467431054600211410ustar00rootroot00000000000000Name Mtu Network Address Ipkts Ierrs Idrop Ibytes Opkts Oerrs Obytes Coll Drop em0 1500 08:00:27:62:0b:0f 6 0 0 2480 11 0 1718 0 0 em0 - 10.0.2.0/24 10.0.2.15 0 - - 0 0 - 0 - - lo0 16384 0 0 0 0 0 0 0 0 0 lo0 - ::1/128 ::1 0 - - 0 0 - 0 - - lo0 - fe80::1%lo0/6 fe80::1%lo0 0 - - 0 0 - 0 - - lo0 - 127.0.0.0/8 127.0.0.1 0 - - 0 0 - 0 - - phpsysinfo-3.4.4/sample/freebsd/netstat3.txt000066400000000000000000000014441467431054600211420ustar00rootroot00000000000000Name Mtu Network Address Ipkts Ierrs Idrop Ibytes Opkts Oerrs Obytes Coll Drop em0 1500 08:00:27:62:0b:0f 6 0 0 2480 11 0 1718 0 0 em0 - 10.0.2.0/24 10.0.2.15 0 - - 0 0 - 0 - - lo0 16384 lo0 0 0 0 0 0 0 0 0 0 lo0 - ::1/128 ::1 0 - - 0 0 - 0 - - lo0 - fe80::1%lo0/6 fe80::1%lo0 0 - - 0 0 - 0 - - lo0 - 127.0.0.0/8 127.0.0.1 0 - - 0 0 - 0 - - phpsysinfo-3.4.4/sample/logs/000077500000000000000000000000001467431054600161635ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/logs/android21.log000066400000000000000000000303521467431054600204540ustar00rootroot00000000000000---Sat, 11 May 2013 09:44:40 +0000 GMT--- Reading: /system/build.prop ##### Merging of the /util/data/semc_kernel_time_stamp.prop file ##### ro.build.date=Fri Dec 17 18:35:45 2010 ro.build.date.utc=1292582145 ro.build.user=SEMCUser ro.build.host=SEMCHost ##### Final patch of properties ##### ro.build.product=E15i ro.build.description=E15i-user 2.1-update1 2.1.1.A.0.16 238 test-keys ro.product.brand=SEMC ro.product.name=E15i_1252-3596 ro.product.device=E15i ro.product.board=delta ro.build.version.incremental=73_d ro.build.tags=release-keys ro.build.fingerprint=SEMC/E15i_1252-3596/E15i/delta:2.1-update1/2.1.1.A.0.16/73_d:user/release-keys ######################## Customized property values ######################### ro.semc.version.cust=1252-3596 ro.semc.version.cust_revision=R4B ro.semc.enable.fast_dormancy=true ro.config.ringtone=t-mobile_ringtone.ogg ro.config.notification_sound=t-mobile_message.ogg ro.camera.sound.forced=1 ro.voicemail.dialing-number=+48602950000 ######################################################################### #ro.config.ringtone=sony_ericsson.ogg #ro.config.notification_sound=notification.ogg ro.semc.content.number=PA4 ################# Updating of the SW Version ################# ro.semc.version.fs_revision=2.1.1.A.0.16 ro.build.id=2.1.1.A.0.16 ro.build.display.id=2.1.1.A.0.16 ##### Values from product package metadata ##### ro.product.model=E15i ro.semc.ms_type_id=AAD-3880091-BV ro.semc.version.fs=ORANGE-1-8 ro.semc.product.name=Xperia X8 ro.semc.product.device=E15 # begin build properties # autogenerated by buildinfo.sh #ro.build.id=2.1.1.A.0.16 #ro.build.display.id=2.1.1.A.0.16 #ro.build.version.incremental=238 ro.build.version.sdk=7 ro.build.version.codename=REL ro.build.version.release=2.1-update1 #ro.build.date=Sun Jan 30 20:24:08 CST 2011 #ro.build.date.utc=1296390248 ro.build.type=user #ro.build.user=hudsonslave #ro.build.host=cnbjlx3512 #ro.build.tags=test-keys #ro.product.model=shakira #ro.product.brand=Sony-Ericsson #ro.product.name=shakira #ro.product.device=shakira #ro.product.board=delta ro.product.cpu.abi=armeabi ro.product.manufacturer=Sony Ericsson ro.product.locale.language=en ro.product.locale.region=GB ro.wifi.channels= ro.board.platform=msm7k # ro.build.product is obsolete; use ro.product.device #ro.build.product=shakira # Do not try to parse ro.build.description or .fingerprint #ro.build.description=shakira-user 2.1-update1 2.1.1.A.0.16 238 test-keys #ro.build.fingerprint=Sony-Ericsson/shakira/shakira/delta:2.1-update1/2.1.1.A.0.16/238:user/test-keys # end build properties # # system.prop for shakira # rild.libpath=/system/lib/libril-qc-1.so rild.libargs=-d /dev/smd0 wifi.interface = wlan0 ro.sf.lcd_density=160 ro.semc.def_screen_orientation=sensor ro.semc.timescape_keys=X8_key ro.semc.timescape_model=1_handed ro.semc.sound_effects_enabled=false ro.workaround.noautofocus=1 persist.rild.nitz_plmn= persist.rild.nitz_long_ons_0= persist.rild.nitz_long_ons_1= persist.rild.nitz_long_ons_2= persist.rild.nitz_long_ons_3= persist.rild.nitz_short_ons_0= persist.rild.nitz_short_ons_1= persist.rild.nitz_short_ons_2= persist.rild.nitz_short_ons_3= persist.ro.ril.sms_sync_sending=1 DEVICE_PROVISIONED=1 # Constant values for Battery test in Service menu. ro.semc.batt.capacity=950 ro.semc.batt.test.consumption=150 ro.semc.batt.test.z_threshold=30 dalvik.vm.heapsize=24m kernel.log=default ro.telephony.call_ring.multiple=false debug.sf.hw=1 keyguard.no_require_sim=true # # ADDITIONAL_BUILD_PROPERTIES # #ro.config.notification_sound=OnTheHunt.ogg ro.config.alarm_alert=Alarm_Classic.ogg ro.setupwizard.mode=DISABLED ro.com.google.gmsversion=2.1_r11 ro.com.google.clientidbase=android-sonyericsson net.bt.name=Android ro.config.sync=yes dalvik.vm.stack-trace-file=/data/anr/traces.txt ro.drm.active.num=4 ro.drm.active.0=semc,1 ro.drm.active.1=cmla,0 ro.drm.active.2=viaccess,0 ro.drm.active.3=marlin,1 ---Sat, 11 May 2013 09:44:40 +0000 GMT--- Reading: /proc/sys/kernel/hostname localhost ---Sat, 11 May 2013 09:44:40 +0000 GMT--- Reading: /proc/version Linux version 2.6.29 (SEMCUser@SEMCHost) (gcc version 4.4.0 (GCC) ) #1 PREEMPT Fri Dec 17 18:35:45 2010 ---Sat, 11 May 2013 09:44:40 +0000 GMT--- Reading: /proc/uptime 2003.04 0.00 ---Sat, 11 May 2013 09:44:40 +0000 GMT--- Reading: /proc/cpuinfo Processor : ARMv6-compatible processor rev 5 (v6l) BogoMIPS : 599.65 Features : swp half thumb fastmult vfp edsp java CPU implementer : 0x41 CPU architecture: 6TEJ CPU variant : 0x1 CPU part : 0xb36 CPU revision : 5 Hardware : SEMC Delta Revision : 0000 Serial : 0000000000000000 ---Sat, 11 May 2013 09:44:40 +0000 GMT--- Reading: /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 600000 ---Sat, 11 May 2013 09:44:40 +0000 GMT--- Reading: /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 600000 ---Sat, 11 May 2013 09:44:40 +0000 GMT--- Reading: /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq 245760 ---Sat, 11 May 2013 09:44:40 +0000 GMT--- Reading: /proc/stat cpu 86055 8531 23906 69411 12010 7 103 0 0 cpu0 86055 8531 23906 69411 12010 7 103 0 0 intr 8171919 11514 0 0 0 0 0 0 14363 501285 0 0 4 0 0 0 0 57488 0 0 18127 18154 406183 0 0 6436007 1 175242 142506 0 0 0 0 0 0 176802 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39658 0 0 0 0 0 0 0 0 26 14 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 167624 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6856 0 0 0 0 0 0 0 0 60 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ctxt 15100441 btime 1368263477 processes 3738 procs_running 1 procs_blocked 1 ---Sat, 11 May 2013 09:44:41 +0000 GMT--- Reading: /proc/stat cpu 86101 8531 23914 69419 12048 7 103 0 0 cpu0 86101 8531 23914 69419 12048 7 103 0 0 intr 8172501 11517 0 0 0 0 0 0 14368 501580 0 0 4 0 0 0 0 57530 0 0 18141 18168 406207 0 0 6436007 1 175247 142510 0 0 0 0 0 0 176889 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39660 0 0 0 0 0 0 0 0 26 14 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 167708 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6859 0 0 0 0 0 0 0 0 60 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ctxt 15101320 btime 1368263477 processes 3738 procs_running 1 procs_blocked 0 ---Sat, 11 May 2013 09:44:41 +0000 GMT--- Reading: /proc/net/dev Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo: 2089060 2577 0 0 0 0 0 0 2089060 2577 0 0 0 0 0 0 dummy0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet2: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 usb0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 sit0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 wlan0:27900154 20327 0 0 0 0 0 0 817017 9503 0 0 0 0 0 0 ---Sat, 11 May 2013 09:44:41 +0000 GMT--- Executing: ifconfig lo 2>/dev/null lo: ip 127.0.0.1 mask 255.0.0.0 flags [up loopback running] ---Sat, 11 May 2013 09:44:41 +0000 GMT--- Executing: ifconfig dummy0 2>/dev/null ---Sat, 11 May 2013 09:44:41 +0000 GMT--- Executing: ifconfig rmnet0 2>/dev/null ---Sat, 11 May 2013 09:44:41 +0000 GMT--- Executing: ifconfig rmnet1 2>/dev/null ---Sat, 11 May 2013 09:44:41 +0000 GMT--- Executing: ifconfig rmnet2 2>/dev/null ---Sat, 11 May 2013 09:44:41 +0000 GMT--- Executing: ifconfig usb0 2>/dev/null ---Sat, 11 May 2013 09:44:41 +0000 GMT--- Executing: ifconfig sit0 2>/dev/null ---Sat, 11 May 2013 09:44:42 +0000 GMT--- Executing: ifconfig wlan0 2>/dev/null wlan0: ip 192.168.1.2 mask 255.255.255.0 flags [up broadcast running multicast] ---Sat, 11 May 2013 09:44:42 +0000 GMT--- Reading: /proc/meminfo MemTotal: 179788 kB MemFree: 2664 kB Buffers: 148 kB Cached: 26572 kB SwapCached: 0 kB Active: 75404 kB Inactive: 78812 kB Active(anon): 62080 kB Inactive(anon): 66112 kB Active(file): 13324 kB Inactive(file): 12700 kB Unevictable: 284 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 32 kB Writeback: 0 kB AnonPages: 127780 kB Mapped: 24760 kB Slab: 6744 kB SReclaimable: 1768 kB SUnreclaim: 4976 kB PageTables: 7272 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 89892 kB Committed_AS: 2647024 kB VmallocTotal: 696320 kB VmallocUsed: 53040 kB VmallocChunk: 602116 kB ---Sat, 11 May 2013 09:44:42 +0000 GMT--- Executing: df 2>/dev/null /dev: 89892K total, 12K used, 89880K available (block size 4096) /sqlite_stmt_journals: 4096K total, 8K used, 4088K available (block size 4096) /system: 210944K total, 190756K used, 20188K available (block size 4096) /data: 216832K total, 117836K used, 98996K available (block size 4096) /cache: 51200K total, 15756K used, 35444K available (block size 4096) /sdcard: 992860K total, 967764K used, 25096K available (block size 4096) ---Sat, 11 May 2013 09:44:42 +0000 GMT--- Executing: mount rootfs / rootfs ro 0 0 tmpfs /dev tmpfs rw,mode=755 0 0 devpts /dev/pts devpts rw,mode=600 0 0 proc /proc proc rw 0 0 sysfs /sys sysfs rw 0 0 tmpfs /sqlite_stmt_journals tmpfs rw,size=4096k 0 0 /dev/block/mtdblock0 /system yaffs2 ro 0 0 /dev/block/mtdblock2 /data yaffs2 rw,nosuid,nodev 0 0 /dev/block/mtdblock1 /cache yaffs2 rw,nosuid,nodev 0 0 DxDrmServerIpc /data/DxDrm/fuse fuse.DxDrmServerIpc rw,nosuid,nodev,user_id=0,group_id=0,allow_other 0 0 /dev/block//vold/179:0 /sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0 ---Sat, 11 May 2013 09:44:42 +0000 GMT--- Reading: /proc/loadavg 9.64 10.21 9.25 1/368 3761 ---Sat, 11 May 2013 09:44:42 +0000 GMT--- Reading: /proc/stat cpu 86106 8531 23923 69419 12048 7 103 0 0 cpu0 86106 8531 23923 69419 12048 7 103 0 0 intr 8172553 11517 0 0 0 0 0 0 14368 501597 0 0 4 0 0 0 0 57530 0 0 18141 18168 406228 0 0 6436010 1 175247 142510 0 0 0 0 0 0 176889 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39660 0 0 0 0 0 0 0 0 26 14 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 167719 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6859 0 0 0 0 0 0 0 0 60 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ctxt 15101414 btime 1368263477 processes 3758 procs_running 1 procs_blocked 0 ---Sat, 11 May 2013 09:44:43 +0000 GMT--- Reading: /proc/stat cpu 86108 8531 23924 69516 12048 7 103 0 0 cpu0 86108 8531 23924 69516 12048 7 103 0 0 intr 8172829 11517 0 0 0 0 0 0 14386 501712 0 0 4 0 0 0 0 57534 0 0 18142 18169 406228 0 0 6436010 1 175250 142513 0 0 0 0 0 0 176934 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39661 0 0 0 0 0 0 0 0 26 14 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 167804 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6859 0 0 0 0 0 0 0 0 60 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ctxt 15101638 btime 1368263477 processes 3758 procs_running 1 procs_blocked 0 phpsysinfo-3.4.4/sample/logs/android412.log000066400000000000000000000471341467431054600205460ustar00rootroot00000000000000---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /system/build.prop # begin build properties # autogenerated by buildinfo.sh ro.build.id=JZO54K ro.build.display.id=Jelly Blur 4.1.2 JZ054K eng.tiestobunio.20130507.120822 shakira test-keys ro.build.version.incremental=eng.tiestobunio.20130507.120822 ro.build.version.sdk=16 ro.build.version.codename=REL ro.build.version.release=4.1.2 ro.build.date=Tue May 7 12:08:22 EURO 2013 ro.build.date.utc=12082214 ro.build.type=user ro.build.user=tiestobunio ro.build.host=toshiba ro.build.tags=test-keys ro.product.model=E15i ro.product.brand=SEMC ro.product.name=LT30p_1269-0608 ro.product.device=shakira ro.product.board=shakira ro.product.cpu.abi=armeabi-v6l ro.product.cpu.abi2=armeabi ro.product.manufacturer=Sony Ericsson ro.wifi.channels= ro.board.platform=msm7x27 # ro.build.product is obsolete; use ro.product.device ro.build.product=shakira # Do not try to parse ro.build.description or .fingerprint ro.build.description=LT30p-user 4.0.4 7.0.A.3.195 PPP_xw test-keys ro.build.fingerprint=Sony/LT30p_1269-0608/LT30p:4.0.4/7.0.A.3.195/PPP_xw:user/release-keys ro.build.characteristics=default ro.cm.device=shakira # end build properties # # ADDITIONAL_BUILD_PROPERTIES # ro.sf.lcd_density=160 keyguard.no_require_sim=true ro.url.legal=http://www.google.com/intl/%s/mobile/android/basic/phone-legal.html ro.url.legal.android_privacy=http://www.google.com/intl/%s/mobile/android/basic/privacy.html ro.com.google.clientidbase=android-google ro.com.android.wifi-watchlist=GoogleGuest ro.setupwizard.enterprise_mode=1 ro.com.android.dateformat=MM-dd-yyyy ro.com.android.dataroaming=false ro.cm.version=Jelly Blur CM10 V4.5 ro.modversion=Jelly Blur CM10 ro.min.kernel.version=2.6.32.60-nAa ro.min.kernel.revision=05 persist.sys.themeId=sytem persist.sys.themePackageName=com.system.theme.jellybean ro.media.dec.jpeg.memcap=10000000 rild.libpath=/system/lib/libril-qc-1.so rild.libargs=-d/dev/smd0 ro.ril.hep=1 ro.ril.hsdpa.category=10 ro.ril.enable.dtm=1 ro.ril.enable.3g.prefix=1 ro.ril.hsxpa=2 ro.ril.gprsclass=10 ro.ril.hsupa.category=6 ro.ril.disable.power.collapse=1 ro.telephony.ril_class=SemcRIL wifi.interface=wlan0 wifi.softap.interface=wlan0 wifi.softapconcurrent.interface=wlan0 wifi.supplicant_scan_interval=45 ro.ril.def.agps.mode=2 ro.ril.def.agps.feature=1 persist.sys.use_16bpp_alpha=1 persist.sys.use_dithering=0 persist.sys.force_hw_ui=true ro.telephony.default_network=0 ro.telephony.call_ring.delay=1000 ro.telephony.call_ring.multiple=false ro.com.google.locationfeatures=1 ro.com.google.networklocation=1 ro.ril.enable.a52=1 ro.ril.enable.a53=1 ro.telephony.ril.v3=icccardstatus,skipbrokendatacall,signalstrength,datacall ro.telephony.ril_skip_locked=true ro.media.enc.file.format=3gp,mp4 ro.media.enc.vid.codec=m4v,h263 ro.media.enc.vid.h263.width=176,640 ro.media.enc.vid.h263.height=144,480 ro.media.enc.vid.h263.bps=64000,1600000 ro.media.enc.vid.h263.fps=1,30 ro.media.enc.vid.m4v.width=176,640 ro.media.enc.vid.m4v.height=144,480 ro.media.enc.vid.m4v.bps=64000,1600000 ro.media.enc.vid.m4v.fps=1,30 ro.media.dec.aud.wma.enabled=1 ro.media.dec.vid.wmv.enabled=1 settings.display.autobacklight=1 media.stagefright.enable-player=true media.stagefright.enable-meta=true media.stagefright.enable-scan=true media.stagefright.enable-http=true windowsmgr.max_events_per_sec=200 debug.camcorder.disablemeta=1 dalvik.vm.dexopt-flags=v=a,o=v,m=y,u=y dalvik.vm.checkjni=0 dalvik.vm.dexopt-data-only=1 dalvik.vm.lockprof.threshold=500 dalvik.vm.execution-mode=int:jit dalvik.vm.verify_bytecode=false dalvik.vm.heapsize=32m debug.sf.hw=1 debug.composition.type=mdp debug.gr.numframebuffers=1 ro.max.fling_velocity=4000 debug.qctwa.statusbar=1 debug.qctwa.preservebuf=1 hwui.render_dirty_regions=false hwui.disable_vsync=true debug.mdpcomp.logs=0 debug.sf.no_hw_vsync=1 hwui.print_config=choice debug.enabletr=false debug.hwui.render_dirty_regions=false debug.hwui.disable_vsync=true com.qc.hardware=true persist.service.zram=1 ro.zram.default=18 persist.sys.usb.config=mtp,adb persist.service.adb.enable=1 ro.opengles.version=131072 ro.product.locale.language=en ro.product.locale.region=US ro.service.swiqi.supported=true persist.service.swiqi.enable=1 persist.ro.ril.sms_sync_sending=1 persist.android.strictmode=0 debug.performance.tuning=1 video.accelerate.hw=1 pm.sleep_mode=1 persist.pmem.camera=4000000 ro.config.ringtone=CyanTone.ogg ro.config.notification_sound=CyanMessage.ogg ro.config.alarm_alert=CyanAlarm.ogg net.bt.name=Android dalvik.vm.stack-trace-file=/data/anr/traces.txt # Fast Reboot persist.sys.purgeable_assets=1 # Render UI With GPU debug.sf.hw=1 #Perfomance Engine persist.rild.nitz_plmn= persist.rild.nitz_long_ons_0= persist.rild.nitz_long_ons_1= persist.rild.nitz_long_ons_2= persist.rild.nitz_long_ons_3= persist.rild.nitz_short_ons_0= persist.rild.nitz_short_ons_1= persist.rild.nitz_short_ons_2= persist.rild.nitz_short_ons_3= #Disable blur debug.hwui.render_dirty_regions=false # Force use of GPU on 2D rendering # persist.sys.force_hw_ui=true # Proximity Tweaks ro.lge.proximity.delay=25 mot.proximity.delay=25 # Fast Reboot persist.sys.shutdown.mode=hibernate ro.config.hw_quickpoweron=true #Disable blur debug.hwui.render_dirty_regions=false # Force use of GPU on 2D rendering # persist.sys.force_hw_ui=true # Proximity Tweaks ro.lge.proximity.delay=25 mot.proximity.delay=25 # Frees More RAM persist.sys.purgeable_assets=1 ro.HOME_APP_ADJ=1 ro.mot.eri.losalert.delay=1000 ro.config.hw_fast_dormancy=1 ro.ril.enable.amr.wideband=1 ro.config.hw_fast_dormancy=1 ro.config.hw_quickpoweron=true #Media quality improvements media.stagefright.enable-player=true media.stagefright.enable-meta=true media.stagefright.enable-scan=true media.stagefright.enable-http=true media.stagefright.enable-record=true ro.media.enc.jpeg.quality=100 ro.media.dec.jpeg.memcap=8000000 ro.media.enc.hprof.vid.bps=8000000 ro.media.enc.hprof.vid.fps=75 video.accelerate.hw=1 #Other Performance Tweaks ENFORCE_PROCESS_LIMIT=false persist.android.strictmode=0 persist.service.lgospd.enable=0 persist.service.pcsync.enable=0 ro.min_pointer_dur=1 ro.telephony.call_ring.delay=0 ro.sec.proximity.delay=0 ro.HOME_APP_ADJ=1 debug.composition.type=gpu persist.sys.NV_FPSLIMIT=60 dev.pm.dyn_samplingrate=1---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /proc/sys/kernel/hostname localhost ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /proc/version Linux version 2.6.32.60-nAa-05 (nobodyAtall@palikari) (gcc version 4.7.3 20121106 (prerelease) (Linaro GCC 4.7-2012.11) ) #1096 PREEMPT Sat Mar 16 20:04:00 EET 2013 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /proc/uptime 1727.18 325.01 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /proc/cpuinfo Processor : ARMv6-compatible processor rev 5 (v6l) BogoMIPS : 599.65 Features : swp half thumb fastmult vfp edsp java CPU implementer : 0x41 CPU architecture: 6TEJ CPU variant : 0x1 CPU part : 0xb36 CPU revision : 5 Hardware : SEMC Delta Revision : 0000 Serial : 0000000000000000 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 604800 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq 864000 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq 122880 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/present 1 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/uevent POWER_SUPPLY_NAME=battery POWER_SUPPLY_TYPE=Battery POWER_SUPPLY_STATUS=Charging POWER_SUPPLY_PRESENT=1 POWER_SUPPLY_HEALTH=Good POWER_SUPPLY_TECHNOLOGY=Li-poly POWER_SUPPLY_CAPACITY=100 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/capacity 100 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/batt_temp 330 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/batt_vol 4181 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/technology Li-poly ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/status Charging ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/health Good ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /proc/stat cpu 67446 9149 43018 32501 20250 9 64 0 0 cpu0 67446 9149 43018 32501 20250 9 64 0 0 intr 9106653 10362 0 0 0 0 0 0 0 422747 0 0 11 0 0 0 0 37498 0 0 22911 33276 743963 0 9145 7167599 0 187062 0 0 0 0 0 0 0 431029 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18635 0 0 0 0 0 0 0 0 33 26 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13079 0 0 0 0 9266 0 0 0 0 0 0 0 0 5 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ctxt 18521396 btime 1368381847 processes 5477 procs_running 4 procs_blocked 3 softirq 271689 0 130976 444 2408 0 0 46075 0 1139 90647 ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Reading: /proc/stat cpu 67450 9149 43024 32501 20340 9 64 0 0 cpu0 67450 9149 43024 32501 20340 9 64 0 0 intr 9116370 10380 0 0 0 0 0 0 0 422818 0 0 11 0 0 0 0 37498 0 0 22911 33276 744057 0 9145 7176941 0 187062 0 0 0 0 0 0 0 431213 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18635 0 0 0 0 0 0 0 0 33 26 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13087 0 0 0 0 9266 0 0 0 0 0 0 0 0 5 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ctxt 18540445 btime 1368381847 processes 5477 procs_running 1 procs_blocked 1 softirq 271729 0 131004 444 2408 0 0 46078 0 1140 90655 ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Reading: /proc/net/dev Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo: 4906465 3467 0 0 0 0 0 0 4906465 3467 0 0 0 0 0 0 dummy0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet2: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet3: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet4: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet5: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet6: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet7: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 sit0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ip6tnl0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 wlan0:23784505 16344 0 0 0 0 0 0 481451 5463 0 0 0 0 0 0 ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Executing: ifconfig lo 2>/dev/null lo: ip 127.0.0.1 mask 255.0.0.0 flags [up loopback running] ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Executing: ifconfig dummy0 2>/dev/null ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Executing: ifconfig rmnet0 2>/dev/null ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Executing: ifconfig rmnet1 2>/dev/null ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Executing: ifconfig rmnet2 2>/dev/null ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Executing: ifconfig rmnet3 2>/dev/null ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Executing: ifconfig rmnet4 2>/dev/null ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Executing: ifconfig rmnet5 2>/dev/null ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Executing: ifconfig rmnet6 2>/dev/null ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Executing: ifconfig rmnet7 2>/dev/null ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Executing: ifconfig sit0 2>/dev/null ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Executing: ifconfig ip6tnl0 2>/dev/null ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Executing: ifconfig wlan0 2>/dev/null wlan0: ip 192.168.1.3 mask 255.255.255.0 flags [up broadcast running multicast] ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Reading: /proc/meminfo MemTotal: 190820 kB MemFree: 13680 kB Buffers: 160 kB Cached: 28056 kB SwapCached: 8788 kB Active: 68900 kB Inactive: 68544 kB Active(anon): 54804 kB Inactive(anon): 55032 kB Active(file): 14096 kB Inactive(file): 13512 kB Unevictable: 544 kB Mlocked: 0 kB SwapTotal: 34340 kB SwapFree: 808 kB Dirty: 60 kB Writeback: 0 kB AnonPages: 101708 kB Mapped: 20516 kB Shmem: 64 kB Slab: 11880 kB SReclaimable: 2900 kB SUnreclaim: 8980 kB KernelStack: 3816 kB PageTables: 3764 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 129748 kB Committed_AS: 1438480 kB VmallocTotal: 565248 kB VmallocUsed: 34984 kB VmallocChunk: 472740 kB ---Sun, 12 May 2013 18:32:55 +0000 GMT--- Reading: /proc/swaps Filename Type Size Used Priority /dev/block/zram0 partition 34340 33532 -1 ---Sun, 12 May 2013 18:32:56 +0000 GMT--- Executing: df 2>/dev/null Filesystem Size Used Free Blksize /cache 5M 996K 4M 4096 /dev 93.2M 84K 93.1M 4096 /mnt/asec 93.2M 0K 93.2M 4096 /mnt/obb 93.2M 0K 93.2M 4096 /system 261M 211M 50M 4096 /data 191.8M 141.9M 49.9M 4096 /storage/sdcard0 969.6M 669.3M 300.3M 4096 /mnt/asec/com.ghisler.tcplugins.WebDAV-1 2M 588K 1.4M 4096 /mnt/asec/org.connectbot-1 2M 764K 1.3M 4096 /mnt/asec/jackpal.androidterm-1 2M 456K 1.6M 4096 /mnt/asec/com.opera.browser-1 26M 24.7M 1.3M 4096 /mnt/asec/com.ghisler.tcplugins.LAN-1 2M 352K 1.7M 4096 /mnt/asec/com.ghisler.tcplugins.FTP-1 2M 408K 1.6M 4096 /mnt/asec/com.ghisler.android.TotalCommander-1 3M 1.2M 1.8M 4096 /mnt/asec/ru.zdevs.zarchiver-1 6M 4.3M 1.7M 4096 /mnt/asec/pl.redefine.ipla-2 14M 12.3M 1.7M 4096 /mnt/asec/mobi.infolife.appbackup-1 2M 428K 1.6M 4096 /mnt/asec/com.skype.raider-1 18M 16.7M 1.3M 4096 /mnt/asec/pl.vod-1 2M 472K 1.5M 4096 /mnt/asec/org.mozilla.firefox-1 23M 21.3M 1.7M 4096 ---Sun, 12 May 2013 18:32:56 +0000 GMT--- Executing: mount rootfs / rootfs rw,nodiratime,relatime 0 0 /dev/block/mtdblock1 /cache yaffs2 rw,nosuid,nodev,nodiratime,relatime 0 0 tmpfs /dev tmpfs rw,nosuid,noatime,mode=755 0 0 devpts /dev/pts devpts rw,noatime,mode=600 0 0 proc /proc proc rw,noatime 0 0 sysfs /sys sysfs rw,noatime 0 0 tmpfs /mnt/asec tmpfs rw,noatime,mode=755,gid=1000 0 0 tmpfs /mnt/obb tmpfs rw,noatime,mode=755,gid=1000 0 0 /dev/block/mtdblock0 /system yaffs2 ro,relatime 0 0 /dev/block/mtdblock2 /data yaffs2 rw,nosuid,nodev,nodiratime,relatime 0 0 /dev/block/vold/179:0 /storage/sdcard0 vfat rw,dirsync,nosuid,nodev,noexec,noatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0 /dev/block/vold/179:0 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,noatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0 tmpfs /storage/sdcard0/.android_secure tmpfs ro,noatime,size=0k,mode=000 0 0 /dev/block/dm-0 /mnt/asec/com.ghisler.tcplugins.WebDAV-1 ext4 ro,dirsync,nosuid,nodev,relatime,barrier=1,data=writeback 0 0 /dev/block/dm-1 /mnt/asec/org.connectbot-1 ext4 ro,dirsync,nosuid,nodev,relatime,barrier=1,data=writeback 0 0 /dev/block/dm-2 /mnt/asec/jackpal.androidterm-1 ext4 ro,dirsync,nosuid,nodev,relatime,barrier=1,data=writeback 0 0 /dev/block/dm-3 /mnt/asec/com.opera.browser-1 ext4 ro,dirsync,nosuid,nodev,relatime,barrier=1,data=writeback 0 0 /dev/block/dm-4 /mnt/asec/com.ghisler.tcplugins.LAN-1 ext4 ro,dirsync,nosuid,nodev,relatime,barrier=1,data=writeback 0 0 /dev/block/dm-5 /mnt/asec/com.ghisler.tcplugins.FTP-1 ext4 ro,dirsync,nosuid,nodev,relatime,barrier=1,data=writeback 0 0 /dev/block/dm-6 /mnt/asec/com.ghisler.android.TotalCommander-1 ext4 ro,dirsync,nosuid,nodev,relatime,barrier=1,data=writeback 0 0 /dev/block/dm-7 /mnt/asec/ru.zdevs.zarchiver-1 ext4 ro,dirsync,nosuid,nodev,relatime,barrier=1,data=writeback 0 0 /dev/block/dm-8 /mnt/asec/pl.redefine.ipla-2 ext4 ro,dirsync,nosuid,nodev,relatime,barrier=1,data=writeback 0 0 /dev/block/dm-9 /mnt/asec/mobi.infolife.appbackup-1 ext4 ro,dirsync,nosuid,nodev,relatime,barrier=1,data=writeback 0 0 /dev/block/dm-10 /mnt/asec/com.skype.raider-1 ext4 ro,dirsync,nosuid,nodev,relatime,barrier=1,data=writeback 0 0 /dev/block/dm-11 /mnt/asec/pl.vod-1 ext4 ro,dirsync,nosuid,nodev,relatime,barrier=1,data=writeback 0 0 /dev/block/dm-12 /mnt/asec/org.mozilla.firefox-1 ext4 ro,dirsync,nosuid,nodev,relatime,barrier=1,data=writeback 0 0 ---Sun, 12 May 2013 18:32:56 +0000 GMT--- Reading: /proc/loadavg 11.23 11.98 10.79 1/475 5508 ---Sun, 12 May 2013 18:32:56 +0000 GMT--- Reading: /proc/stat cpu 67462 9149 43044 32501 20340 9 64 0 0 cpu0 67462 9149 43044 32501 20340 9 64 0 0 intr 9116804 10380 0 0 0 0 0 0 0 422857 0 0 11 0 0 0 0 37498 0 0 22911 33276 744135 0 9145 7177210 0 187062 0 0 0 0 0 0 0 431259 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18635 0 0 0 0 0 0 0 0 33 26 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13089 0 0 0 0 9266 0 0 0 0 0 0 0 0 5 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ctxt 18541338 btime 1368381847 processes 5507 procs_running 1 procs_blocked 1 softirq 271870 0 131036 444 2408 0 0 46083 0 1140 90759 ---Sun, 12 May 2013 18:32:57 +0000 GMT--- Reading: /proc/stat cpu 67462 9149 43054 32528 20404 9 64 0 0 cpu0 67462 9149 43054 32528 20404 9 64 0 0 intr 9126517 10380 0 0 0 0 0 0 0 422931 0 0 11 0 0 0 0 37498 0 0 22911 33276 744138 0 9145 7186654 0 187062 0 0 0 0 0 0 0 431443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18635 0 0 0 0 0 0 0 0 33 26 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13097 0 0 0 0 9266 0 0 0 0 0 0 0 0 5 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ctxt 18560395 btime 1368381847 processes 5507 procs_running 1 procs_blocked 0 softirq 271904 0 131064 444 2408 0 0 46086 0 1140 90762 phpsysinfo-3.4.4/sample/logs/bluestacks.log000066400000000000000000000241701467431054600210320ustar00rootroot00000000000000---Mon, 29 Apr 2013 07:33:51 +0000 GMT--- Reading: /system/build.prop # begin build properties # autogenerated by buildinfo.sh ro.build.id=GRJ22 ro.build.display.id=generic_x86-eng 2.3.4 GRJ22 eng.build.20121017.125534 test-keys ro.build.version.incremental=eng.build.20121017.125534 ro.build.version.sdk=10 ro.build.version.codename=REL ro.build.version.release=2.3.4 ro.build.date=Wed Oct 17 14:18:50 IST 2012 ro.build.date.utc=1350463730 ro.build.type=eng ro.build.user=build ro.build.host=BuildServer ro.build.tags=test-keys ro.product.model=BlueStacks ro.product.brand=BlueStacks ro.product.name=BlueStacks ro.product.device=Virtual ro.product.board= ro.product.cpu.abi=armeabi-v7a ro.product.cpu.abi2=armeabi ro.product.manufacturer=BlueStacks ro.product.locale.language=en ro.product.locale.region=US ro.wifi.channels= ro.board.platform= # ro.build.product is obsolete; use ro.product.device ro.build.product=Virtual # Do not try to parse ro.build.description or .fingerprint ro.build.description=generic_x86-eng 2.3.4 GRJ22 eng.build.20121017.125534 test-keys ro.build.fingerprint=generic_x86/generic_x86/generic_x86:2.3.4/GRJ22/eng.build.20121017.125534:eng/test-keys # end build properties # # ADDITIONAL_BUILD_PROPERTIES # ro.config.notification_sound=OnTheHunt.ogg ro.config.alarm_alert=Alarm_Classic.ogg ro.com.android.dataroaming=true ro.kernel.android.checkjni=1 ro.setupwizard.mode=OPTIONAL net.bt.name=Android dalvik.vm.stack-trace-file=/data/anr/traces.txt ---Mon, 29 Apr 2013 07:33:51 +0000 GMT--- Reading: /proc/sys/kernel/hostname localhost ---Mon, 29 Apr 2013 07:33:51 +0000 GMT--- Reading: /proc/version Linux version 2.6.38-android-x86+ (build@BuildServer) (gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) ) #1 PREEMPT Thu Oct 25 09:38:01 IST 2012 ---Mon, 29 Apr 2013 07:33:51 +0000 GMT--- Reading: /proc/uptime 59.49 39.40 ---Mon, 29 Apr 2013 07:33:51 +0000 GMT--- Reading: /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 58 model name : Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz stepping : 9 cpu MHz : 2594.000 cache size : 3072 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 x2apic popcnt aes avx f16c rdrnd lahf_lm ida arat epb pln pts dts tpr_shadow vnmi flexpriority ept vpid bogomips : 33449.57 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: ---Mon, 29 Apr 2013 07:33:51 +0000 GMT--- Reading: /proc/stat cpu 1240 219 360 3940 188 0 2 0 0 0 cpu0 1240 219 360 3940 188 0 2 0 0 0 intr 23405 5949 0 156 9791 26 627 0 3513 0 10 0 3329 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ctxt 91556 btime 1367220772 processes 1274 procs_running 5 procs_blocked 1 softirq 19636 0 5734 0 1838 0 0 89 0 0 11975 ---Mon, 29 Apr 2013 07:33:52 +0000 GMT--- Reading: /proc/stat cpu 1318 219 364 3959 188 0 2 0 0 0 cpu0 1318 219 364 3959 188 0 2 0 0 0 intr 23660 6050 0 156 9827 26 627 0 3514 0 10 0 3446 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ctxt 92554 btime 1367220772 processes 1276 procs_running 2 procs_blocked 0 softirq 19850 0 5831 0 1839 0 0 89 0 0 12091 ---Mon, 29 Apr 2013 07:33:52 +0000 GMT--- Reading: /proc/net/dev Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo: 642215 258 0 0 0 0 0 0 642215 258 0 0 0 0 0 0 eth0: 4201926 3512 0 0 0 0 0 0 1127382 2464 0 0 0 0 0 0 ---Mon, 29 Apr 2013 07:33:52 +0000 GMT--- Executing: ifconfig lo 2>/dev/null lo: ip 127.0.0.1 mask 255.0.0.0 flags [up loopback running] ---Mon, 29 Apr 2013 07:33:52 +0000 GMT--- Executing: ifconfig eth0 2>/dev/null eth0: ip 10.0.2.15 mask 255.255.255.0 flags [up broadcast running multicast] ---Mon, 29 Apr 2013 07:33:52 +0000 GMT--- Reading: /proc/meminfo MemTotal: 758548 kB MemFree: 112792 kB Buffers: 55744 kB Cached: 332496 kB SwapCached: 0 kB Active: 288288 kB Inactive: 330996 kB Active(anon): 235068 kB Inactive(anon): 32692 kB Active(file): 53220 kB Inactive(file): 298304 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 3564 kB Writeback: 0 kB AnonPages: 231016 kB Mapped: 83540 kB Shmem: 36744 kB Slab: 12632 kB SReclaimable: 7296 kB SUnreclaim: 5336 kB KernelStack: 3232 kB PageTables: 4624 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 379272 kB Committed_AS: 2100224 kB VmallocTotal: 237564 kB VmallocUsed: 28128 kB VmallocChunk: 178684 kB DirectMap4k: 0 kB DirectMap4M: 0 kB ---Mon, 29 Apr 2013 07:33:52 +0000 GMT--- Executing: df 2>/dev/null Filesystem Size Used Free Blksize / 370M 436K 369M 4096 /mnt 370M 436K 369M 4096 / 370M 436K 369M 4096 /system 153M 145M 7M 4096 /cache 370M 3M 366M 4096 /data 1G 324M 1G 4096 /dev 370M 72K 370M 4096 /mnt/asec 370M 0K 370M 4096 /mnt/obb 370M 0K 370M 4096 /mnt/sdcard 1G 163M 1G 4096 /mnt/sdcard/bstfolder/PublicDocuments 149G 123G 25G 4096 /mnt/sdcard/bstfolder/Documents 149G 123G 25G 4096 /mnt/sdcard/bstfolder/Pictures 149G 123G 25G 4096 /mnt/sdcard/bstfolder/BstSharedFolder 149G 123G 25G 4096 /mnt/sdcard/bstfolder/PublicPictures 149G 123G 25G 4096 ---Mon, 29 Apr 2013 07:33:52 +0000 GMT--- Executing: mount rootfs / rootfs rw 0 0 proc /proc proc rw,relatime 0 0 sys /sys sysfs rw,relatime 0 0 /dev/sda1 /mnt ext4 ro,relatime,barrier=1,data=ordered 0 0 tmpfs / tmpfs ro,relatime 0 0 /dev/loop0 /sfs squashfs ro,relatime 0 0 /dev/loop1 /system ext4 ro,relatime,barrier=1,data=ordered 0 0 tmpfs /cache tmpfs rw,relatime 0 0 /dev/sdb1 /data ext4 rw,relatime,barrier=1,data=ordered 0 0 tmpfs /dev tmpfs rw,relatime,mode=755 0 0 devpts /dev/pts devpts rw,relatime,mode=600 0 0 proc /proc proc rw,relatime 0 0 sysfs /sys sysfs rw,relatime 0 0 tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0 tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0 /dev/block/vold/8:33 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0 /dev/block/vold/8:33 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0 tmpfs /mnt/sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0 PublicDocuments /mnt/sdcard/bstfolder/PublicDocuments bstfolder rw,nosuid,nodev,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702 0 0 Documents /mnt/sdcard/bstfolder/Documents bstfolder rw,nosuid,nodev,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702 0 0 Pictures /mnt/sdcard/bstfolder/Pictures bstfolder rw,nosuid,nodev,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702 0 0 BstSharedFolder /mnt/sdcard/bstfolder/BstSharedFolder bstfolder rw,nosuid,nodev,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702 0 0 PublicPictures /mnt/sdcard/bstfolder/PublicPictures bstfolder rw,nosuid,nodev,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702 0 0 ---Mon, 29 Apr 2013 07:33:52 +0000 GMT--- Reading: /proc/loadavg 2.77 0.77 0.26 2/400 1284 ---Mon, 29 Apr 2013 07:33:52 +0000 GMT--- Reading: /proc/stat cpu 1318 219 364 3960 188 0 2 0 0 0 cpu0 1318 219 364 3960 188 0 2 0 0 0 intr 23669 6051 0 156 9829 31 627 0 3514 0 10 0 3447 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ctxt 92638 btime 1367220772 processes 1284 procs_running 2 procs_blocked 0 softirq 19852 0 5832 0 1839 0 0 89 0 0 12092 ---Mon, 29 Apr 2013 07:33:53 +0000 GMT--- Reading: /proc/stat cpu 1320 219 365 4058 188 0 2 0 0 0 cpu0 1320 219 365 4058 188 0 2 0 0 0 intr 23890 6152 0 156 9829 31 627 0 3514 0 10 0 3567 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ctxt 93138 btime 1367220772 processes 1284 procs_running 2 procs_blocked 0 softirq 20059 0 5925 0 1839 0 0 89 0 0 12206 phpsysinfo-3.4.4/sample/logs/debian7.log000066400000000000000000000174271467431054600202120ustar00rootroot00000000000000---Mon, 06 May 2013 12:38:18 +0000 GMT--- Executing: lsb_release -a 2>/dev/null Distributor ID: Debian Description: Debian GNU/Linux 7.0 (wheezy) Release: 7.0 Codename: wheezy ---Mon, 06 May 2013 12:38:18 +0000 GMT--- Reading: /proc/sys/kernel/hostname testowy ---Mon, 06 May 2013 12:38:18 +0000 GMT--- Executing: uname -r 3.2.0-4-amd64 ---Mon, 06 May 2013 12:38:18 +0000 GMT--- Executing: uname -v #1 SMP Debian 3.2.41-2 ---Mon, 06 May 2013 12:38:18 +0000 GMT--- Executing: uname -m x86_64 ---Mon, 06 May 2013 12:38:18 +0000 GMT--- Reading: /proc/uptime 163.27 99.71 ---Mon, 06 May 2013 12:38:18 +0000 GMT--- Executing: who mietekn tty7 May 6 14:36 (:0) mietekn pts/0 May 6 14:36 (:0.0) ---Mon, 06 May 2013 12:38:18 +0000 GMT--- Reading: /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 58 model name : Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz stepping : 9 cpu MHz : 2702.529 cache size : 6144 KB fpu : yes fpu_exception : yes cpuid level : 5 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc up rep_good nopl pni monitor ssse3 lahf_lm bogomips : 5405.05 clflush size : 64 cache_alignment : 64 address sizes : 36 bits physical, 48 bits virtual power management: ---Mon, 06 May 2013 12:38:18 +0000 GMT--- Executing: lspci 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 00:01.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01) 00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter 00:03.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 40) 00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest Service 00:05.0 Multimedia audio controller: Intel Corporation 82801AA AC'97 Audio Controller (rev 01) 00:06.0 USB controller: Apple Inc. KeyLargo/Intrepid USB 00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08) ---Mon, 06 May 2013 12:38:19 +0000 GMT--- Executing: lsusb Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet ---Mon, 06 May 2013 12:38:19 +0000 GMT--- Reading: /proc/net/dev Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo: 548340 347 0 0 0 0 0 0 548340 347 0 0 0 0 0 0 eth0: 2710 14 0 0 0 0 0 0 11766 90 0 0 0 0 0 0 ---Mon, 06 May 2013 12:38:19 +0000 GMT--- Executing: ifconfig lo 2>/dev/null lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:347 errors:0 dropped:0 overruns:0 frame:0 TX packets:347 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:548340 (535.4 KiB) TX bytes:548340 (535.4 KiB) ---Mon, 06 May 2013 12:38:19 +0000 GMT--- Executing: ifconfig eth0 2>/dev/null eth0 Link encap:Ethernet HWaddr 08:00:27:da:5a:52 inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:feda:5a52/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:14 errors:0 dropped:0 overruns:0 frame:0 TX packets:90 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2710 (2.6 KiB) TX bytes:11766 (11.4 KiB) Interrupt:10 Base address:0xd020 ---Mon, 06 May 2013 12:38:19 +0000 GMT--- Reading: /proc/meminfo MemTotal: 1027016 kB MemFree: 416792 kB Buffers: 27908 kB Cached: 240008 kB SwapCached: 0 kB Active: 339608 kB Inactive: 213396 kB Active(anon): 285704 kB Inactive(anon): 312 kB Active(file): 53904 kB Inactive(file): 213084 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 392188 kB SwapFree: 392188 kB Dirty: 1032 kB Writeback: 0 kB AnonPages: 285032 kB Mapped: 78396 kB Shmem: 972 kB Slab: 24632 kB SReclaimable: 12076 kB SUnreclaim: 12556 kB KernelStack: 2272 kB PageTables: 18520 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 905696 kB Committed_AS: 1393264 kB VmallocTotal: 34359738367 kB VmallocUsed: 5092 kB VmallocChunk: 34359733275 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 40896 kB DirectMap2M: 1007616 kB ---Mon, 06 May 2013 12:38:19 +0000 GMT--- Reading: /proc/swaps Filename Type Size Used Priority /dev/sda5 partition 392188 0 -1 ---Mon, 06 May 2013 12:38:19 +0000 GMT--- Executing: df -k -P 2>/dev/null Filesystem 1024-blocks Used Available Capacity Mounted on rootfs 7867856 3799840 3668352 51% / udev 10240 0 10240 0% /dev tmpfs 102704 612 102092 1% /run /dev/disk/by-uuid/ba660f60-9c33-4be6-b545-4919e9e0cfcd 7867856 3799840 3668352 51% / tmpfs 5120 0 5120 0% /run/lock tmpfs 283840 224 283616 1% /run/shm /dev/sr0 58094 58094 0 100% /media/cdrom0 ---Mon, 06 May 2013 12:38:19 +0000 GMT--- Executing: df -i -P 2>/dev/null Filesystem Inodes IUsed IFree IUse% Mounted on rootfs 499712 152037 347675 31% / udev 126863 358 126505 1% /dev tmpfs 128377 326 128051 1% /run /dev/disk/by-uuid/ba660f60-9c33-4be6-b545-4919e9e0cfcd 499712 152037 347675 31% / tmpfs 128377 2 128375 1% /run/lock tmpfs 128377 6 128371 1% /run/shm /dev/sr0 0 0 0 - /media/cdrom0 ---Mon, 06 May 2013 12:38:19 +0000 GMT--- Executing: mount sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=126863,mode=755) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=102704k,mode=755) /dev/disk/by-uuid/ba660f60-9c33-4be6-b545-4919e9e0cfcd on / type ext4 (rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered) tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k) tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=283840k) rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,nosuid,nodev,noexec,relatime) /dev/sr0 on /media/cdrom0 type iso9660 (ro,nosuid,nodev,noexec,relatime,user=mietekn) ---Mon, 06 May 2013 12:38:19 +0000 GMT--- Reading: /proc/loadavg 0.34 0.36 0.15 1/283 3745 phpsysinfo-3.4.4/sample/logs/sf.log000066400000000000000000000755421467431054600173130ustar00rootroot00000000000000---Mon, 03 Jun 2013 11:37:11 +0000 GMT--- Reading: /etc/centos-release CentOS release 6.3 (Final) ---Mon, 03 Jun 2013 11:37:11 +0000 GMT--- Reading: /proc/sys/kernel/hostname sfp-web-6.v30.ch3.sourceforge.com ---Mon, 03 Jun 2013 11:37:11 +0000 GMT--- Executing: uname -r 2.6.32-358.6.1.el6.sog20130514.x86_64 ---Mon, 03 Jun 2013 11:37:11 +0000 GMT--- Executing: uname -v #1 SMP Tue May 14 17:31:39 UTC 2013 ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Executing: uname -m x86_64 ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Reading: /proc/uptime 1694267.18 4577690.73 ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Executing: who ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Reading: /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 13 model name : QEMU Virtual CPU version (cpu64-rhel6) stepping : 3 cpu MHz : 1994.999 cache size : 4096 KB fpu : yes fpu_exception : yes cpuid level : 4 wp : yes flags : fpu de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm unfair_spinlock pni cx16 hypervisor lahf_lm bogomips : 3989.99 clflush size : 64 cache_alignment : 64 address sizes : 44 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 13 model name : QEMU Virtual CPU version (cpu64-rhel6) stepping : 3 cpu MHz : 1994.999 cache size : 4096 KB fpu : yes fpu_exception : yes cpuid level : 4 wp : yes flags : fpu de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm unfair_spinlock pni cx16 hypervisor lahf_lm bogomips : 3989.99 clflush size : 64 cache_alignment : 64 address sizes : 44 bits physical, 48 bits virtual power management: processor : 2 vendor_id : GenuineIntel cpu family : 6 model : 13 model name : QEMU Virtual CPU version (cpu64-rhel6) stepping : 3 cpu MHz : 1994.999 cache size : 4096 KB fpu : yes fpu_exception : yes cpuid level : 4 wp : yes flags : fpu de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm unfair_spinlock pni cx16 hypervisor lahf_lm bogomips : 3989.99 clflush size : 64 cache_alignment : 64 address sizes : 44 bits physical, 48 bits virtual power management: processor : 3 vendor_id : GenuineIntel cpu family : 6 model : 13 model name : QEMU Virtual CPU version (cpu64-rhel6) stepping : 3 cpu MHz : 1994.999 cache size : 4096 KB fpu : yes fpu_exception : yes cpuid level : 4 wp : yes flags : fpu de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm unfair_spinlock pni cx16 hypervisor lahf_lm bogomips : 3989.99 clflush size : 64 cache_alignment : 64 address sizes : 44 bits physical, 48 bits virtual power management: processor : 4 vendor_id : GenuineIntel cpu family : 6 model : 13 model name : QEMU Virtual CPU version (cpu64-rhel6) stepping : 3 cpu MHz : 1994.999 cache size : 4096 KB fpu : yes fpu_exception : yes cpuid level : 4 wp : yes flags : fpu de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm unfair_spinlock pni cx16 hypervisor lahf_lm bogomips : 3989.99 clflush size : 64 cache_alignment : 64 address sizes : 44 bits physical, 48 bits virtual power management: processor : 5 vendor_id : GenuineIntel cpu family : 6 model : 13 model name : QEMU Virtual CPU version (cpu64-rhel6) stepping : 3 cpu MHz : 1994.999 cache size : 4096 KB fpu : yes fpu_exception : yes cpuid level : 4 wp : yes flags : fpu de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm unfair_spinlock pni cx16 hypervisor lahf_lm bogomips : 3989.99 clflush size : 64 cache_alignment : 64 address sizes : 44 bits physical, 48 bits virtual power management: processor : 6 vendor_id : GenuineIntel cpu family : 6 model : 13 model name : QEMU Virtual CPU version (cpu64-rhel6) stepping : 3 cpu MHz : 1994.999 cache size : 4096 KB fpu : yes fpu_exception : yes cpuid level : 4 wp : yes flags : fpu de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm unfair_spinlock pni cx16 hypervisor lahf_lm bogomips : 3989.99 clflush size : 64 cache_alignment : 64 address sizes : 44 bits physical, 48 bits virtual power management: processor : 7 vendor_id : GenuineIntel cpu family : 6 model : 13 model name : QEMU Virtual CPU version (cpu64-rhel6) stepping : 3 cpu MHz : 1994.999 cache size : 4096 KB fpu : yes fpu_exception : yes cpuid level : 4 wp : yes flags : fpu de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm unfair_spinlock pni cx16 hypervisor lahf_lm bogomips : 3989.99 clflush size : 64 cache_alignment : 64 address sizes : 44 bits physical, 48 bits virtual power management: ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Executing: pidof -s mysqld ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Executing: lspci 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] 00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01) 00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03) 00:03.0 Ethernet controller: Red Hat, Inc Virtio network device 00:04.0 RAM memory: Red Hat, Inc Virtio memory balloon ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Reading: /proc/scsi/scsi Attached devices: Host: scsi0 Channel: 00 Id: 00 Lun: 00 Vendor: ATA Model: QEMU HARDDISK Rev: 0.12 Type: Direct-Access ANSI SCSI revision: 05 ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Executing: pidof -s explorer.exe ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Reading: /home/project-web/phpsysinfo/htdocs/phpsysinfo/data/quotas.tmp Mon Dec 6 09:00:00 EST 2004 1K Block limits File limits User used soft hard grace used soft hard grace cherylstaff-- 2755724 0 0 15678 0 0 brucestaff -- 5738512 0 0 7830 0 0 ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Executing: lsusb ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Reading: /proc/net/dev Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo:27320003601847 234655896121 0 0 0 0 0 0 27320003601847 234655896121 0 0 0 0 0 0 eth0:4165329584450 11931631683 0 0 0 0 0 0 3108966577870 13127032084 0 0 0 0 0 0 ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Executing: ifconfig lo 2>/dev/null lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:234655903698 errors:0 dropped:0 overruns:0 frame:0 TX packets:234655903698 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:27320004466384 (24.8 TiB) TX bytes:27320004466384 (24.8 TiB) ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Executing: ifconfig eth0 2>/dev/null eth0 Link encap:Ethernet HWaddr 02:00:AC:1D:1E:42 inet addr:172.29.30.66 Bcast:172.29.30.255 Mask:255.255.255.0 inet6 addr: fe80::acff:fe1d:1e42/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:11931632533 errors:0 dropped:0 overruns:0 frame:0 TX packets:13127033096 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4165329803095 (3.7 TiB) TX bytes:3108966767181 (2.8 TiB) ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Reading: /proc/meminfo MemTotal: 8059140 kB MemFree: 648372 kB Buffers: 22880 kB Cached: 4231260 kB SwapCached: 2492 kB Active: 3013816 kB Inactive: 3212256 kB Active(anon): 946280 kB Inactive(anon): 1026516 kB Active(file): 2067536 kB Inactive(file): 2185740 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 1015800 kB SwapFree: 963348 kB Dirty: 13700 kB Writeback: 4 kB AnonPages: 1969672 kB Mapped: 175844 kB Shmem: 812 kB Slab: 1073848 kB SReclaimable: 711992 kB SUnreclaim: 361856 kB KernelStack: 2928 kB PageTables: 33512 kB NFS_Unstable: 148 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 5045368 kB Committed_AS: 3170052 kB VmallocTotal: 34359738367 kB VmallocUsed: 26224 kB VmallocChunk: 34359683252 kB HardwareCorrupted: 0 kB AnonHugePages: 77824 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 8180 kB DirectMap2M: 8380416 kB ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Reading: /proc/swaps Filename Type Size Used Priority /dev/dm-0 partition 1015800 52452 -1 ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Executing: df -k -P 2>/dev/null ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Executing: df -i -P 2>/dev/null ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Reading: /home/project-web/phpsysinfo/htdocs/phpsysinfo/data/smart0.tmp smartctl version 5.38 [x86_64-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen Home page is http://smartmontools.sourceforge.net/ Device: SEAGATE ST3146855LW Version: 0003 Serial number: 3LN1GA[rest of serial number redacted] Device type: disk Transport protocol: Parallel SCSI (SPI-4) Local Time is: Sat Jan 30 21:59:56 2010 CET Device supports SMART and is Enabled Temperature Warning Enabled SMART Health Status: OK Current Drive Temperature: 39 C Drive Trip Temperature: 68 C Elements in grown defect list: 0 Vendor (Seagate) cache information Blocks sent to initiator = 1490558074 Blocks received from initiator = 624662611 Blocks read from cache and sent to initiator = 2900209651 Number of read and write commands whose size <= segment size = 386699414 Number of read and write commands whose size > segment size = 28 Vendor (Seagate/Hitachi) factory information number of hours powered up = 14959.20 number of minutes until next internal SMART test = 44 Error counter log: Errors Corrected by Total Correction Gigabytes Total ECC rereads/ errors algorithm processed uncorrected fast | delayed rewrites corrected invocations [10^9 bytes] errors read: 6663270 0 0 6663270 6663270 5100.626 0 write: 0 0 0 0 0 12594895028.099 0 verify: 22626 0 0 22626 22626 28.314 0 Non-medium error count: 3 [GLTSD (Global Logging Target Save Disable) set. Enable Save with '-S on'] SMART Self-test log Num Test Status segment LifeTime LBA_first_err [SK ASC ASQ] Description number (hours) # 1 Background long Interrupted ('-X' switch) - 14371 - [- - -] Long (extended) Self Test duration: 1367 seconds [22.8 minutes] ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Executing: mount proc on /proc type proc (rw) ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Reading: /proc/loadavg 14.01 16.10 16.01 18/358 6013 ---Mon, 03 Jun 2013 11:37:12 +0000 GMT--- Reading: /home/project-web/phpsysinfo/htdocs/phpsysinfo/data/mdstat.tmp Personalities : [linear] [raid0] [raid1] [raid5] [hsm] read_ahead 1024 sectors md0 : active raid5 sdd1[3] sdc6[2] sdb6[1] sda5[0] 633984 blocks level 5, 32k chunk, algorithm 2 [4/4] [UUUU] unused devices: ---Mon, 03 Jun 2013 11:37:13 +0000 GMT--- Reading: /home/project-web/phpsysinfo/htdocs/phpsysinfo/data/bat_info.tmp present: yes design capacity: 50000 mWh last full capacity: 50000 mWh battery technology: rechargeable design voltage: 10000 mV design capacity warning: 100 mWh design capacity low: 50 mWh capacity granularity 1: 1 mWh capacity granularity 2: 1 mWh model number: 1 serial number: 0 battery type: VBOX OEM info: innotek ---Mon, 03 Jun 2013 11:37:13 +0000 GMT--- Reading: /home/project-web/phpsysinfo/htdocs/phpsysinfo/data/bat_state.tmp present: yes capacity state: ok charging state: charged present rate: 0 mW remaining capacity: 50000 mWh present voltage: 10000 mV ---Mon, 03 Jun 2013 11:37:14 +0000 GMT--- Reading: /home/project-web/phpsysinfo/htdocs/phpsysinfo/data/ipmiinfo.tmp BB +1.2V Vtt | 1.197 | Volts | ok | na | 1.096 | 1.134 | 1.285 | 1.323 | na BB +1.5V AUX | 1.490 | Volts | ok | na | 1.334 | 1.373 | 1.622 | 1.669 | na BB +1.5V | 1.469 | Volts | ok | na | 1.326 | 1.365 | 1.625 | 1.677 | na BB +1.8V | 1.802 | Volts | ok | na | 1.638 | 1.689 | 1.926 | 1.988 | na BB +3.3V | 3.320 | Volts | ok | na | 2.941 | 3.027 | 3.578 | 3.681 | na BB +3.3V STB | 3.337 | Volts | ok | na | 3.027 | 3.113 | 3.509 | 3.612 | na BB +1.5V ESB | 1.490 | Volts | ok | na | 1.357 | 1.404 | 1.591 | 1.638 | na BB +5V | 5.122 | Volts | ok | na | 4.446 | 4.576 | 5.408 | 5.564 | na BB +12V AUX | 12.090 | Volts | ok | na | 10.416 | 10.726 | 13.144 | 13.578 | na BB 0.9V | 0.902 | Volts | ok | na | 0.811 | 0.835 | 0.950 | 0.979 | na Baseboard Temp | 29.000 | degrees C | ok | na | 5.000 | 10.000 | 61.000 | 66.000 | na P1 Therm Margin | -32.000 | degrees C | ok | na | na | na | na | na | na P1 Therm Ctrl % | 0.000 | unspecified | ok | na | na | na | na | 49.530 | na Proc 1 Vcc | 1.203 | Volts | ok | na | na | na | na | na | na Power Unit | 0x0 | discrete | 0x0000| na | na | na | na | na | na BMC Watchdog | 0x0 | discrete | 0x0000| na | na | na | na | na | na Scrty Violation | 0x0 | discrete | 0x0000| na | na | na | na | na | na F-P Diag Int | 0x0 | discrete | 0x0000| na | na | na | na | na | na System Event Log | 0x0 | discrete | 0x0000| na | na | na | na | na | na Session Audit | 0x0 | discrete | 0x0000| na | na | na | na | na | na System Event | 0x0 | discrete | 0x0000| na | na | na | na | na | na BB Vbat | 0x0 | discrete | 0x0000| na | na | na | na | na | na SysACPIPowerStat | 0x0 | discrete | 0x0100| na | na | na | na | na | na Button | 0x0 | discrete | 0x0000| na | na | na | na | na | na SMI Timeout | 0x0 | discrete | 0x0100| na | na | na | na | na | na NMI State | 0x0 | discrete | 0x0100| na | na | na | na | na | na SMI State | 0x0 | discrete | 0x0100| na | na | na | na | na | na Processor 1 Stat | 0x0 | discrete | 0x8000| na | na | na | na | na | na Processor 2 Stat | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link0 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link1 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link2 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link3 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link4 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link5 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link6 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link7 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link8 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link9 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link10 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link11 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link12 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link13 | 0x0 | discrete | 0x0000| na | na | na | na | na | na Proc1 VRD Hot | 0x0 | discrete | 0x0000| na | na | na | na | na | na CPU1 Vcc OOR | 0x0 | discrete | 0x0000| na | na | na | na | na | na CPU Popula Error | 0x0 | discrete | 0x0000| na | na | na | na | na | na DIMM A1 | 0x0 | discrete | 0x0400| na | na | na | na | na | na DIMM A2 | 0x0 | discrete | 0x0000| na | na | na | na | na | na DIMM B1 | 0x0 | discrete | 0x0400| na | na | na | na | na | na DIMM B2 | 0x0 | discrete | 0x0000| na | na | na | na | na | na DIMM C1 | 0x0 | discrete | 0x0000| na | na | na | na | na | na DIMM C2 | 0x0 | discrete | 0x0000| na | na | na | na | na | na DIMM D1 | 0x0 | discrete | 0x0000| na | na | na | na | na | na DIMM D2 | 0x0 | discrete | 0x0000| na | na | na | na | na | na MemA Error | 0x0 | discrete | 0x0000| na | na | na | na | na | na MemB Error | 0x0 | discrete | 0x0000| na | na | na | na | na | na MemC Error | 0x0 | discrete | 0x0000| na | na | na | na | na | na MemD Error | 0x0 | discrete | 0x0000| na | na | na | na | na | na B0 Sparing Enb | na | discrete | na | na | na | na | na | na | na B0 Spare Redun | na | discrete | na | na | na | na | na | na | na B1 Sparing Enb | na | discrete | na | na | na | na | na | na | na B1 Spare Redun | na | discrete | na | na | na | na | na | na | na B01 Mirror Enbl | na | discrete | na | na | na | na | na | na | na B01 MirrorRedun | na | discrete | na | na | na | na | na | na | na ---Mon, 03 Jun 2013 11:37:14 +0000 GMT--- Executing: ps axo pid,ppid,pmem,args PID PPID %MEM COMMAND 1 0 0.0 /sbin/init 2 0 0.0 [kthreadd] 3 2 0.0 [migration/0] 4 2 0.0 [ksoftirqd/0] 5 2 0.0 [migration/0] 6 2 0.0 [watchdog/0] 7 2 0.0 [migration/1] 8 2 0.0 [migration/1] 9 2 0.0 [ksoftirqd/1] 10 2 0.0 [watchdog/1] 11 2 0.0 [migration/2] 12 2 0.0 [migration/2] 13 2 0.0 [ksoftirqd/2] 14 2 0.0 [watchdog/2] 15 2 0.0 [migration/3] 16 2 0.0 [migration/3] 17 2 0.0 [ksoftirqd/3] 18 2 0.0 [watchdog/3] 19 2 0.0 [migration/4] 20 2 0.0 [migration/4] 21 2 0.0 [ksoftirqd/4] 22 2 0.0 [watchdog/4] 23 2 0.0 [migration/5] 24 2 0.0 [migration/5] 25 2 0.0 [ksoftirqd/5] 26 2 0.0 [watchdog/5] 27 2 0.0 [migration/6] 28 2 0.0 [migration/6] 29 2 0.0 [ksoftirqd/6] 30 2 0.0 [watchdog/6] 31 2 0.0 [migration/7] 32 2 0.0 [migration/7] 33 2 0.0 [ksoftirqd/7] 34 2 0.0 [watchdog/7] 35 2 0.0 [events/0] 36 2 0.0 [events/1] 37 2 0.0 [events/2] 38 2 0.0 [events/3] 39 2 0.0 [events/4] 40 2 0.0 [events/5] 41 2 0.0 [events/6] 42 2 0.0 [events/7] 43 2 0.0 [cgroup] 44 2 0.0 [khelper] 45 2 0.0 [netns] 46 2 0.0 [async/mgr] 47 2 0.0 [pm] 48 2 0.0 [sync_supers] 49 2 0.0 [bdi-default] 50 2 0.0 [kintegrityd/0] 51 2 0.0 [kintegrityd/1] 52 2 0.0 [kintegrityd/2] 53 2 0.0 [kintegrityd/3] 54 2 0.0 [kintegrityd/4] 55 2 0.0 [kintegrityd/5] 56 2 0.0 [kintegrityd/6] 57 2 0.0 [kintegrityd/7] 58 2 0.0 [kblockd/0] 59 2 0.0 [kblockd/1] 60 2 0.0 [kblockd/2] 61 2 0.0 [kblockd/3] 62 2 0.0 [kblockd/4] 63 2 0.0 [kblockd/5] 64 2 0.0 [kblockd/6] 65 2 0.0 [kblockd/7] 66 2 0.0 [ata/0] 67 2 0.0 [ata/1] 68 2 0.0 [ata/2] 69 2 0.0 [ata/3] 70 2 0.0 [ata/4] 71 2 0.0 [ata/5] 72 2 0.0 [ata/6] 73 2 0.0 [ata/7] 74 2 0.0 [ata_aux] 75 2 0.0 [ksuspend_usbd] 76 2 0.0 [khubd] 77 2 0.0 [kseriod] 78 2 0.0 [md/0] 79 2 0.0 [md/1] 80 2 0.0 [md/2] 81 2 0.0 [md/3] 82 2 0.0 [md/4] 83 2 0.0 [md/5] 84 2 0.0 [md/6] 85 2 0.0 [md/7] 86 2 0.0 [md_misc/0] 87 2 0.0 [md_misc/1] 88 2 0.0 [md_misc/2] 89 2 0.0 [md_misc/3] 90 2 0.0 [md_misc/4] 91 2 0.0 [md_misc/5] 92 2 0.0 [md_misc/6] 93 2 0.0 [md_misc/7] 94 2 0.0 [khungtaskd] 95 2 0.0 [kswapd0] 96 2 0.0 [ksmd] 97 2 0.0 [khugepaged] 98 2 0.0 [aio/0] 99 2 0.0 [aio/1] 100 2 0.0 [aio/2] 101 2 0.0 [aio/3] 102 2 0.0 [aio/4] 103 2 0.0 [aio/5] 104 2 0.0 [aio/6] 105 2 0.0 [aio/7] 106 2 0.0 [crypto/0] 107 2 0.0 [crypto/1] 108 2 0.0 [crypto/2] 109 2 0.0 [crypto/3] 110 2 0.0 [crypto/4] 111 2 0.0 [crypto/5] 112 2 0.0 [crypto/6] 113 2 0.0 [crypto/7] 118 2 0.0 [kthrotld/0] 119 2 0.0 [kthrotld/1] 120 2 0.0 [kthrotld/2] 121 2 0.0 [kthrotld/3] 122 2 0.0 [kthrotld/4] 123 2 0.0 [kthrotld/5] 124 2 0.0 [kthrotld/6] 125 2 0.0 [kthrotld/7] 127 2 0.0 [kpsmoused] 128 2 0.0 [usbhid_resumer] 159 2 0.0 [kstriped] 257 2 0.0 [scsi_eh_0] 258 2 0.0 [scsi_eh_1] 313 2 0.0 [kdmflush] 315 2 0.0 [kdmflush] 330 4796 1.8 /usr/sbin/httpd 335 2 0.0 [flush-253:1] 349 2 0.0 [jbd2/dm-1-8] 350 2 0.0 [ext4-dio-unwrit] 351 2 0.0 [ext4-dio-unwrit] 352 2 0.0 [ext4-dio-unwrit] 353 2 0.0 [ext4-dio-unwrit] 354 2 0.0 [ext4-dio-unwrit] 355 2 0.0 [ext4-dio-unwrit] 356 2 0.0 [ext4-dio-unwrit] 357 2 0.0 [ext4-dio-unwrit] 442 1 0.0 /sbin/udevd -d 610 2 0.0 [virtio-net] 624 2 0.0 [vballoon] 726 30335 0.0 ping 10.0.2.2 773 2 0.0 [kdmflush] 776 2 0.0 [kdmflush] 779 2 0.0 [kdmflush] 782 442 0.0 /sbin/udevd -d 784 2 0.0 [kdmflush] 812 2 0.0 [flush-253:4] 837 2 0.0 [kjournald] 838 2 0.0 [jbd2/dm-2-8] 839 2 0.0 [ext4-dio-unwrit] 840 2 0.0 [ext4-dio-unwrit] 841 2 0.0 [ext4-dio-unwrit] 842 2 0.0 [ext4-dio-unwrit] 843 2 0.0 [ext4-dio-unwrit] 844 2 0.0 [ext4-dio-unwrit] 845 2 0.0 [ext4-dio-unwrit] 846 2 0.0 [ext4-dio-unwrit] 847 2 0.0 [jbd2/dm-3-8] 848 2 0.0 [ext4-dio-unwrit] 849 2 0.0 [ext4-dio-unwrit] 850 2 0.0 [ext4-dio-unwrit] 851 2 0.0 [ext4-dio-unwrit] 852 2 0.0 [ext4-dio-unwrit] 853 2 0.0 [ext4-dio-unwrit] 854 2 0.0 [ext4-dio-unwrit] 855 2 0.0 [ext4-dio-unwrit] 856 2 0.0 [jbd2/dm-4-8] 857 2 0.0 [ext4-dio-unwrit] 858 2 0.0 [ext4-dio-unwrit] 859 2 0.0 [ext4-dio-unwrit] 860 2 0.0 [ext4-dio-unwrit] 861 2 0.0 [ext4-dio-unwrit] 862 2 0.0 [ext4-dio-unwrit] 863 2 0.0 [ext4-dio-unwrit] 864 2 0.0 [ext4-dio-unwrit] 865 2 0.0 [jbd2/dm-5-8] 866 2 0.0 [ext4-dio-unwrit] 867 2 0.0 [ext4-dio-unwrit] 868 2 0.0 [ext4-dio-unwrit] 869 2 0.0 [ext4-dio-unwrit] 870 2 0.0 [ext4-dio-unwrit] 871 2 0.0 [ext4-dio-unwrit] 872 2 0.0 [ext4-dio-unwrit] 873 2 0.0 [ext4-dio-unwrit] 934 2 0.0 [kauditd] 956 330 0.0 ping 10.0.2.2 1132 1 0.0 auditd 1150 1 0.0 /sbin/portreserve 1158 2 0.0 [rpciod/0] 1159 2 0.0 [rpciod/1] 1160 2 0.0 [rpciod/2] 1161 2 0.0 [rpciod/3] 1162 2 0.0 [rpciod/4] 1163 2 0.0 [rpciod/5] 1164 2 0.0 [rpciod/6] 1165 2 0.0 [rpciod/7] 1174 1 0.0 /sbin/rsyslogd -i /var/run/syslogd.pid -c3 1186 1 0.0 irqbalance 1201 1 0.0 rpcbind 1219 1 0.0 rpc.statd 1241 1 0.0 rpc.idmapd 1364 2 0.0 [flush-253:2] 2117 30665 0.3 python /home/project-web/tmda/cgi-bin/moin.cgi 2133 4796 0.5 /usr/sbin/httpd 2246 4796 0.5 /usr/sbin/httpd 2302 4796 0.4 /usr/sbin/httpd 2317 4796 0.5 /usr/sbin/httpd 2318 4796 0.5 /usr/sbin/httpd 2336 4796 0.5 /usr/sbin/httpd 2337 4796 0.5 /usr/sbin/httpd 2338 4796 0.5 /usr/sbin/httpd 2339 4796 0.4 /usr/sbin/httpd 2460 4796 0.5 /usr/sbin/httpd 2669 4796 0.5 /usr/sbin/httpd 3375 24425 0.3 python /home/project-web/openucf/cgi-bin/moin.cgi 4372 4796 0.6 /usr/sbin/httpd 4429 1 0.0 dbus-daemon --system 4453 2 0.0 [kslowd000] 4454 2 0.0 [kslowd001] 4455 2 0.0 [nfsiod] 4456 2 0.0 [lockd] 4481 4796 0.5 /usr/sbin/httpd 4602 1 0.0 hald 4603 4602 0.0 hald-runner 4632 4603 0.0 hald-addon-input: Listening on /dev/input/event1 4667 1 0.0 /usr/sbin/nscd 4682 1 0.0 /usr/sbin/snmpd -LSnd -Lf /dev/null -p /var/run/snmpd.pid -a -c /etc/snmp/snmpd.sfinc-utils.conf 4694 1 0.0 /usr/sbin/sshd 4702 1 0.0 xinetd -stayalive -pidfile /var/run/xinetd.pid 4710 1 0.0 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g 4726 1 1.4 /usr/local/sbin/omnifuse-projects -odev,allow_other --log-info --json-config=/var/local/config/omnifuse-projects.json --log-file=/var/log/omnifuse-projects.log /chroots/prweb/home/project-web 4741 1 0.0 /usr/local/sbin/omnifuse-users -odev,allow_other --log-info --json-config=/var/local/config/omnifuse-users.json --log-file=/var/log/omnifuse-users.log /chroots/prweb/home/user-web 4765 1 0.0 /usr/sbin/abrtd 4769 2302 0.3 python /home/project-web/openucf/cgi-bin/moin.cgi 4773 1 0.0 abrt-dump-oops -d /var/spool/abrt -rwx /var/log/messages 4780 4796 0.3 /usr/sbin/httpd 4796 1 0.4 /usr/sbin/httpd 4812 1 0.0 crond 4867 2 0.0 [flush-0:19] 4870 1 0.0 /usr/sbin/varnishd -P /var/run/varnish.pid -a :6081,:50025,:50026,:50041 -T 127.0.0.1:6082 -f /etc/varnish/default.vcl -t 120 -u varnish -g varnish -S /etc/varnish/secret -s file,/var/lib/varnish/varnish_storage.bin,1G 4896 1 0.0 sh -c /usr/bin/varnishncsa -P /var/run/varnishncsa.pid -f | /usr/local/sbin/filter-varnish-log 4898 4896 3.0 /usr/bin/varnishncsa -P /var/run/varnishncsa.pid -f 4899 4896 0.0 /usr/bin/perl /usr/local/sbin/filter-varnish-log 4912 1 0.0 /usr/sbin/atd 4921 1 0.0 /usr/bin/monit 4928 24370 0.3 python /home/project-web/openucf/cgi-bin/moin.cgi 4956 1 0.0 /var/ossec/bin/ossec-execd 4960 1 0.0 /var/ossec/bin/ossec-agentd 4964 1 0.0 /var/ossec/bin/ossec-logcollector 4968 1 0.0 /var/ossec/bin/ossec-syscheckd 5079 4796 0.4 /usr/sbin/httpd 5161 4796 0.4 /usr/sbin/httpd 5656 1 0.0 /sbin/mingetty /dev/tty1 5658 1 0.0 /sbin/mingetty /dev/tty2 5660 1 0.0 /sbin/mingetty /dev/tty3 5661 1 0.0 /sbin/agetty /dev/ttyS0 115200 vt100-nav 5663 1 0.0 /sbin/mingetty /dev/tty4 5665 1 0.0 /sbin/mingetty /dev/tty5 5667 1 0.0 /sbin/mingetty /dev/tty6 5676 4796 0.4 /usr/sbin/httpd 5883 4796 1.8 /usr/sbin/httpd 5969 27819 0.3 python /home/project-web/openucf/cgi-bin/moin.cgi 6026 5161 0.0 /bin/ps axo pid,ppid,pmem,args 6043 4796 0.0 /usr/sbin/cronolog --symlink=/var/local/log/error_log /var/local/log/%Y/%m/%d/error.log 6047 4796 0.0 /usr/sbin/cronolog --symlink=/var/local/log/access_log /var/local/log/%Y/%m/%d/access_log 6799 2 0.0 [flush-253:5] 7454 5883 0.0 ping 10.0.2.2 9254 442 0.0 /sbin/udevd -d 9403 1 0.2 /usr/bin/perl /var/local/mastertree/host/sfp-web/scripts/split-varnish-log 13285 4796 0.6 /usr/sbin/httpd 13704 4796 0.5 /usr/sbin/httpd 14612 4796 0.2 /usr/sbin/httpd 14835 4796 0.2 /usr/sbin/httpd 16052 4796 0.4 /usr/sbin/httpd 21740 4870 2.4 /usr/sbin/varnishd -P /var/run/varnish.pid -a :6081,:50025,:50026,:50041 -T 127.0.0.1:6082 -f /etc/varnish/default.vcl -t 120 -u varnish -g varnish -S /etc/varnish/secret -s file,/var/lib/varnish/varnish_storage.bin,1G 24370 4796 0.5 /usr/sbin/httpd 24425 4796 0.4 /usr/sbin/httpd 25544 4796 0.4 /usr/sbin/httpd 27739 4796 0.5 /usr/sbin/httpd 27816 4796 0.4 /usr/sbin/httpd 27819 4796 0.5 /usr/sbin/httpd 29216 4796 0.5 /usr/sbin/httpd 30189 4796 1.8 /usr/sbin/httpd 30335 4796 1.8 /usr/sbin/httpd 30645 30189 0.0 ping 10.0.2.2 30665 4796 0.5 /usr/sbin/httpd 32343 4796 1.8 /usr/sbin/httpd 32414 32343 0.0 ping 10.0.2.2 phpsysinfo-3.4.4/sample/main/000077500000000000000000000000001467431054600161435ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/main/README000066400000000000000000000003451467431054600170250ustar00rootroot00000000000000FILE CONTENT OF cpuinfo cat /proc/cpuinfo dfk df -k dfP df -P dfkP df -k -P dfiP df -i -P mount mount dev cat /proc/net/dev swaps cat /proc/swaps nvme nvme list phpsysinfo-3.4.4/sample/main/cpuinfo1.txt000066400000000000000000000007401467431054600204310ustar00rootroot00000000000000processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Core(TM)2 Duo CPU P8600 @ 2.40GHz stepping : 10 cpu MHz : 2391.032 cache size : 64 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 2 wp : yes flags : fpu vme de pse tsc msr mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 constant_tsc up pni monitor bogomips : 4782.06 clflush size : 64 power management: phpsysinfo-3.4.4/sample/main/cpuinfo10.txt000066400000000000000000000010751467431054600205130ustar00rootroot00000000000000cpu : TI UltraSparc III+ (Cheetah+) fpu : UltraSparc III+ integrated FPU pmu : ultra3+ prom : OBP 4.6.3 2002/05/28 09:09 type : sun4u ncpus probed : 6 ncpus active : 6 D$ parity tl1 : 0 I$ parity tl1 : 0 cpucaps : flush,stbar,swap,muldiv,v9,ultra3,mul32,div32,v8plus,vis,vis2 Cpu0ClkTck : 0000000035a4e900 Cpu1ClkTck : 0000000035a4e900 Cpu2ClkTck : 0000000035a4e900 Cpu3ClkTck : 0000000035a4e900 Cpu4ClkTck : 0000000035a4e900 Cpu6ClkTck : 0000000035a4e900 MMU Type : Cheetah+ State: CPU0: online CPU1: online CPU2: online CPU3: online CPU4: online CPU6: online phpsysinfo-3.4.4/sample/main/cpuinfo11.txt000066400000000000000000000062651467431054600205220ustar00rootroot00000000000000cpu : UltraSparc T1 (Niagara) fpu : UltraSparc T1 integrated FPU prom : OBP 4.29.0.a 2008/09/15 11:59 type : sun4v ncpus probed : 32 ncpus active : 32 D$ parity tl1 : 0 I$ parity tl1 : 0 Cpu0ClkTck : 000000003b9aca00 Cpu1ClkTck : 000000003b9aca00 Cpu2ClkTck : 000000003b9aca00 Cpu3ClkTck : 000000003b9aca00 Cpu4ClkTck : 000000003b9aca00 Cpu5ClkTck : 000000003b9aca00 Cpu6ClkTck : 000000003b9aca00 Cpu7ClkTck : 000000003b9aca00 Cpu8ClkTck : 000000003b9aca00 Cpu9ClkTck : 000000003b9aca00 Cpu10ClkTck : 000000003b9aca00 Cpu11ClkTck : 000000003b9aca00 Cpu12ClkTck : 000000003b9aca00 Cpu13ClkTck : 000000003b9aca00 Cpu14ClkTck : 000000003b9aca00 Cpu15ClkTck : 000000003b9aca00 Cpu16ClkTck : 000000003b9aca00 Cpu17ClkTck : 000000003b9aca00 Cpu18ClkTck : 000000003b9aca00 Cpu19ClkTck : 000000003b9aca00 Cpu20ClkTck : 000000003b9aca00 Cpu21ClkTck : 000000003b9aca00 Cpu22ClkTck : 000000003b9aca00 Cpu23ClkTck : 000000003b9aca00 Cpu24ClkTck : 000000003b9aca00 Cpu25ClkTck : 000000003b9aca00 Cpu26ClkTck : 000000003b9aca00 Cpu27ClkTck : 000000003b9aca00 Cpu28ClkTck : 000000003b9aca00 Cpu29ClkTck : 000000003b9aca00 Cpu30ClkTck : 000000003b9aca00 Cpu31ClkTck : 000000003b9aca00 MMU Type : Hypervisor (sun4v) State: CPU0: online CPU1: online CPU2: online CPU3: online CPU4: online CPU5: online CPU6: online CPU7: online CPU8: online CPU9: online CPU10: online CPU11: online CPU12: online CPU13: online CPU14: online CPU15: online CPU16: online CPU17: online CPU18: online CPU19: online CPU20: online CPU21: online CPU22: online CPU23: online CPU24: online CPU25: online CPU26: online CPU27: online CPU28: online CPU29: online CPU30: online CPU31: online phpsysinfo-3.4.4/sample/main/cpuinfo12.txt000066400000000000000000000006501467431054600205130ustar00rootroot00000000000000cpu : TI UltraSparc II (BlackBird) fpu : UltraSparc II integrated FPU promlib : Version 3 Revision 17 prom : 3.17.0 type : sun4u ncpus probed : 2 ncpus active : 2 Cpu0Bogo : 897.84 Cpu0ClkTck : 000000001ad2bd21 Cpu2Bogo : 897.84 Cpu2ClkTck : 000000001ad2bd21 MMU Type : Spitfire State: CPU0: online CPU2: online phpsysinfo-3.4.4/sample/main/cpuinfo13.txt000066400000000000000000000004211467431054600205100ustar00rootroot00000000000000Processor : AArch64 Processor rev 4 (aarch64) processor : 0 processor : 1 processor : 2 processor : 3 Features : fp asimd aes pmull sha1 sha2 crc32 CPU implementer : 0x41 CPU architecture: AArch64 CPU variant : 0x0 CPU part : 0xd03 CPU revision : 4 Hardware : sun50iw1p1 phpsysinfo-3.4.4/sample/main/cpuinfo14.txt000066400000000000000000000021631467431054600205160ustar00rootroot00000000000000processor : 0 model name : ARMv7 Processor rev 3 (v7l) BogoMIPS : 270.00 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xd08 CPU revision : 3 processor : 1 model name : ARMv7 Processor rev 3 (v7l) BogoMIPS : 270.00 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xd08 CPU revision : 3 processor : 2 model name : ARMv7 Processor rev 3 (v7l) BogoMIPS : 270.00 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xd08 CPU revision : 3 processor : 3 model name : ARMv7 Processor rev 3 (v7l) BogoMIPS : 270.00 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xd08 CPU revision : 3 Hardware : BCM2835 Revision : a03111 Serial : xxxxxxxxxxxxxxxx phpsysinfo-3.4.4/sample/main/cpuinfo15.txt000066400000000000000000000027061467431054600205220ustar00rootroot00000000000000vendor_id : IBM/S390 # processors : 4 bogomips per cpu: 3033.00 max thread id : 0 features : esan3 zarch stfle msa ldisp eimm dfp edat etf3eh highgprs te vx sie facilities : 0 1 2 3 4 6 7 8 9 10 12 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 34 35 36 37 40 41 42 43 44 45 46 47 48 49 50 51 52 53 55 57 73 74 75 76 77 80 81 82 128 129 131 cache0 : level=1 type=Data scope=Private size=128K line_size=256 associativity=8 cache1 : level=1 type=Instruction scope=Private size=96K line_size=256 associativity=6 cache2 : level=2 type=Data scope=Private size=2048K line_size=256 associativity=8 cache3 : level=2 type=Instruction scope=Private size=2048K line_size=256 associativity=8 cache4 : level=3 type=Unified scope=Shared size=65536K line_size=256 associativity=16 cache5 : level=4 type=Unified scope=Shared size=491520K line_size=256 associativity=30 processor 0: version = FF, identification = 118F67, machine = 2964 processor 1: version = FF, identification = 118F67, machine = 2964 processor 2: version = FF, identification = 118F67, machine = 2964 processor 3: version = FF, identification = 118F67, machine = 2964 cpu number : 0 cpu MHz dynamic : 5000 cpu MHz static : 5000 cpu number : 1 cpu MHz dynamic : 5000 cpu MHz static : 5000 cpu number : 2 cpu MHz dynamic : 5000 cpu MHz static : 5000 cpu number : 3 cpu MHz dynamic : 5000 cpu MHz static : 5000 phpsysinfo-3.4.4/sample/main/cpuinfo16.txt000066400000000000000000000002071467431054600205150ustar00rootroot00000000000000processor : 0 vendor_id : User Mode Linux model name : UML mode : skas host : Linux kytes 3.11.0-rc1-00009-ge5fd680 bogomips : 7007.43 phpsysinfo-3.4.4/sample/main/cpuinfo2.txt000066400000000000000000000005201467431054600204260ustar00rootroot00000000000000Processor : ARMv6-compatible processor rev 7 (v6l) BogoMIPS : 847.05 Features : swp half thumb fastmult vfp edsp java tls CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xb76 CPU revision : 7 Hardware : BCM2708 Revision : 0002 Serial : 000000000abc0ab1 phpsysinfo-3.4.4/sample/main/cpuinfo3.txt000066400000000000000000000006221467431054600204320ustar00rootroot00000000000000Processor : ARMv7 Processor rev 10 (v7l) processor : 0 BogoMIPS : 597.12 processor : 1 BogoMIPS : 597.12 Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x2 CPU part : 0xc09 CPU revision : 10 Hardware : Tuna Revision : 0009 Serial : 01298fc30100203f phpsysinfo-3.4.4/sample/main/cpuinfo4.txt000066400000000000000000000004411467431054600204320ustar00rootroot00000000000000Processor : ARMv7 Processor rev 1 (v7l) processor : 0 BogoMIPS : 1592.52 Features : swp half thumb fastmult vfp edsp neon vfpv3 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x2 CPU part : 0xc09 CPU revision : 1 Hardware : SMDKC210 Revision : 000c Serial : xxxxxxxxxxxxxxxx phpsysinfo-3.4.4/sample/main/cpuinfo5.txt000066400000000000000000000004201467431054600204300ustar00rootroot00000000000000Processor : ARMv7 Processor rev 0 (v7l) BogoMIPS : 366.18 Features : swp half thumb fastmult vfp edsp neon vfpv3 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xc08 CPU revision : 0 Hardware : Goldfish Revision : 0000 Serial : 0000000000000000 phpsysinfo-3.4.4/sample/main/cpuinfo6.txt000066400000000000000000000005141467431054600204350ustar00rootroot00000000000000Processor : Feroceon 88FR131 rev 1 (v5l) BogoMIPS : 797.90 Features : swp half thumb fastmult edsp CPU implementer : 0x56 CPU architecture: 5TE CPU variant : 0x2 CPU part : 0x131 CPU revision : 1 Hardware : LaCie Internet Space v2 Revision : 0000 Serial : 0000000000000000 phpsysinfo-3.4.4/sample/main/cpuinfo7.txt000066400000000000000000000007151467431054600204410ustar00rootroot00000000000000Processor: ARM926EJ-S rev 0 (v5l) BogoMIPS: 956.82 Features: swp half thumb fastmult vfp edsp CPU implementer: 0x41 CPU architecture: 5TE CPU variant: 0x1 CPU part: 0x926 CPU revision: 0 Cache type: write-back Cache clean: cp15 c7 ops Cache lockdown: format C Cache format: Harvard I size: 32768 I assoc: 4 I line length: 32 I sets: 256 D size: 32768 D assoc: 4 D line length: 32 D sets: 256 Hardware: Feroceon-MV78XX0 Revision: 0000 Serial: 0000000000000000 phpsysinfo-3.4.4/sample/main/cpuinfo8.txt000066400000000000000000000010671467431054600204430ustar00rootroot00000000000000system type : Sigma Designs TangoX processor : 0 cpu model : MIPS 24K V7.12 FPU V0.0 Initial BogoMIPS : 332.59 wait instruction : yes microsecond timers : yes tlb_entries : 32 extra interrupt vector : yes hardware watchpoint : yes ASEs implemented : mips16 shadow register sets : 1 VCED exceptions : not available VCEI exceptions : not available System bus frequency : 333000000 Hz CPU frequency : 499500000 Hz DSP frequency : 333000000 Hz phpsysinfo-3.4.4/sample/main/cpuinfo9.txt000066400000000000000000000004241467431054600204400ustar00rootroot00000000000000machine : SH7785LCR processor : 0 cpu family : sh4a cpu type : SH7785 cut : 7.x cpu flags : fpu perfctr llsc cache type : split (harvard) icache size : 32KiB (4-way) dcache size : 32KiB (4-way) bogomips : 599.99 phpsysinfo-3.4.4/sample/main/dev1.txt000066400000000000000000000012641467431054600175460ustar00rootroot00000000000000Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo: 1106222 765 0 0 0 0 0 0 1106222 765 0 0 0 0 0 0 eth0: 1697868 1725 0 0 0 0 0 0 196192 1367 0 0 0 0 0 0 eth1: 479861 421 0 0 0 0 0 0 51152 377 0 0 0 0 0 0 pan0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 phpsysinfo-3.4.4/sample/main/dfP1.txt000066400000000000000000000031541467431054600175010ustar00rootroot00000000000000Filesystem 1K-blocks Used Available Use% Mounted on /dev/ad0s1a 2 1 1 0% / /dev/ad0s1f 2 1 1 0% /usr /dev/ad0s1e 2 1 1 0% /var /dev/ad4s1e 2 1 1 0% /opt /dev/ad2s1e 2 1 1 0% /opt/glftpd/site/Games /dev/ad5s1e 2 1 1 0% /opt/glftpd/site/Movies /dev/ad1s1c 2 1 1 0% /opt/glftpd/site/Movies2 /dev/ad6s1e 2 1 1 0% /opt/glftpd/site/xbox /dev/vinum/opt1 2 1 1 0% /opt1 procfs 2 1 1 0% /proc //ADMINISTRATOR@GODFATHER/GODFATHER C 2 1 1 0% /usr/home/username/godfather /dev/sda1 2 1 1 0% /mount/sda1 /dev/sda2 2 1 1 0% /mount/sda2 /dev/sda3 2 1 1 0% /mount/sda3 /dev/sda4 2 1 1 0% /mount/sda4 /dev/sda5 2 1 1 0% /mount/sda5 /dev/sda6 2 1 1 0% /mount/sda6 /dev/sda7 2 1 1 0% /mount/sda7 /dev/sda8 2 1 1 0% /mount/sda8 /dev/sda9 2 1 1 0% /mount/sda9 /dev/sda10 2 1 1 0% /mount/sda10 /dev/sda11 2 1 1 0% /mount/sda11 /dev/sda12 2 1 1 0% /mount/sda12 phpsysinfo-3.4.4/sample/main/dfiP1.txt000066400000000000000000000005411467431054600176470ustar00rootroot00000000000000Filesystem Inode IUsati ILib. IUso% Montato su /dev/sda3 3278576 589607 2688969 18% / udev 218280 1831 216449 1% /dev /dev/sda4 0 0 0 - /home/erendil shm 218280 1 218279 1% /dev/shm /dev/sda1 18072 52 18020 1% /boot phpsysinfo-3.4.4/sample/main/dfk1.txt000066400000000000000000000012561467431054600175350ustar00rootroot00000000000000Filesystem 1024-blocks Used Available Capacity iused ifree %iused Mounted on /dev/disk1s1 976900220 971333920 3753472 100% 1934160 9223372036852841647 0% / devfs 186 186 0 100% 646 0 100% /dev /dev/disk1s4 976900220 1048596 3753472 22% 1 9223372036854775806 0% /private/var/vm map -hosts 0 0 0 100% 0 0 100% /net map auto_home 0 0 0 100% 0 0 100% /home /dev/disk1s3 976900220 506832 3753472 12% 15 9223372036854775792 0% /Volumes/Recovery phpsysinfo-3.4.4/sample/main/dfkP1.txt000066400000000000000000000006311467431054600176510ustar00rootroot00000000000000Filesystem 1024-blocks Used Available Capacity Montato su /dev/sda3 51613048 13387836 35603404 28% / udev 10240 148 10092 2% /dev /dev/sda4 2876529360 784104536 2092424824 28% /home/erendil shm 1685172 0 1685172 0% /dev/shm /dev/sda1 69972 37071 29288 56% /boot phpsysinfo-3.4.4/sample/main/mount1.txt000066400000000000000000000022471467431054600201340ustar00rootroot00000000000000/dev/ad0s1a on / type ext2 (ufs, local) /dev/ad0s1f on /usr type ext2 (ufs, local, soft-updates) /dev/ad0s1e on /var type ext2 (ufs, local, soft-updates) /dev/ad4s1e on /opt type ext2 (ufs, local, soft-updates) /dev/ad2s1e on /opt/glftpd/site/Games type ext2 (ufs, local, soft-updates) /dev/ad5s1e on /opt/glftpd/site/Movies type ext2 (ufs, local, soft-updates) /dev/ad1s1c on /opt/glftpd/site/Movies2 type ext2 (ufs, local, soft-updates) /dev/ad6s1e on /opt/glftpd/site/xbox type ext2 (ufs, local, soft-updates) /dev/vinum/opt1 on /opt1 type ext2 (ufs, local, soft-updates) procfs on /proc type ext2 (procfs, local) //ADMINISTRATOR@GODFATHER/GODFATHER C on /usr/home/username/godfather type ext2 (smbfs) /dev/sda1 on /mount/sda1 type ext2 (rw) /dev/sda2 on /mount/sda2 type ext2 (rw) /dev/sda3 on /mount/sda3 type ext2 (rw) /dev/sda4 on /mount/sda4 type ext2 (rw) /dev/sda5 on /mount/sda5 type ext2 (rw) /dev/sda6 on /mount/sda6 type ext2 (rw) /dev/sda7 on /mount/sda7 type ext2 (rw) /dev/sda8 on /mount/sda8 type ext2 (rw) /dev/sda9 on /mount/sda9 type ext2 (rw) /dev/sda10 on /mount/sda10 type ext2 (rw) /dev/sda11 on /mount/sda11 type ext2 (rw) /dev/sda12 on /mount/sda12 type ext2 (rw) phpsysinfo-3.4.4/sample/main/mount2.txt000066400000000000000000000011311467431054600201240ustar00rootroot00000000000000/dev/sda3 on / type ext3 (rw,noatime) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) udev on /dev type tmpfs (rw,nosuid,relatime,size=10240k,mode=755) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620) /dev/sda4 on /home/erendil type reiserfs (rw,noatime) shm on /dev/shm type tmpfs (rw,noexec,nosuid,nodev) usbfs on /proc/bus/usb type usbfs (rw,noexec,nosuid,devmode=0664,devgid=85) binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev) /dev/sda1 on /boot type ext2 (rw,noatime) phpsysinfo-3.4.4/sample/main/nvme1.txt000066400000000000000000000006521467431054600177350ustar00rootroot00000000000000Node SN Model Namespace Usage Format FW Rev ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- -------- /dev/nvme0n1 ABCDEFGHIJKLMNOP INTEL SSDPEKKW256G7 1 256.06 GB / 256.06 GB 512 B + 0 B PSF121C phpsysinfo-3.4.4/sample/main/nvme2.txt000066400000000000000000000006761467431054600177440ustar00rootroot00000000000000Node SN Model Version Namespace Usage Format FW Rev ---------------- -------------------- ---------------------------------------- -------- --------- -------------------------- ---------------- -------- /dev/nvme0n1 deadbeef QEMU NVMe Ctrl 1.1 1 1.07 GB / 1.07 GB 4 KiB + 0 B 1.0 phpsysinfo-3.4.4/sample/main/swaps1.txt000066400000000000000000000001501467431054600201160ustar00rootroot00000000000000Filename Type Size Used Priority /dev/sda5 partition 3389672 39216 -1 phpsysinfo-3.4.4/sample/main/vm_stat1.txt000066400000000000000000000010541467431054600204420ustar00rootroot00000000000000Mach Virtual Memory Statistics: (page size of 4096 bytes) Pages free: 33312. Pages active: 27150. Pages inactive: 28122. Pages wired down: 9720. "Translation faults": 18751279. Pages copy-on-write: 72642. Pages zero filled: 17475509. Pages reactivated: 110441. Pageins: 23256. Pageouts: 9390. Object cache: 21657 hits of 216013 lookups (10% hit rate) phpsysinfo-3.4.4/sample/main/vm_stat2.txt000066400000000000000000000011241467431054600204410ustar00rootroot00000000000000Mach Virtual Memory Statistics: (page size of 4096 bytes) Pages free: 90518. Pages active: 205479. Pages inactive: 32417. Pages speculative: 134461. Pages wired down: 61009. "Translation faults": 26323651. Pages copy-on-write: 177180. Pages zero filled: 15230394. Pages reactivated: 3. Pageins: 388108. Pageouts: 0. Object cache: 14 hits of 797355 lookups (0% hit rate) phpsysinfo-3.4.4/sample/main/vm_stat3.txt000066400000000000000000000020021467431054600204360ustar00rootroot00000000000000Mach Virtual Memory Statistics: (page size of 4096 bytes) Pages free: 10618. Pages active: 1894043. Pages inactive: 988141. Pages speculative: 806200. Pages throttled: 0. Pages wired down: 437176. Pages purgeable: 10356. "Translation faults": 2938853787. Pages copy-on-write: 241916814. Pages zero filled: 971743078. Pages reactivated: 379509. Pages purged: 637333. File-backed pages: 1552166. Anonymous pages: 2136218. Pages stored in compressor: 77894. Pages occupied by compressor: 56429. Decompressions: 3639. Compressions: 82391. Pageins: 1973731. Pageouts: 23343. Swapins: 264. Swapouts: 264. phpsysinfo-3.4.4/sample/motherboard/000077500000000000000000000000001467431054600175255ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/motherboard/freeipmi/000077500000000000000000000000001467431054600213255ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/motherboard/freeipmi/freeipmi1.txt000066400000000000000000000112121467431054600237440ustar00rootroot00000000000000ID | Name | Type | Reading | Units | Lower NR | Lower C | Lower NC | Upper NC | Upper C | Upper NR | Event 64 | BIOS | System Firmware Progress | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A 112 | ACPI State | System ACPI Power State | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 'S0/G0' 160 | System Reset | Module/Board | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 'OK' 208 | CPU Fan | Fan | 2085.94 | RPM | N/A | N/A | N/A | N/A | 771.96 | N/A | 'OK' 272 | Rear Fan | Fan | 1463.27 | RPM | N/A | N/A | N/A | N/A | 771.96 | N/A | 'OK' 336 | System 12V | Voltage | 11.93 | V | N/A | 10.02 | N/A | N/A | 13.16 | N/A | 'OK' 400 | System 5V | Voltage | 5.05 | V | N/A | 4.75 | N/A | N/A | 5.24 | N/A | 'OK' 464 | System AUX 5V | Voltage | 4.94 | V | N/A | 4.75 | N/A | N/A | 5.24 | N/A | 'OK' 528 | System 3.3V | Voltage | 3.22 | V | N/A | 3.14 | N/A | N/A | 3.47 | N/A | 'OK' 592 | System AUX 3.3V | Voltage | 3.31 | V | N/A | 3.14 | N/A | N/A | 3.47 | N/A | 'OK' 656 | CPU Vcore | Voltage | 1.16 | V | N/A | 0.84 | N/A | N/A | 1.61 | N/A | 'OK' 720 | CPU Vterm | Voltage | 1.21 | V | N/A | 1.15 | N/A | N/A | 1.26 | N/A | 'OK' 784 | Memory Vcore | Voltage | 1.78 | V | N/A | 1.71 | N/A | N/A | 1.91 | N/A | 'OK' 848 | Memory Vterm | Voltage | 0.89 | V | N/A | 0.85 | N/A | N/A | 0.94 | N/A | 'OK' 912 | AMB/MCH Vcore | Voltage | 1.50 | V | N/A | 1.43 | N/A | N/A | 1.58 | N/A | 'OK' 976 | PCI System Err | Module/Board | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A 1024 | Mem Recover Err | Memory | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A 1072 | MemUnrecover Er | Memory | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A 1120 | RCPU Diode 1 | Temperature | N/A | C | N/A | N/A | N/A | N/A | 85.00 | N/A | N/A 1184 | Ambient | Temperature | 27.00 | C | N/A | N/A | N/A | N/A | 51.00 | N/A | 'OK' 1248 | Local VRD0 Temp | Temperature | 28.00 | C | N/A | N/A | N/A | N/A | N/A | N/A | 'OK' 1504 | CPU Dmn 0 Temp | Temperature | 53.00 | C | N/A | N/A | N/A | N/A | 85.00 | N/A | 'OK' 1632 | Slots Amb | Temperature | 33.00 | C | N/A | N/A | N/A | N/A | 85.00 | N/A | 'OK' 1696 | 1.8V Amb | Temperature | 46.00 | C | N/A | N/A | N/A | N/A | 85.00 | N/A | 'OK' 2080 | Therm-Trip | Processor | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 'State Deasserted' 2128 | CPU Prochot | Temperature | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 'Limit Not Exceeded' 2176 | LOM Link Status | LAN | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 'State Asserted' 2224 | LO100 Present | Add In Card | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 'Device Removed/Device Absent' 5616 | Watchdog | Watchdog 2 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A phpsysinfo-3.4.4/sample/motherboard/freeipmi/freeipmi2.txt000066400000000000000000000104021467431054600237450ustar00rootroot00000000000000ID | Name | Type | Reading | Units | Lower NR | Lower C | Lower NC | Upper NC | Upper C | Upper NR | Event 4 | CPU1 Temp | OEM Reserved | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 'OEM Event = 0000h' 5 | CPU2 Temp | OEM Reserved | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 'OEM Event = 0000h' 6 | Sys Temp | Temperature | 26.00 | C | N/A | N/A | N/A | 76.00 | 78.00 | 80.00 | 'OK' 7 | CPU1 Vcore | Voltage | 1.20 | V | 0.86 | 0.88 | 0.90 | 1.62 | 1.63 | 1.64 | 'OK' 8 | CPU2 Vcore | Voltage | 1.21 | V | 0.86 | 0.88 | 0.90 | 1.62 | 1.63 | 1.64 | 'OK' 9 | 3.3V | Voltage | 3.36 | V | 2.91 | 2.93 | 2.94 | 3.65 | 3.66 | 3.68 | 'OK' 10 | 5V | Voltage | 4.92 | V | 4.42 | 4.44 | 4.46 | 5.52 | 5.54 | 5.57 | 'OK' 11 | 12V | Voltage | 11.81 | V | 10.46 | 10.56 | 10.66 | 13.34 | 13.44 | 13.54 | 'OK' 12 | -12V | Voltage | -12.30 | V | -10.50 | -10.60 | -10.70 | -13.30 | -13.40 | -13.50 | 'OK' 13 | 1.5V | Voltage | 1.49 | V | 1.30 | 1.31 | 1.33 | 1.66 | 1.68 | 1.70 | 'OK' 14 | 5VSB | Voltage | 4.92 | V | 4.42 | 4.44 | 4.46 | 5.52 | 5.54 | 5.57 | 'OK' 15 | VBAT | Voltage | 3.20 | V | 2.91 | 2.93 | 2.94 | 3.65 | 3.66 | 3.68 | 'OK' 16 | Fan1 | Fan | 5200.00 | RPM | 200.00 | 300.00 | 400.00 | N/A | N/A | N/A | 'OK' 17 | Fan2 | Fan | 5100.00 | RPM | 200.00 | 300.00 | 400.00 | N/A | N/A | N/A | 'OK' 18 | Fan3 | Fan | 5000.00 | RPM | 200.00 | 300.00 | 400.00 | N/A | N/A | N/A | 'OK' 19 | Fan4 | Fan | 5200.00 | RPM | 200.00 | 300.00 | 400.00 | N/A | N/A | N/A | 'OK' 20 | Fan5 | Fan | 0.00 | RPM | 200.00 | 300.00 | 400.00 | N/A | N/A | N/A | 'At or Below (<=) Lower Non-Recoverable Threshold' 21 | Fan6 | Fan | 0.00 | RPM | 200.00 | 300.00 | 400.00 | N/A | N/A | N/A | 'At or Below (<=) Lower Non-Recoverable Threshold' 22 | Fan7/CPU1 | Fan | 0.00 | RPM | 200.00 | 300.00 | 400.00 | N/A | N/A | N/A | 'At or Below (<=) Lower Non-Recoverable Threshold' 23 | Fan8/CPU2 | Fan | 0.00 | RPM | 200.00 | 300.00 | 400.00 | N/A | N/A | N/A | 'At or Below (<=) Lower Non-Recoverable Threshold' 24 | Intrusion | Physical Security | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 'General Chassis Intrusion' 25 | Power Supply | Power Supply | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 'OK' 26 | CPU0 Internal E | Module/Board | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 'OK' 27 | CPU1 Internal E | Module/Board | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 'OK' 28 | CPU Overheat | Module/Board | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 'OK' 29 | Thermal Trip0 | Module/Board | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 'OK' 30 | Thermal Trip1 | Module/Board | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | 'OK' phpsysinfo-3.4.4/sample/motherboard/healthd/000077500000000000000000000000001467431054600211365ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/motherboard/healthd/healthd1.txt000066400000000000000000000001161467431054600233670ustar00rootroot00000000000000localhost 42.0 56.0 0.0 0000 3443 0000 1.34 0.00 3.28 4.92 11.49 -10.66 -4.63 phpsysinfo-3.4.4/sample/motherboard/hwsensors/000077500000000000000000000000001467431054600215605ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/motherboard/hwsensors/hwsensors1.txt000066400000000000000000000011151467431054600244330ustar00rootroot00000000000000hw.sensors.0=lm0, VCORE_A, volts_dc, 1.73 V hw.sensors.1=lm0, VCORE_B, volts_dc, 1.74 V hw.sensors.2=lm0, +3.3V, volts_dc, 3.26 V hw.sensors.3=lm0, +5V, volts_dc, 4.91 V hw.sensors.4=lm0, +12V, volts_dc, 12.28 V hw.sensors.5=lm0, -12V, volts_dc, -11.82 V hw.sensors.6=lm0, -5V, volts_dc, 3.55 V hw.sensors.7=lm0, +5VSB, volts_dc, 4.92 V hw.sensors.8=lm0, VBAT, volts_dc, 3.26 V hw.sensors.9=lm0, Temp1, temp, 33.00 degC / 91.40 degF hw.sensors.10=lm0, Temp2, temp, 22.50 degC / 72.50 degF hw.sensors.11=lm0, Temp3, temp, 127.50 degC / 261.50 degF hw.sensors.12=lm0, Fan1, fanrpm, 4891 RPM phpsysinfo-3.4.4/sample/motherboard/hwsensors/hwsensors2.txt000066400000000000000000000007231467431054600244400ustar00rootroot00000000000000hw.sensors.0=it0, Fan1, 2445 RPM hw.sensors.3=it0, VCORE_A, 1.62 V DC hw.sensors.4=it0, VCORE_B, 2.66 V DC hw.sensors.5=it0, +3.3V, 3.23 V DC hw.sensors.6=it0, +5V, 4.84 V DC hw.sensors.7=it0, +12V, 12.42 V DC hw.sensors.8=it0, Unused, -2.80 V DC hw.sensors.9=it0, -12V, -6.62 V DC hw.sensors.10=it0, +5VSB, 4.84 V DC hw.sensors.11=it0, VBAT, 0.00 V DC hw.sensors.12=it0, Temp 1, 35.00 degC hw.sensors.13=it0, Temp 2, 29.00 degC hw.sensors.14=it0, Temp 3, 45.00 degC phpsysinfo-3.4.4/sample/motherboard/hwsensors/hwsensors3.txt000066400000000000000000000010471467431054600244410ustar00rootroot00000000000000hw.sensors.acpitz0.temp0=21.80 degC (zone temperature) hw.sensors.it0.temp0=25.00 degC hw.sensors.it0.temp1=25.00 degC hw.sensors.it0.temp2=28.00 degC hw.sensors.it0.fan0=3668 RPM hw.sensors.it0.fan2=2033 RPM hw.sensors.it0.volt0=1.52 VDC (VCORE_A) hw.sensors.it0.volt1=2.54 VDC (VCORE_B) hw.sensors.it0.volt2=3.25 VDC (+3.3V) hw.sensors.it0.volt3=4.19 VDC (+5V) hw.sensors.it0.volt4=12.10 VDC (+12V) hw.sensors.it0.volt5=-9.42 VDC (-12V) hw.sensors.it0.volt6=-4.68 VDC (-5V) hw.sensors.it0.volt7=3.87 VDC (+5VSB) hw.sensors.it0.volt8=4.08 VDC (VBAT) phpsysinfo-3.4.4/sample/motherboard/hwsensors/hwsensors4.txt000066400000000000000000000014011467431054600244340ustar00rootroot00000000000000hw.sensors.cpu0.temp0=35.00 degC hw.sensors.cpu1.temp0=35.00 degC hw.sensors.cpu2.temp0=35.00 degC hw.sensors.cpu3.temp0=35.00 degC hw.sensors.acpitz0.temp0=47.00 degC (zone temperature) hw.sensors.acpibat0.volt0=10.80 VDC (voltage) hw.sensors.acpibat0.volt1=12.46 VDC (current voltage) hw.sensors.acpibat0.amphour0=9.39 Ah (last full capacity) hw.sensors.acpibat0.amphour1=0.47 Ah (warning capacity) hw.sensors.acpibat0.amphour2=0.02 Ah (low capacity) hw.sensors.acpibat0.amphour3=9.39 Ah (remaining capacity), OK hw.sensors.acpibat0.raw0=0 (battery full), OK hw.sensors.acpibat0.raw1=0 (rate) hw.sensors.acpiac0.indicator0=On (power supply) hw.sensors.acpithinkpad0.temp0=47.00 degC hw.sensors.acpithinkpad0.temp1=47.00 degC hw.sensors.acpithinkpad0.temp2=47.00 degC phpsysinfo-3.4.4/sample/motherboard/hwsensors/hwsensors5.txt000066400000000000000000000026111467431054600244410ustar00rootroot00000000000000hw.sensors.cpu0.temp0=60.00 degC hw.sensors.cpu1.temp0=60.00 degC hw.sensors.cpu2.temp0=60.00 degC hw.sensors.cpu3.temp0=60.00 degC hw.sensors.acpitz0.temp0=59.00 degC (zone temperature) hw.sensors.acpibat0.volt0=11.10 VDC (voltage) hw.sensors.acpibat0.volt1=12.49 VDC (current voltage) hw.sensors.acpibat0.power0=0.00 W (rate) hw.sensors.acpibat0.watthour0=48.90 Wh (last full capacity) hw.sensors.acpibat0.watthour1=2.44 Wh (warning capacity) hw.sensors.acpibat0.watthour2=0.20 Wh (low capacity) hw.sensors.acpibat0.watthour3=47.90 Wh (remaining capacity), OK hw.sensors.acpibat0.raw0=0 (battery idle), OK hw.sensors.acpiac0.indicator0=On (power supply) hw.sensors.acpithinkpad0.temp0=59.00 degC hw.sensors.acpithinkpad0.temp1=59.00 degC hw.sensors.acpithinkpad0.temp2=59.00 degC hw.sensors.acpithinkpad0.temp3=59.00 degC hw.sensors.acpithinkpad0.temp4=59.00 degC hw.sensors.acpithinkpad0.temp5=59.00 degC hw.sensors.acpithinkpad0.temp6=59.00 degC hw.sensors.acpithinkpad0.temp7=59.00 degC hw.sensors.acpithinkpad0.fan0=3782 RPM hw.sensors.acpidock0.indicator0=Off (not docked) hw.sensors.aps0.temp0=45.00 degC hw.sensors.aps0.temp1=45.00 degC hw.sensors.aps0.indicator0=On (Keyboard Active) hw.sensors.aps0.indicator1=Off (Mouse Active) hw.sensors.aps0.indicator2=On (Lid Open) hw.sensors.aps0.raw0=503 (X_ACCEL) hw.sensors.aps0.raw1=519 (Y_ACCEL) hw.sensors.aps0.raw2=503 (X_VAR) hw.sensors.aps0.raw3=519 (Y_VAR) phpsysinfo-3.4.4/sample/motherboard/ipmicfg/000077500000000000000000000000001467431054600211435ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/motherboard/ipmicfg/ipmicfg1.txt000066400000000000000000000132751467431054600234130ustar00rootroot00000000000000Status | (#)Sensor | Reading | Low Limit | High Limit | ------ | --------- | ------- | --------- | ---------- | OK | (4) CPU1 Temp | 25C/77F | N/A | 70C/158F | OK | (71) CPU2 Temp | 26C/79F | N/A | 70C/158F | OK | (138) System Temp | 27C/81F | -7C/19F | 85C/185F | OK | (205) Peripheral Temp | 39C/102F | -7C/19F | 85C/185F | OK | (272) PCH Temp | 45C/113F | -8C/18F | 95C/203F | OK | (339) P1-DIMMA1 TEMP | 41C/106F | 2C/36F | 85C/185F | OK | (406) P1-DIMMA2 TEMP | 38C/100F | 2C/36F | 85C/185F | | (473) P1-DIMMA3 TEMP | N/A | N/A | N/A | OK | (540) P1-DIMMB1 TEMP | 38C/100F | 2C/36F | 85C/185F | OK | (607) P1-DIMMB2 TEMP | 32C/90F | 2C/36F | 85C/185F | | (674) P1-DIMMB3 TEMP | N/A | N/A | N/A | OK | (741) P1-DIMMC1 TEMP | 44C/111F | 2C/36F | 85C/185F | OK | (808) P1-DIMMC2 TEMP | 44C/111F | 2C/36F | 85C/185F | | (875) P1-DIMMC3 TEMP | N/A | N/A | N/A | OK | (942) P1-DIMMD1 TEMP | 42C/108F | 2C/36F | 85C/185F | OK | (1009) P1-DIMMD2 TEMP | 39C/102F | 2C/36F | 85C/185F | | (1076) P1-DIMMD3 TEMP | N/A | N/A | N/A | OK | (1143) P2-DIMME1 TEMP | 45C/113F | 2C/36F | 85C/185F | OK | (1210) P2-DIMME2 TEMP | 41C/106F | 2C/36F | 85C/185F | | (1277) P2-DIMME3 TEMP | N/A | N/A | N/A | OK | (1344) P2-DIMMF1 TEMP | 40C/104F | 2C/36F | 85C/185F | OK | (1411) P2-DIMMF2 TEMP | 37C/99F | 2C/36F | 85C/185F | | (1478) P2-DIMMF3 TEMP | N/A | N/A | N/A | OK | (1545) P2-DIMMG1 TEMP | 40C/104F | 2C/36F | 85C/185F | OK | (1612) P2-DIMMG2 TEMP | 40C/104F | 2C/36F | 85C/185F | | (1679) P2-DIMMG3 TEMP | N/A | N/A | N/A | OK | (1746) P2-DIMMH1 TEMP | 42C/108F | 2C/36F | 85C/185F | OK | (1813) P2-DIMMH2 TEMP | 36C/97F | 2C/36F | 85C/185F | | (1880) P2-DIMMH3 TEMP | N/A | N/A | N/A | OK | (1947) FAN1 | 1725 RPM | 450 RPM | 19050 RPM | OK | (2014) FAN2 | 1650 RPM | 450 RPM | 19050 RPM | OK | (2081) FAN3 | 975 RPM | 450 RPM | 19050 RPM | OK | (2148) FAN4 | 1050 RPM | 450 RPM | 19050 RPM | OK | (2215) FAN5 | 1050 RPM | 450 RPM | 19050 RPM | OK | (2282) FAN6 | 1125 RPM | 450 RPM | 19050 RPM | | (2349) FANA | N/A | N/A | N/A | | (2416) FANB | N/A | N/A | N/A | OK | (2483) VTT | 0.99 V | 0.86 V | 1.39 V | OK | (2550) CPU1 Vcore | 0.88 V | 0.51 V | 1.52 V | OK | (2617) CPU2 Vcore | 0.84 V | 0.51 V | 1.52 V | OK | (2684) VDIMM AB | 1.47 V | 1.15 V | 1.69 V | OK | (2751) VDIMM CD | 1.48 V | 1.15 V | 1.69 V | OK | (2818) VDIMM EF | 1.48 V | 1.15 V | 1.69 V | OK | (2885) VDIMM GH | 1.48 V | 1.15 V | 1.69 V | OK | (2952) +1.1 V | 1.10 V | 0.92 V | 1.26 V | OK | (3019) +1.5 V | 1.47 V | 1.29 V | 1.69 V | OK | (3086) 3.3V | 3.07 V | 2.78 V | 3.79 V | OK | (3153) +3.3VSB | 3.36 V | 2.78 V | 3.79 V | OK | (3220) 5V | 4.86 V | 4.28 V | 5.69 V | OK | (3287) +5VSB | 4.86 V | 4.28 V | 5.69 V | OK | (3354) 12V | 11.97 V | 10.49 V | 13.56 V | OK | (3421) VBAT | 3.07 V | 2.54 V | 3.45 V | | (3488) HDD Status | N/A | 2.54 | 3.45 | Fail | (3555) Chassis Intru | 01 C0 01 00 | N/A | N/A | [SlaveAddress = 70h] [Module 1] Item | Value ---- | ----- Status | On Temperature | 54C/129F Fan 1 | 572 RPM Fan 2 | 572 RPM [SlaveAddress = 78h] [Module 1] Item | Value ---- | ----- Status | OK Input Voltage | 235.0 V Input Current | 0.96 A Main Output Voltage | 12.15 V Main Output Current | 12.37 A Temperature 1 | 49C/120F Temperature 2 | 61C/142F Fan 1 | 928 RPM Fan 2 | 0 RPM Main Output Power | 189 W Input Power | 212 W PMBus Revision | 0x22 PWS Serial Number | P1K25AF01A23456 PWS Module Number | PWS-1K25P-PQ PWS Revision | 1.1 Current Sharing Control | Active - Active (00) phpsysinfo-3.4.4/sample/motherboard/ipmicfg/ipmicfg2.txt000066400000000000000000000107121467431054600234050ustar00rootroot00000000000000Status | (#)Sensor | Reading | Low Limit | High Limit ------ | --------- | ------- | --------- | ---------- OK | (4) CPU1 Temp | 44C/111F | 0C/32F | 86C/187F OK | (71) CPU2 Temp | 44C/111F | 0C/32F | 86C/187F OK | (138) System Temp | 31C/88F | -5C/23F | 80C/176F OK | (205) Peripheral Temp | 44C/111F | -5C/23F | 80C/176F OK | (272) PCH Temp | 57C/135F | -5C/23F | 90C/194F OK | (339) FAN1 | 1800 RPM | 600 RPM | 18975 RPM OK | (406) FAN2 | 1800 RPM | 600 RPM | 18975 RPM | (473) FAN3 | N/A | N/A | N/A | (540) FAN4 | N/A | N/A | N/A | (607) FAN5 | N/A | N/A | N/A | (674) FAN6 | N/A | N/A | N/A | (741) FAN7 | N/A | N/A | N/A | (808) FAN8 | N/A | N/A | N/A OK | (875) VTT | 1.05 V | 0.91 V | 1.34 V OK | (942) CPU1 Vcore | 0.89 V | 0.54 V | 1.48 V OK | (1009) CPU2 Vcore | 0.76 V | 0.54 V | 1.48 V OK | (1076) VDIMM ABCD | 1.48 V | 1.20 V | 1.64 V OK | (1143) VDIMM EFGH | 1.50 V | 1.20 V | 1.64 V OK | (1210) +1.5 V | 1.47 V | 1.34 V | 1.64 V OK | (1277) 3.3V | 3.31 V | 2.92 V | 3.64 V OK | (1344) +3.3VSB | 3.31 V | 2.92 V | 3.64 V OK | (1411) 5V | 5.05 V | 4.48 V | 5.50 V OK | (1478) 12V | 12.29 V | 10.81 V | 13.25 V OK | (1545) VBAT | 3.26 V | 2.68 V | 3.31 V OK | (1612) HDD Status | 0.00 | 2.68 | 3.31 Fail | (1679) Chassis Intru | 01 C0 01 00 | N/A | N/A OK | (1746) PS1 Status | 01 C0 01 00 | N/A | N/A [SlaveAddress = 78h] [Module 1] Item | Value ---- | ----- Status | [STATUS OK] (00h) Input Voltage | 227.8 V Input Current | 2.34 A Main Output Voltage | 12.19 V Main Output Current | 42.06 A Temperature 1 | 42C/108F Temperature 2 | 56C/133F Fan 1 | 8448 RPM Fan 2 | 9856 RPM Main Output Power | 513 W Input Power | 532 W PMBus Revision | 0x22 PWS Serial Number | P2K22CK33VB1234 PWS Module Number | PWS-2K22A-1R PWS Revision | 1.5 Current Sharing Control | Active - Active (90) [SlaveAddress = 7Ah] [Module 2] Item | Value ---- | ----- Status | [STATUS OK] (00h) Input Voltage | 227.5 V Input Current | 2.70 A Main Output Voltage | 12.21 V Main Output Current | 48.25 A Temperature 1 | 44C/111F Temperature 2 | 56C/133F Fan 1 | 8608 RPM Fan 2 | 10112 RPM Main Output Power | 589 W Input Power | 613 W PMBus Revision | 0x22 PWS Serial Number | P2K22CK33VB4578 PWS Module Number | PWS-2K22A-1R PWS Revision | 1.5 Current Sharing Control | Active - Active (90) phpsysinfo-3.4.4/sample/motherboard/ipmicfg/ipmicfg3.txt000066400000000000000000000067641467431054600234220ustar00rootroot00000000000000Status | (#)Sensor | Reading | Low Limit | High Limit | ------ | --------- | ------- | --------- | ---------- | OK | (4) CPU1 Temp | 32C/90F | 0C/32F | 70C/158F | OK | (71) CPU2 Temp | 35C/95F | 0C/32F | 70C/158F | OK | (138) System Temp | 37C/99F | -7C/19F | 85C/185F | OK | (205) Peripheral Temp | 38C/100F | -7C/19F | 85C/185F | OK | (272) PCH Temp | 49C/120F | -8C/18F | 95C/203F | OK | (339) P1-DIMMA1 TEMP | 46C/115F | 2C/36F | 85C/185F | | (406) P1-DIMMA2 TEMP | N/A | N/A | N/A | OK | (473) P1-DIMMB1 TEMP | 41C/106F | 2C/36F | 85C/185F | | (540) P1-DIMMB2 TEMP | N/A | N/A | N/A | | (607) P1-DIMMC1 TEMP | N/A | N/A | N/A | | (674) P1-DIMMC2 TEMP | N/A | N/A | N/A | | (741) P1-DIMMD1 TEMP | N/A | N/A | N/A | | (808) P1-DIMMD2 TEMP | N/A | N/A | N/A | OK | (875) P2-DIMME1 TEMP | 47C/117F | 2C/36F | 85C/185F | | (942) P2-DIMME2 TEMP | N/A | N/A | N/A | OK | (1009) P2-DIMMF1 TEMP | 46C/115F | 2C/36F | 85C/185F | | (1076) P2-DIMMF2 TEMP | N/A | N/A | N/A | | (1143) P2-DIMMG1 TEMP | N/A | N/A | N/A | | (1210) P2-DIMMG2 TEMP | N/A | N/A | N/A | | (1277) P2-DIMMH1 TEMP | N/A | N/A | N/A | | (1344) P2-DIMMH2 TEMP | N/A | N/A | N/A | OK | (1411) FAN1 | 1575 RPM | 450 RPM | 19050 RPM | OK | (1478) FAN2 | 1500 RPM | 450 RPM | 19050 RPM | OK | (1545) FAN3 | 750 RPM | 450 RPM | 19050 RPM | OK | (1612) FAN4 | 825 RPM | 450 RPM | 19050 RPM | | (1679) FAN5 | N/A | N/A | N/A | | (1746) FAN6 | N/A | N/A | N/A | OK | (1813) FAN7 | 1350 RPM | 450 RPM | 19050 RPM | OK | (1880) FAN8 | 1650 RPM | 450 RPM | 19050 RPM | OK | (1947) VTT | 1.00 V | 0.86 V | 1.39 V | OK | (2014) CPU1 Vcore | 0.81 V | 0.51 V | 1.52 V | OK | (2081) CPU2 Vcore | 0.81 V | 0.51 V | 1.52 V | OK | (2148) VDIMM AB | 1.34 V | 1.15 V | 1.69 V | OK | (2215) VDIMM CD | 1.34 V | 1.15 V | 1.69 V | OK | (2282) VDIMM EF | 1.34 V | 1.15 V | 1.69 V | OK | (2349) VDIMM GH | 1.34 V | 1.15 V | 1.69 V | OK | (2416) +1.5 V | 1.48 V | 1.29 V | 1.69 V | OK | (2483) 3.3V | 3.31 V | 2.78 V | 3.79 V | OK | (2550) +3.3VSB | 3.40 V | 2.78 V | 3.79 V | OK | (2617) 5V | 5.05 V | 4.28 V | 5.69 V | OK | (2684) 12V | 12.08 V | 10.49 V | 13.56 V | OK | (2751) VBAT | 3.16 V | 2.54 V | 3.45 V | | (2818) HDD Status | Not Present | OK | (2885) Chassis Intru | OK | OK | (2952) PS1 Status | Presence detected | phpsysinfo-3.4.4/sample/motherboard/ipmicfg/ipmicfg4.txt000066400000000000000000000201101467431054600234000ustar00rootroot00000000000000Status | (#)Sensor | Reading | Low Limit | High Limit | ------ | --------- | ------- | --------- | ---------- | | (1) SEL | N/A | OK | (2) Intrusion | OK | OK | (11) Fan1A | 1680 RPM | 720 RPM | N/A | OK | (12) Fan1B | 1560 RPM | 720 RPM | N/A | OK | (13) Fan2A | 2280 RPM | 720 RPM | N/A | OK | (14) Fan2B | 2160 RPM | 720 RPM | N/A | OK | (15) Fan3A | 2280 RPM | 720 RPM | N/A | OK | (16) Fan3B | 2160 RPM | 720 RPM | N/A | OK | (17) Fan4A | 2280 RPM | 720 RPM | N/A | OK | (18) Fan4B | 2160 RPM | 720 RPM | N/A | OK | (19) Fan5A | 2280 RPM | 720 RPM | N/A | OK | (20) Fan5B | 2160 RPM | 720 RPM | N/A | OK | (21) Inlet Temp | 17C/63F | -7C/19F | 47C/117F | | (22) OS Watchdog | N/A | OK | (23) VCORE PG | State Deasserted | OK | (24) 3.3V PG | State Deasserted | OK | (25) 5V PG | State Deasserted | | (26) USB Cable Pres | Cable or Interconnect is connected | | (27) Dedicated NIC | Entity Absent | | (28) VGA Cable Pres | Cable or Interconnect is connected | | (29) Presence | Entity Present | | (30) Presence | Entity Present | OK | (31) PLL PG | State Deasserted | OK | (32) 1.1V PG | State Deasserted | OK | (33) BP1 5V PG | State Deasserted | | (34) Presence | Entity Present | OK | (35) VSA PG | State Deasserted | OK | (36) MEM VDDQ PG | State Deasserted | | (37) LCD Cable Pres | Cable or Interconnect is connected | OK | (38) VTT PG | State Deasserted | | (39) Presence | Entity Absent | OK | (40) Status | Processor presence detected | | (41) Fan Redundancy | N/A | N/A | N/A | | (44) Riser Config Err | Cable or Interconnect is connected | OK | (45) 1.5V PG | State Deasserted | OK | (46) PS2 PG Fail | State Deasserted | OK | (47) PS1 PG Fail | State Deasserted | OK | (48) MEM VTT PG | State Deasserted | | (49) Presence | Entity Present | | (50) PCIe Slot1 | N/A | | (51) PCIe Slot2 | N/A | | (52) PCIe Slot3 | N/A | | (53) PCIe Slot4 | N/A | OK | (54) A | Presence detected | OK | (57) vFlash | 00 C0 00 80 | N/A | N/A | | (58) CMOS Battery | N/A | | (59) Presence | Entity Present | OK | (60) Current 1 | 0.20 Amps | N/A | N/A | OK | (61) Current 2 | 0.20 Amps | N/A | N/A | OK | (62) Voltage 1 | 240.00 V | N/A | N/A | OK | (63) Voltage 2 | 240.00 V | N/A | N/A | OK | (64) PS Redundancy | 04 E0 00 00 | N/A | N/A | OK | (65) Status | Presence detected | OK | (66) Status | Presence detected | OK | (67) Pwr Consumption | 70 Watts | N/A | 1456 Watts | | (68) Power Optimized | failure | | (69) SD1 | N/A | | (70) SD2 | N/A | | (71) Redundancy | N/A | N/A | N/A | | (72) ECC Corr Err | N/A | | (73) ECC Uncorr Err | N/A | | (74) I/O Channel Chk | N/A | | (75) PCI Parity Err | Bus Correctable Error | | (76) PCI System Err | N/A | | (77) SBE Log Disabled | N/A | | (78) Logging Disabled | N/A | | (79) Unknown | N/A | OK | (80) CPU Protocol Err | N/A | N/A | N/A | OK | (81) CPU Bus PERR | N/A | N/A | N/A | OK | (82) CPU Init Err | N/A | N/A | N/A | OK | (83) CPU Machine Chk | N/A | N/A | N/A | | (84) Memory Spared | N/A | N/A | N/A | | (85) Memory Mirrored | N/A | N/A | N/A | | (86) Memory RAID | N/A | N/A | N/A | Fail | (87) Memory Added | Correctable ECC / other correctable memory error | | (88) Memory Removed | N/A | | (89) Memory Cfg Err | N/A | | (90) Mem Redun Gain | N/A | N/A | N/A | | (91) PCIE Fatal Err | N/A | | (92) Chipset Err | Front Panel NMI / Diagnostic Interrupt | | (93) Err Reg Pointer | N/A | N/A | N/A | | (94) Mem ECC Warning | N/A | N/A | N/A | | (95) Mem CRC Err | N/A | N/A | N/A | | (96) USB Over-current | N/A | N/A | N/A | | (97) POST Err | System Firmware Error (POST Error) - Unspecified | | (98) Hdwr version err | N/A | Fail | (99) Mem Overtemp | Correctable ECC / other correctable memory error | | (100) Mem Fatal SB CRC | N/A | | (101) Mem Fatal NB CRC | N/A | | (102) OS Watchdog Time | N/A | | (103) Non Fatal PCI Er | N/A | Fail | (104) Fatal IO Error | Correctable ECC / other correctable memory error | Fail | (105) MSR Info Log | Correctable ECC / other correctable memory error | OK | (106) Drive 0 | Drive Presence | | (107) Cable SAS A | Cable or Interconnect is connected | | (108) Cable SAS B | N/A | | (109) Cable SAS C | N/A | | (110) Cable SAS D | N/A | | (111) Power Cable | Cable or Interconnect is connected | | (112) Signal Cable | Cable or Interconnect is connected | | (113) PFault Fail Safe | N/A | | (114) ROMB Battery | N/A | | (115) ROMB Battery | N/A | | (116) Riser 1 Presence | Cable or Interconnect is connected | | (117) Riser 2 Presence | Cable or Interconnect is connected | OK | (119) Temp | 46C/115F | 3C/37F | 97C/207F | phpsysinfo-3.4.4/sample/motherboard/ipmitool/000077500000000000000000000000001467431054600213615ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/motherboard/ipmitool/ipmitool1.txt000066400000000000000000000174011467431054600240420ustar00rootroot00000000000000BB +1.2V Vtt | 1.197 | Volts | ok | na | 1.096 | 1.134 | 1.285 | 1.323 | na BB +1.5V AUX | 1.490 | Volts | ok | na | 1.334 | 1.373 | 1.622 | 1.669 | na BB +1.5V | 1.469 | Volts | ok | na | 1.326 | 1.365 | 1.625 | 1.677 | na BB +1.8V | 1.802 | Volts | ok | na | 1.638 | 1.689 | 1.926 | 1.988 | na BB +3.3V | 3.320 | Volts | ok | na | 2.941 | 3.027 | 3.578 | 3.681 | na BB +3.3V STB | 3.337 | Volts | ok | na | 3.027 | 3.113 | 3.509 | 3.612 | na BB +1.5V ESB | 1.490 | Volts | ok | na | 1.357 | 1.404 | 1.591 | 1.638 | na BB +5V | 5.122 | Volts | ok | na | 4.446 | 4.576 | 5.408 | 5.564 | na BB +12V AUX | 12.090 | Volts | ok | na | 10.416 | 10.726 | 13.144 | 13.578 | na BB 0.9V | 0.902 | Volts | ok | na | 0.811 | 0.835 | 0.950 | 0.979 | na Baseboard Temp | 29.000 | degrees C | ok | na | 5.000 | 10.000 | 61.000 | 66.000 | na P1 Therm Margin | -32.000 | degrees C | ok | na | na | na | na | na | na P1 Therm Ctrl % | 0.000 | unspecified | ok | na | na | na | na | 49.530 | na Proc 1 Vcc | 1.203 | Volts | ok | na | na | na | na | na | na Power Unit | 0x0 | discrete | 0x0000| na | na | na | na | na | na BMC Watchdog | 0x0 | discrete | 0x0000| na | na | na | na | na | na Scrty Violation | 0x0 | discrete | 0x0000| na | na | na | na | na | na F-P Diag Int | 0x0 | discrete | 0x0000| na | na | na | na | na | na System Event Log | 0x0 | discrete | 0x0000| na | na | na | na | na | na Session Audit | 0x0 | discrete | 0x0000| na | na | na | na | na | na System Event | 0x0 | discrete | 0x0000| na | na | na | na | na | na BB Vbat | 0x0 | discrete | 0x0000| na | na | na | na | na | na SysACPIPowerStat | 0x0 | discrete | 0x0100| na | na | na | na | na | na Button | 0x0 | discrete | 0x0000| na | na | na | na | na | na SMI Timeout | 0x0 | discrete | 0x0100| na | na | na | na | na | na NMI State | 0x0 | discrete | 0x0100| na | na | na | na | na | na SMI State | 0x0 | discrete | 0x0100| na | na | na | na | na | na Processor 1 Stat | 0x0 | discrete | 0x8000| na | na | na | na | na | na Processor 2 Stat | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link0 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link1 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link2 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link3 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link4 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link5 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link6 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link7 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link8 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link9 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link10 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link11 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link12 | 0x0 | discrete | 0x0000| na | na | na | na | na | na PCIe Link13 | 0x0 | discrete | 0x0000| na | na | na | na | na | na Proc1 VRD Hot | 0x0 | discrete | 0x0000| na | na | na | na | na | na CPU1 Vcc OOR | 0x0 | discrete | 0x0000| na | na | na | na | na | na CPU Popula Error | 0x0 | discrete | 0x0000| na | na | na | na | na | na DIMM A1 | 0x0 | discrete | 0x0400| na | na | na | na | na | na DIMM A2 | 0x0 | discrete | 0x0000| na | na | na | na | na | na DIMM B1 | 0x0 | discrete | 0x0400| na | na | na | na | na | na DIMM B2 | 0x0 | discrete | 0x0000| na | na | na | na | na | na DIMM C1 | 0x0 | discrete | 0x0000| na | na | na | na | na | na DIMM C2 | 0x0 | discrete | 0x0000| na | na | na | na | na | na DIMM D1 | 0x0 | discrete | 0x0000| na | na | na | na | na | na DIMM D2 | 0x0 | discrete | 0x0000| na | na | na | na | na | na MemA Error | 0x0 | discrete | 0x0000| na | na | na | na | na | na MemB Error | 0x0 | discrete | 0x0000| na | na | na | na | na | na MemC Error | 0x0 | discrete | 0x0000| na | na | na | na | na | na MemD Error | 0x0 | discrete | 0x0000| na | na | na | na | na | na B0 Sparing Enb | na | discrete | na | na | na | na | na | na | na B0 Spare Redun | na | discrete | na | na | na | na | na | na | na B1 Sparing Enb | na | discrete | na | na | na | na | na | na | na B1 Spare Redun | na | discrete | na | na | na | na | na | na | na B01 Mirror Enbl | na | discrete | na | na | na | na | na | na | na B01 MirrorRedun | na | discrete | na | na | na | na | na | na | na phpsysinfo-3.4.4/sample/motherboard/ipmitool/ipmitool2.txt000066400000000000000000000254151467431054600240470ustar00rootroot00000000000000Sensor ID : BIOS (0x0) Entity ID : 0.0 Sensor Type (Discrete): System Firmwares Unable to read sensor: Device Not Present Sensor ID : ACPI State (0x20) Entity ID : 0.0 Sensor Type (Discrete): System ACPI Power State States Asserted : System ACPI Power State [S0/G0: working] Sensor ID : System Reset (0x21) Entity ID : 0.0 Sensor Type (Discrete): Module / Board Sensor ID : CPU Fan (0x31) Entity ID : 0.0 Sensor Type (Threshold) : Fan Sensor Reading : 2085.941 (+/- inf) RPM Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 771.962 Upper Non-Recoverable : na Positive Hysteresis : 39215.686 Negative Hysteresis : 39215.686 Assertion Events : Assertions Enabled : ucr+ Deassertions Enabled : ucr+ Sensor ID : Rear Fan (0x34) Entity ID : 0.0 Sensor Type (Threshold) : Fan Sensor Reading : 1463.272 (+/- inf) RPM Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 771.962 Upper Non-Recoverable : na Positive Hysteresis : 39215.686 Negative Hysteresis : 39215.686 Assertion Events : Assertions Enabled : ucr+ Deassertions Enabled : ucr+ Sensor ID : System 12V (0x41) Entity ID : 0.0 Sensor Type (Threshold) : Voltage Sensor Reading : 11.928 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : 10.024 Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 13.160 Upper Non-Recoverable : na Positive Hysteresis : 0.280 Negative Hysteresis : 0.280 Assertion Events : Assertions Enabled : lcr- ucr+ Deassertions Enabled : lcr- ucr+ Sensor ID : System 5V (0x36) Entity ID : 0.0 Sensor Type (Threshold) : Voltage Sensor Reading : 5.054 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : 4.750 Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 5.242 Upper Non-Recoverable : na Positive Hysteresis : Unspecified Negative Hysteresis : Unspecified Assertion Events : Assertions Enabled : lcr- ucr+ Deassertions Enabled : lcr- ucr+ Sensor ID : System AUX 5V (0x37) Entity ID : 0.0 Sensor Type (Threshold) : Voltage Sensor Reading : 4.937 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : 4.750 Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 5.242 Upper Non-Recoverable : na Positive Hysteresis : Unspecified Negative Hysteresis : Unspecified Assertion Events : Assertions Enabled : lcr- ucr+ Deassertions Enabled : lcr- ucr+ Sensor ID : System 3.3V (0x38) Entity ID : 0.0 Sensor Type (Threshold) : Voltage Sensor Reading : 3.219 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : 3.142 Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 3.465 Upper Non-Recoverable : na Positive Hysteresis : Unspecified Negative Hysteresis : Unspecified Assertion Events : Assertions Enabled : lcr- ucr+ Deassertions Enabled : lcr- ucr+ Sensor ID : System AUX 3.3V (0x39) Entity ID : 0.0 Sensor Type (Threshold) : Voltage Sensor Reading : 3.311 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : 3.142 Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 3.465 Upper Non-Recoverable : na Positive Hysteresis : Unspecified Negative Hysteresis : Unspecified Assertion Events : Assertions Enabled : lcr- ucr+ Deassertions Enabled : lcr- ucr+ Sensor ID : CPU Vcore (0x3a) Entity ID : 0.0 Sensor Type (Threshold) : Voltage Sensor Reading : 1.284 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : 0.843 Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 1.607 Upper Non-Recoverable : na Positive Hysteresis : Unspecified Negative Hysteresis : Unspecified Assertion Events : Assertions Enabled : lcr- ucr+ Deassertions Enabled : lcr- ucr+ Sensor ID : CPU Vterm (0x3c) Entity ID : 0.0 Sensor Type (Threshold) : Voltage Sensor Reading : 1.196 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : 1.147 Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 1.264 Upper Non-Recoverable : na Positive Hysteresis : Unspecified Negative Hysteresis : Unspecified Assertion Events : Assertions Enabled : lcr- ucr+ Deassertions Enabled : lcr- ucr+ Sensor ID : Memory Vcore (0x3d) Entity ID : 0.0 Sensor Type (Threshold) : Voltage Sensor Reading : 1.784 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : 1.705 Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 1.911 Upper Non-Recoverable : na Positive Hysteresis : Unspecified Negative Hysteresis : Unspecified Assertion Events : Assertions Enabled : lcr- ucr+ Deassertions Enabled : lcr- ucr+ Sensor ID : Memory Vterm (0x3e) Entity ID : 0.0 Sensor Type (Threshold) : Voltage Sensor Reading : 0.882 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : 0.853 Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 0.941 Upper Non-Recoverable : na Positive Hysteresis : Unspecified Negative Hysteresis : Unspecified Assertion Events : Assertions Enabled : lcr- ucr+ Deassertions Enabled : lcr- ucr+ Sensor ID : AMB/MCH Vcore (0x3f) Entity ID : 0.0 Sensor Type (Threshold) : Voltage Sensor Reading : 1.499 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : 1.431 Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 1.578 Upper Non-Recoverable : na Positive Hysteresis : Unspecified Negative Hysteresis : Unspecified Assertion Events : Assertions Enabled : lcr- ucr+ Deassertions Enabled : lcr- ucr+ Sensor ID : PCI System Err (0x42) Entity ID : 0.0 Sensor Type (Discrete): Module / Board Unable to read sensor: Device Not Present Sensor ID : Mem Recover Err (0x44) Entity ID : 0.0 Sensor Type (Discrete): Memory Unable to read sensor: Device Not Present Sensor ID : MemUnrecover Er (0x45) Entity ID : 0.0 Sensor Type (Discrete): Memory Unable to read sensor: Device Not Present Sensor ID : RCPU Diode 1 (0x46) Entity ID : 0.0 Sensor Type (Threshold) : Temperature Sensor Reading : Unable to read sensor: Device Not Present Event Status : Unavailable Assertions Enabled : ucr+ Deassertions Enabled : ucr+ Sensor ID : Ambient (0x47) Entity ID : 0.0 Sensor Type (Threshold) : Temperature Sensor Reading : 26 (+/- 0) degrees C Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 51.000 Upper Non-Recoverable : na Positive Hysteresis : Unspecified Negative Hysteresis : Unspecified Assertion Events : Assertions Enabled : ucr+ Deassertions Enabled : ucr+ Sensor ID : Local VRD0 Temp (0x48) Entity ID : 0.0 Sensor Type (Threshold) : Temperature Sensor Reading : 27 (+/- 0) degrees C Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : na Upper Non-Recoverable : na Positive Hysteresis : Unspecified Negative Hysteresis : Unspecified Assertion Events : Assertions Enabled : Sensor ID : CPU Dmn 0 Temp (0x86) Entity ID : 0.0 Sensor Type (Threshold) : Temperature Sensor Reading : 54 (+/- 0) degrees C Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 85.000 Upper Non-Recoverable : na Positive Hysteresis : Unspecified Negative Hysteresis : Unspecified Assertion Events : Assertions Enabled : ucr+ Deassertions Enabled : ucr- Sensor ID : Slots Amb (0x4d) Entity ID : 0.0 Sensor Type (Threshold) : Temperature Sensor Reading : 33 (+/- 0) degrees C Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 85.000 Upper Non-Recoverable : na Positive Hysteresis : Unspecified Negative Hysteresis : Unspecified Assertion Events : Assertions Enabled : ucr+ Deassertions Enabled : ucr- Sensor ID : 1.8V Amb (0x4e) Entity ID : 0.0 Sensor Type (Threshold) : Temperature Sensor Reading : 46 (+/- 0) degrees C Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 85.000 Upper Non-Recoverable : na Positive Hysteresis : Unspecified Negative Hysteresis : Unspecified Assertion Events : Assertions Enabled : ucr+ Deassertions Enabled : ucr- Sensor ID : Therm-Trip (0x55) Entity ID : 0.0 Sensor Type (Discrete): Processor States Asserted : Digital State [State Deasserted] Sensor ID : CPU Prochot (0x59) Entity ID : 0.0 Sensor Type (Discrete): Temperature States Asserted : Digital State [Limit Not Exceeded] Sensor ID : LOM Link Status (0x5d) Entity ID : 0.0 Sensor Type (Discrete): LAN States Asserted : Digital State [State Asserted] Sensor ID : LO100 Present (0x5e) Entity ID : 0.0 Sensor Type (Discrete): Add-in Card States Asserted : Availability State [Device Absent] Sensor ID : Watchdog (0xfe) Entity ID : 0.0 Sensor Type (Discrete): Watchdog2 Unable to read sensor: Device Not Present phpsysinfo-3.4.4/sample/motherboard/ipmitool/ipmitool3.txt000066400000000000000000000250701467431054600240450ustar00rootroot00000000000000Sensor ID : OS Boot Status (0x0) Entity ID : 34.0 Sensor Type (Discrete): OS Boot Unable to read sensor: Device Not Present Sensor ID : POST Error (0x1) Entity ID : 34.1 Sensor Type (Discrete): System Firmwares Unable to read sensor: Device Not Present Sensor ID : Memory ECC (0x2) Entity ID : 34.2 Sensor Type (Discrete): Memory Unable to read sensor: Device Not Present Sensor ID : DIMM1C ECC (0xe0) Entity ID : 34.16 Sensor Type (Discrete): Memory Unable to read sensor: Device Not Present Sensor ID : DIMM2A ECC (0xe1) Entity ID : 34.17 Sensor Type (Discrete): Memory Unable to read sensor: Device Not Present Sensor ID : DIMM3D ECC (0xe2) Entity ID : 34.18 Sensor Type (Discrete): Memory Unable to read sensor: Device Not Present Sensor ID : DIMM4B ECC (0xe3) Entity ID : 34.19 Sensor Type (Discrete): Memory Unable to read sensor: Device Not Present Sensor ID : PCI-E Error (0x3) Entity ID : 34.3 Sensor Type (Discrete): Critical Interrupt Unable to read sensor: Device Not Present Sensor ID : NMI (0x4) Entity ID : 34.4 Sensor Type (Discrete): Critical Interrupt Unable to read sensor: Device Not Present Sensor ID : Therm-Trip0 (0xfc) Entity ID : 3.113 Sensor Type (Discrete): Processor States Asserted : Digital State [State Deasserted] Sensor ID : CPU Prochot (0x26) Entity ID : 3.3 Sensor Type (Discrete): Processor Sensor ID : CPU0 Vcore (0x82) Entity ID : 3.5 Sensor Type (Analog) : Voltage Sensor Reading : 0.911 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : na Upper Non-Recoverable : na Event Status : Event Messages Disabled Assertion Events : Event Enable : Event Messages Disabled Assertions Enabled : unc- Sensor ID : System VTT (0x83) Entity ID : 3.6 Sensor Type (Analog) : Voltage Sensor Reading : 1.137 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : na Upper Non-Recoverable : na Event Status : Event Messages Disabled Assertion Events : Event Enable : Event Messages Disabled Assertions Enabled : unc- Sensor ID : CPU Socket Occup (0x1f) Entity ID : 3.9 Sensor Type (Discrete): Processor Sensor ID : System 12V (0x8e) Entity ID : 7.1 Sensor Type (Analog) : Voltage Sensor Reading : 12.040 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : na Upper Non-Recoverable : na Event Status : Event Messages Disabled Assertion Events : Event Enable : Event Messages Disabled Assertions Enabled : unc- Sensor ID : System 5V (0x7e) Entity ID : 7.2 Sensor Type (Analog) : Voltage Sensor Reading : 5.195 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : na Upper Non-Recoverable : na Event Status : Event Messages Disabled Assertion Events : Event Enable : Event Messages Disabled Assertions Enabled : unc- Sensor ID : Standby 5V (0x7f) Entity ID : 7.3 Sensor Type (Analog) : Voltage Sensor Reading : 5.078 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : na Upper Non-Recoverable : na Event Status : Event Messages Disabled Assertion Events : Event Enable : Event Messages Disabled Assertions Enabled : unc- Sensor ID : System 3.3V (0x80) Entity ID : 7.4 Sensor Type (Analog) : Voltage Sensor Reading : 3.379 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : na Upper Non-Recoverable : na Event Status : Event Messages Disabled Assertion Events : Event Enable : Event Messages Disabled Assertions Enabled : unc- Sensor ID : Standby 3.3V (0x81) Entity ID : 7.5 Sensor Type (Analog) : Voltage Sensor Reading : 3.255 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : na Upper Non-Recoverable : na Event Status : Event Messages Disabled Assertion Events : Event Enable : Event Messages Disabled Assertions Enabled : unc- Sensor ID : DDR3 1.5V (0x84) Entity ID : 8.1 Sensor Type (Analog) : Voltage Sensor Reading : 1.539 (+/- 0) Volts Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : na Upper Non-Recoverable : na Event Status : Event Messages Disabled Assertion Events : Event Enable : Event Messages Disabled Assertions Enabled : unc- Sensor ID : REAR FAN (0x10) Entity ID : 29.1 Sensor Type (Analog) : Fan Sensor Reading : 2447.022 (+/- inf) RPM Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 959.233 Upper Non-Recoverable : na Assertion Events : Assertions Enabled : ucr+ Deassertions Enabled : ucr+ Sensor ID : CPU FAN (0x12) Entity ID : 29.2 Sensor Type (Analog) : Fan Sensor Reading : 2220.446 (+/- inf) RPM Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 1303.305 Upper Non-Recoverable : na Assertion Events : Assertions Enabled : ucr+ Deassertions Enabled : ucr+ Sensor ID : SYS Ambient Temp (0xf) Entity ID : 64.1 Sensor Type (Analog) : Temperature Sensor Reading : 23 (+/- 0) degrees C Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : 40.000 Upper Critical : 42.000 Upper Non-Recoverable : 46.000 Assertion Events : Assertions Enabled : ucr+ unr+ Deassertions Enabled : ucr+ unr+ Sensor ID : CPU0 Dmn0 Temp (0x97) Entity ID : 65.1 Sensor Type (Analog) : Temperature Sensor Reading : 30 (+/- 0) degrees C Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 84.000 Upper Non-Recoverable : 127.000 Assertion Events : Assertions Enabled : ucr+ unr+ Deassertions Enabled : ucr+ unr+ Sensor ID : CPU0 Dmn1 Temp (0x98) Entity ID : 65.2 Sensor Type (Analog) : Temperature Sensor Reading : Unable to read sensor: Device Not Present Event Status : Unavailable Assertions Enabled : ucr+ unr+ Deassertions Enabled : ucr+ unr+ Sensor ID : DDR Ambient Temp (0xd) Entity ID : 66.1 Sensor Type (Analog) : Temperature Sensor Reading : 41 (+/- 0) degrees C Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 72.500 Upper Non-Recoverable : 77.500 Assertion Events : Assertions Enabled : ucr+ unr+ Deassertions Enabled : ucr+ unr+ Sensor ID : PCI Ambient Temp (0xe) Entity ID : 66.2 Sensor Type (Analog) : Temperature Sensor Reading : 36 (+/- 0) degrees C Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 66.000 Upper Non-Recoverable : 71.000 Assertion Events : Assertions Enabled : ucr+ unr+ Deassertions Enabled : ucr+ unr+ Sensor ID : DIMM2A Temp (0x91) Entity ID : 66.4 Sensor Type (Analog) : Temperature Sensor Reading : 29.500 (+/- 0) degrees C Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 87.000 Upper Non-Recoverable : na Assertion Events : Assertions Enabled : ucr+ Deassertions Enabled : ucr+ Sensor ID : DIMM1C Temp (0x92) Entity ID : 66.5 Sensor Type (Analog) : Temperature Sensor Reading : Unable to read sensor: Device Not Present Event Status : Unavailable Assertions Enabled : ucr+ Deassertions Enabled : ucr+ Sensor ID : DIMM4B Temp (0x93) Entity ID : 66.6 Sensor Type (Analog) : Temperature Sensor Reading : 30.500 (+/- 0) degrees C Status : ok Lower Non-Recoverable : na Lower Critical : na Lower Non-Critical : na Upper Non-Critical : na Upper Critical : 87.000 Upper Non-Recoverable : na Assertion Events : Assertions Enabled : ucr+ Deassertions Enabled : ucr+ Sensor ID : DIMM3D Temp (0x94) Entity ID : 66.7 Sensor Type (Analog) : Temperature Sensor Reading : Unable to read sensor: Device Not Present Event Status : Unavailable Assertions Enabled : ucr+ Deassertions Enabled : ucr+ Sensor ID : Watchdog (0xfe) Entity ID : 46.126 Sensor Type (Discrete): Watchdog Sensor ID : Chassis (0xfd) Entity ID : 23.1 Sensor Type (Discrete): Chassis States Asserted : Digital State [State Deasserted] Sensor ID : ACPI State (0xfc) Entity ID : 34.1 Sensor Type (Discrete): System ACPI Power State States Asserted : System ACPI Power State [S0/G0: working] phpsysinfo-3.4.4/sample/motherboard/ipmiutil/000077500000000000000000000000001467431054600213615ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/motherboard/ipmiutil/ipmiutil1.txt000066400000000000000000000411531467431054600240430ustar00rootroot00000000000000ipmiutil ver 2.93 isensor: version 2.93 -- BMC version 2.40, IPMI version 2.0 ID | SDRType | Type |SNum| Name |Status| Reading 0001 | Compact | Event Log | 72 | SEL | Absent | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 0002 | Compact | Platform Securi | 73 | Intrusion | OK | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 000b | Full | Fan | 30 | Fan1A | OK | 1680.00 RPM | Thresholds| lo-noncr 840.00 | lo-crit 720.00 | Mon May 15 08:34:34 2014 000c | Full | Fan | 31 | Fan1B | OK | 1560.00 RPM | Thresholds| lo-noncr 840.00 | lo-crit 720.00 | Mon May 15 08:34:34 2014 000d | Full | Fan | 32 | Fan2A | OK | 3120.00 RPM | Thresholds| lo-noncr 840.00 | lo-crit 720.00 | Mon May 15 08:34:34 2014 000e | Full | Fan | 33 | Fan2B | OK | 2880.00 RPM | Thresholds| lo-noncr 840.00 | lo-crit 720.00 | Mon May 15 08:34:34 2014 000f | Full | Fan | 34 | Fan3A | OK | 3000.00 RPM | Thresholds| lo-noncr 840.00 | lo-crit 720.00 | Mon May 15 08:34:34 2014 0010 | Full | Fan | 35 | Fan3B | OK | 2880.00 RPM | Thresholds| lo-noncr 840.00 | lo-crit 720.00 | Mon May 15 08:34:34 2014 0011 | Full | Fan | 36 | Fan4A | OK | 2280.00 RPM | Thresholds| lo-noncr 840.00 | lo-crit 720.00 | Mon May 15 08:34:34 2014 0012 | Full | Fan | 37 | Fan4B | OK | 2160.00 RPM | Thresholds| lo-noncr 840.00 | lo-crit 720.00 | Mon May 15 08:34:34 2014 0013 | Full | Fan | 38 | Fan5A | OK | 2280.00 RPM | Thresholds| lo-noncr 840.00 | lo-crit 720.00 | Mon May 15 08:34:34 2014 0014 | Full | Fan | 39 | Fan5B | OK | 2160.00 RPM | Thresholds| lo-noncr 840.00 | lo-crit 720.00 | Mon May 15 08:34:34 2014 0015 | Full | Temperature | 04 | Inlet Temp | OK | 21.00 C | Thresholds| hi-crit 47.00 | hi-noncr 42.00 | lo-noncr 3.00 | lo-crit -7.00 | Mon May 15 08:34:34 2014 0016 | Compact | Watchdog_2 | 71 | OS Watchdog | OK | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 0017 | Compact | Voltage | 23 | VCORE PG | OK | | Entity ID 3.1 (Processor), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 0018 | Compact | Voltage | 19 | 3.3V PG | OK | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 0019 | Compact | Voltage | 1a | 5V PG | OK | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 001a | Compact | Cable/Interconn | 50 | USB Cable Pres | _ | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 001b | Compact | Entity Presence | 70 | Dedicated NIC | Present | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 001c | Compact | Cable/Interconn | 51 | VGA Cable Pres | _ | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 001d | Compact | Entity Presence | 49 | Presence | OK* | | Entity ID 11.2 (Add-in card), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 001e | Compact | Entity Presence | 40 | Presence | OK* | | Entity ID 3.1 (Processor), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 001f | Compact | Voltage | 25 | PLL PG | OK | | Entity ID 3.1 (Processor), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 0020 | Compact | Voltage | 27 | 1.1V PG | OK | | Entity ID 0.1 (unspecified), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 0021 | Compact | Voltage | f6 | BP1 5V PG | OK | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 0022 | Compact | Entity Presence | 43 | Presence | OK* | | Entity ID 10.2 (Power supply), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 0023 | Compact | Voltage | 2b | VSA PG | OK | | Entity ID 3.1 (Processor), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 0024 | Compact | Voltage | 1e | MEM VDDQ PG | OK | | Entity ID 3.1 (Processor), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 0025 | Compact | Cable/Interconn | 4c | LCD Cable Pres | _ | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 0026 | Compact | Voltage | 20 | VTT PG | OK | | Entity ID 3.1 (Processor), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 0027 | Compact | Entity Presence | 48 | Presence | Present | | Entity ID 11.3 (Add-in card), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 0028 | Compact | Processor | 60 | Status | ProcPresent | | Entity ID 3.1 (Processor), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:34 2014 0029 | Compact | Fan | 75 | Fan Redundancy | Redundant | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 002c | Compact | Cable/Interconn | 64 | Riser Config Err | _ | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 002d | Compact | Voltage | 28 | 1.5V PG | OK | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 002e | Compact | Voltage | 2c | PS2 PG Fail | OK | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 002f | Compact | Voltage | 2d | PS1 PG Fail | OK | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0030 | Compact | Voltage | 14 | MEM VTT PG | OK | | Entity ID 3.1 (Processor), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0031 | Compact | Entity Presence | 42 | Presence | OK* | | Entity ID 10.1 (Power supply), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0032 | Compact | Critical Interr | 90 | PCIe Slot1 | OK | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0033 | Compact | Critical Interr | 91 | PCIe Slot2 | OK | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0034 | Compact | Critical Interr | 92 | PCIe Slot3 | OK | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0035 | Compact | Critical Interr | 93 | PCIe Slot4 | OK | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0036 | Compact | Memory | c0 | A | OK | | Entity ID 32.1 (Memory device ), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0039 | Compact | Board | fa | vFlash | OK | | Entity ID 12.1 (Front panel bd), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 003a | Compact | Battery | 65 | CMOS Battery | OK | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 003b | Compact | Entity Presence | 54 | Presence | OK* | | Entity ID 26.1 (Disk Drive Bay), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 003c | Full | Current | 6a | Current 1 | OK | 0.20 A | Thresholds | Mon May 15 08:34:35 2014 003d | Full | Current | 6b | Current 2 | OK | 0.20 A | Thresholds | Mon May 15 08:34:35 2014 003e | Full | Voltage | 6c | Voltage 1 | OK | 228.00 V | Thresholds | Mon May 15 08:34:35 2014 003f | Full | Voltage | 6d | Voltage 2 | OK | 228.00 V | Thresholds | Mon May 15 08:34:35 2014 0040 | Compact | Power Supply | 74 | PS Redundancy | NotAvailable | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0041 | Compact | Power Supply | 62 | Status | Present | | Entity ID 10.1 (Power supply), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0042 | Compact | Power Supply | 63 | Status | Present | | Entity ID 10.2 (Power supply), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0043 | Full | Current | 77 | Pwr Consumption | OK | 84.00 W | Thresholds| hi-crit 1456.00 | hi-noncr 1330.00 | Mon May 15 08:34:35 2014 0044 | Compact | OEM(c0) | 76 | Power Optimized | Asserted | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0045 | Compact | OEM(c9) | f4 | SD1 | _ | | Entity ID 11.3 (Add-in card), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0046 | Compact | OEM(c9) | f5 | SD2 | _ | | Entity ID 11.3 (Add-in card), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0047 | Compact | OEM(c9) | 78 | Redundancy | _ | | Entity ID 11.3 (Add-in card), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0048 | Compact | Memory | 01 | ECC Corr Err | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0049 | Compact | Memory | 02 | ECC Uncorr Err | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 004a | Compact | Critical Interr | 03 | I/O Channel Chk | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 004b | Compact | Critical Interr | 04 | PCI Parity Err | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 004c | Compact | Critical Interr | 05 | PCI System Err | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 004d | Compact | Event Log | 06 | SBE Log Disabled | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 004e | Compact | Event Log | 07 | Logging Disabled | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 004f | Compact | System Event | 08 | Unknown | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0050 | Compact | Processor | 0a | CPU Protocol Err | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0051 | Compact | Processor | 0b | CPU Bus PERR | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0052 | Compact | Processor | 0c | CPU Init Err | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0053 | Compact | Processor | 0d | CPU Machine Chk | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0054 | Compact | Memory | 11 | Memory Spared | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0055 | Compact | Memory | 12 | Memory Mirrored | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0056 | Compact | Memory | 13 | Memory RAID | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0057 | Compact | Memory | 14 | Memory Added | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0058 | Compact | Memory | 15 | Memory Removed | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 0059 | Compact | Memory | 16 | Memory Cfg Err | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 005a | Compact | Memory | 17 | Mem Redun Gain | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:35 2014 005b | Compact | Critical Interr | 18 | PCIE Fatal Err | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 005c | Compact | Critical Interr | 19 | Chipset Err | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 005d | Compact | OEM(c1) | 1a | Err Reg Pointer | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 005e | Compact | Memory | 1b | Mem ECC Warning | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 005f | Compact | Memory | 1c | Mem CRC Err | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0060 | Compact | Memory | 1d | USB Over-current | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0061 | Compact | System Firmware | 1e | POST Err | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0062 | Compact | Version Change | 1f | Hdwr version err | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0063 | Compact | Memory | 20 | Mem Overtemp | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0064 | Compact | Memory | 21 | Mem Fatal SB CRC | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0065 | Compact | Memory | 22 | Mem Fatal NB CRC | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0066 | Compact | Watchdog_1 | 71 | OS Watchdog Time | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0067 | Compact | Memory | 26 | Non Fatal PCI Er | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0068 | Compact | Memory | 27 | Fatal IO Error | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0069 | Compact | Memory | 28 | MSR Info Log | Unknown | | Entity ID 34.1 (BIOS), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 006a | Compact | Drive Slot | a0 | Drive 0 | Unused Faulty | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 006b | Compact | Cable/Interconn | e0 | Cable SAS A | _ | | Entity ID 26.1 (Disk Drive Bay), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 006c | Compact | Cable/Interconn | e1 | Cable SAS B | _ | | Entity ID 26.1 (Disk Drive Bay), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 006d | Compact | Cable/Interconn | e2 | Cable SAS C | _ | | Entity ID 26.1 (Disk Drive Bay), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 006e | Compact | Cable/Interconn | e3 | Cable SAS D | _ | | Entity ID 26.1 (Disk Drive Bay), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 006f | Compact | Cable/Interconn | 58 | Power Cable | _ | | Entity ID 26.1 (Disk Drive Bay), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0070 | Compact | Cable/Interconn | 59 | Signal Cable | _ | | Entity ID 26.1 (Disk Drive Bay), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0071 | Compact | Voltage | 66 | PFault Fail Safe | Absent | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0072 | Compact | Battery | 68 | ROMB Battery | OK | | Entity ID 11.2 (Add-in card), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0073 | Compact | Battery | 69 | ROMB Battery | OK | | Entity ID 11.4 (Add-in card), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0074 | Compact | Cable/Interconn | 4d | Riser 1 Presence | _ | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0075 | Compact | Cable/Interconn | 4e | Riser 2 Presence | _ | | Entity ID 7.1 (System board), Capab: arm=auto thr=none evts=state | Mon May 15 08:34:36 2014 0077 | Full | Temperature | 0e | Temp | OK | 66.00 C | Thresholds| hi-crit 83.00 | hi-noncr 77.00 | lo-noncr 8.00 | lo-crit 3.00 | Mon May 15 08:34:36 2014 ipmiutil sensor, completed successfully phpsysinfo-3.4.4/sample/motherboard/lmsensors/000077500000000000000000000000001467431054600215525ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/motherboard/lmsensors/lmsensors1.txt000066400000000000000000000011121467431054600244140ustar00rootroot00000000000000via686a-isa-6000 Adapter: ISA adapter CPU core: +1.72 V (min = +1.99 V, max = +2.49 V) ALARM +2.5V: +0.30 V (min = +2.24 V, max = +2.74 V) ALARM I/O: +3.35 V (min = +2.95 V, max = +3.62 V) +5V: +4.82 V (min = +4.47 V, max = +5.49 V) +12V: +11.45 V (min = +10.79 V, max = +13.18 V) CPU Fan: 0 RPM (min = 3000 RPM, div = 2) ALARM P/S Fan: 0 RPM (min = 3000 RPM, div = 2) SYS Temp: +27.9C (high = +45C, hyst = +40C) CPU Temp: +53.1C (high = +60C, hyst = +55C) SBr Temp: +24.2C (high = +65C, hyst = +60C) phpsysinfo-3.4.4/sample/motherboard/lmsensors/lmsensors10.txt000066400000000000000000000004371467431054600245050ustar00rootroot00000000000000nouveau-pci-0200 Adapter: PCI adapter temp1: +73.0°C (high = +100.0°C, crit = +100.0°C) applesmc-isa-0300 Adapter: ISA adapter Master : 1493 RPM (min = 1500 RPM) TC0D: +49.5°C TC0H: +49.2°C TC0P: +48.2°C TH0P: +48.8°C TN0D: +72.8°C TN0P: +58.5°C TW0P: +56.8°C Tm0P: +128.0°C phpsysinfo-3.4.4/sample/motherboard/lmsensors/lmsensors11.txt000066400000000000000000000016421467431054600245050ustar00rootroot00000000000000w83793-i2c-0-2f Adapter: SMBus I801 adapter at 1100 VcoreA: +1.20 V (min = +0.92 V, max = +1.49 V) VcoreB: +1.19 V (min = +0.92 V, max = +1.49 V) in2: +1.19 V (min = +1.08 V, max = +1.33 V) in3: +0.50 V (min = +0.38 V, max = +0.69 V) +5V: +5.07 V (min = +4.52 V, max = +5.50 V) 5VSB: +5.07 V (min = +4.52 V, max = +5.50 V) Vbat: +3.23 V (min = +2.70 V, max = +3.30 V) fan1: 5152 RPM (min = 712 RPM) fan2: 5172 RPM (min = 712 RPM) fan3: 0 RPM (min = 712 RPM) ALARM temp1: +50.0C (high = +89.0C, hyst = +84.0C) sensor = Intel PECI temp2: +53.0C (high = +89.0C, hyst = +84.0C) sensor = Intel PECI temp3: +72.0C (high = +75.0C, hyst = +70.0C) ALARM sensor = thermistor cpu0_vid: +1.013 V intrusion0: ALARM intrusion1: OK alarms: Chassis intrusion detection ALARM beep_enable: disabled phpsysinfo-3.4.4/sample/motherboard/lmsensors/lmsensors12.txt000066400000000000000000000044341467431054600245100ustar00rootroot00000000000000amdgpu-pci-3800 Adapter: PCI adapter vddgfx: N/A vddnb: N/A temp1: +29.0C (crit = +80.0C, hyst = +0.0C) k10temp-pci-00c3 Adapter: PCI adapter Tdie: +29.8C (high = +70.0C) Tctl: +29.8C nct6795-isa-0a20 Adapter: ISA adapter Vcore: +0.67 V (min = +0.00 V, max = +1.74 V) in1: +1.02 V (min = +0.00 V, max = +0.00 V) ALARM AVCC: +3.36 V (min = +0.00 V, max = +0.00 V) ALARM +3.3V: +3.34 V (min = +0.00 V, max = +0.00 V) ALARM in4: +1.01 V (min = +0.00 V, max = +0.00 V) ALARM in5: +0.15 V (min = +0.00 V, max = +0.00 V) ALARM in6: +0.86 V (min = +0.00 V, max = +0.00 V) ALARM 3VSB: +3.34 V (min = +0.00 V, max = +0.00 V) ALARM Vbat: +3.23 V (min = +0.00 V, max = +0.00 V) ALARM in9: +1.85 V (min = +0.00 V, max = +0.00 V) ALARM in10: +0.90 V (min = +0.00 V, max = +0.00 V) ALARM in11: +0.60 V (min = +0.00 V, max = +0.00 V) ALARM in12: +1.13 V (min = +0.00 V, max = +0.00 V) ALARM in13: +0.68 V (min = +0.00 V, max = +0.00 V) ALARM in14: +1.53 V (min = +0.00 V, max = +0.00 V) ALARM fan1: 0 RPM (min = 0 RPM) fan2: 0 RPM (min = 0 RPM) fan3: 0 RPM (min = 0 RPM) fan4: 0 RPM (min = 0 RPM) fan5: 0 RPM (min = 0 RPM) SYSTIN: +40.0C (high = +0.0C, hyst = +0.0C) ALARM sensor = CPU diode CPUTIN: +32.0C (high = +115.0C, hyst = +90.0C) sensor = thermistor AUXTIN0: +33.5C (high = +115.0C, hyst = +90.0C) sensor = thermistor AUXTIN1: +31.0C sensor = thermistor AUXTIN2: +50.0C sensor = thermistor AUXTIN3: -2.0C sensor = thermistor SMBUSMASTER 0: +29.5C PCH_CHIP_CPU_MAX_TEMP: +0.0C PCH_CHIP_TEMP: +0.0C PCH_CPU_TEMP: +0.0C intrusion0: ALARM intrusion1: ALARM beep_enable: disabled iwlwifi-virtual-0 Adapter: Virtual device temp1: +33.0C phpsysinfo-3.4.4/sample/motherboard/lmsensors/lmsensors13.txt000066400000000000000000000031551467431054600245100ustar00rootroot00000000000000f75387-i2c-9-2e Adapter: SMBus I801 adapter at f000 in0: 1.66 V (min = +0.00 V, max = +2.04 V) in1: 1.10 V (min = +0.00 V, max = +2.04 V) in2: 1.01 V (min = +0.00 V, max = +2.04 V) in3: 896.00 mV (min = +0.00 V, max = +2.04 V) fan1: 781 RPM (min = 97 RPM, max = 940 RPM) fan2: 788 RPM (min = 5882 RPM, max = 893 RPM) temp1: -110.8°C (high = +100.0°C, hyst = +95.0°C) temp2: -110.8°C (high = +100.0°C, hyst = +95.0°C) coretemp-isa-0000 Adapter: ISA adapter Package id 0: +32.0°C (high = +81.0°C, crit = +95.0°C) Core 0: +28.0°C (high = +81.0°C, crit = +95.0°C) Core 1: +32.0°C (high = +81.0°C, crit = +95.0°C) Core 2: +32.0°C (high = +81.0°C, crit = +95.0°C) Core 3: +28.0°C (high = +81.0°C, crit = +95.0°C) f71889a-isa-0290 Adapter: ISA adapter +3.3V: 3.30 V in1: 936.00 mV (max = +2.04 V) in2: 744.00 mV in3: 952.00 mV in4: 1.09 V in5: 744.00 mV in6: 920.00 mV 3VSB: 3.30 V Vbat: 3.31 V fan1: 1452 RPM fan2: 0 RPM ALARM fan3: 918 RPM temp1: +22.0°C (high = +255.0°C, hyst = +251.0°C) ALARM (CRIT) (crit = +255.0°C, hyst = +251.0°C) sensor = transistor temp2: FAULT (high = +255.0°C, hyst = +251.0°C) (crit = +255.0°C, hyst = +251.0°C) sensor = transistor temp3: +45.0°C (high = +255.0°C, hyst = +253.0°C) ALARM (CRIT) (crit = +255.0°C, hyst = +253.0°C) sensor = transistor phpsysinfo-3.4.4/sample/motherboard/lmsensors/lmsensors14.txt000066400000000000000000000012421467431054600245040ustar00rootroot00000000000000coretemp-isa-0000 Adapter: ISA adapter Package id 0: +47.0°C (high = +105.0°C, crit = +105.0°C) Core 0: +45.0°C (high = +105.0°C, crit = +105.0°C) Core 1: +45.0°C (high = +105.0°C, crit = +105.0°C) Core 2: +45.0°C (high = +105.0°C, crit = +105.0°C) Core 3: +44.0°C (high = +105.0°C, crit = +105.0°C) acpitz-acpi-0 Adapter: ACPI interface temp1: +27.8°C nvme-pci-0200 Adapter: PCI adapter Composite: +49.9°C (low = -273.1°C, high = +81.8°C) (crit = +84.8°C) Sensor 1: +49.9°C (low = -273.1°C, high = +65261.8°C) Sensor 2: +54.9°C (low = -273.1°C, high = +65261.8°C) phpsysinfo-3.4.4/sample/motherboard/lmsensors/lmsensors2.txt000066400000000000000000000017341467431054600244270ustar00rootroot00000000000000w83781d-i2c-0-2d Adapter: SMBus PIIX4 adapter at 5f00 VCore 1: +2.82 V (min = +2.66 V, max = +2.94 V) VCore 2: +1.49 V (min = +2.66 V, max = +2.94 V) ALARM +3.3V: +3.50 V (min = +3.14 V, max = +3.46 V) ALARM +5V: +4.97 V (min = +4.73 V, max = +5.24 V) +12V: +11.92 V (min = +11.37 V, max = +12.59 V) -12V: -11.57 V (min = -12.57 V, max = -11.35 V) -5V: -4.89 V (min = -5.25 V, max = -4.74 V) fan1: 6026 RPM (min = 2657 RPM, div = 2) fan2: 0 RPM (min = 2657 RPM, div = 2) ALARM fan3: 0 RPM (min = 2657 RPM, div = 2) ALARM temp1: +12C (high = +127C, hyst = +0C) temp2: +11.5C (high = +50C, hyst = +49C) temp3: +11.0C (high = +127C, hyst = +0C) vid: +2.800 V alarms: beep_enable: Sound alarm disabled phpsysinfo-3.4.4/sample/motherboard/lmsensors/lmsensors3.txt000066400000000000000000000012371467431054600244260ustar00rootroot00000000000000it87-isa-0290 Adapter: ISA adapter VCore: +1.68 V (min = +1.64 V, max = +1.69 V) DDRVtt: +2.56 V (min = +2.42 V, max = +2.58 V) +3.3V: +3.31 V (min = +3.13 V, max = +3.45 V) +5V: +4.77 V (min = +4.72 V, max = +5.24 V) +12V: +12.52 V (min = +11.36 V, max = +12.72 V) +5VSB: +4.99 V (min = +4.72 V, max = +5.24 V) CPU: 3515 RPM (min = 1997 RPM, div = 4) SYS: 2393 RPM (min = 1997 RPM, div = 4) SYS: +34C (low = +20C, high = +40C) sensor = thermistor max1617-i2c-1-4c Adapter: SMBus Via Pro adapter at 5000 CPU: +44C (low = +30C, high = +70C) phpsysinfo-3.4.4/sample/motherboard/lmsensors/lmsensors4.txt000066400000000000000000000011671467431054600244310ustar00rootroot00000000000000smsc47m1-isa-0680 Adapter: ISA adapter CPU fan: 2507 RPM (min = 640 RPM, div = 8) adm1025-i2c-0-2d Adapter: SMBus I801 adapter at e000 CPU I/O (+1.5V): +1.51 V (min = +1.35 V, max = +1.65 V) CPU Core (+1.75V): +1.72 V (min = +1.66 V, max = +1.84 V) +3.3V: +3.33 V (min = +2.97 V, max = +3.63 V) +5V: +5.21 V (min = +4.50 V, max = +5.50 V) +3.3V standby: +3.27 V (min = +2.97 V, max = +3.63 V) CPU Temp: +34.0 C (low = +10 C, high = +60 C) M/B Temp: +33.0 C (low = +10 C, high = +45 C) vid: +1.750 V (VRM Version 9.0) phpsysinfo-3.4.4/sample/motherboard/lmsensors/lmsensors5.txt000066400000000000000000000013241467431054600244250ustar00rootroot00000000000000eeprom-i2c-0-50 Adapter: SMBus PIIX4 adapter at f0b0 Unknown EEPROM type (54) eeprom-i2c-0-54 Adapter: SMBus PIIX4 adapter at f0b0 Memory type: SDR SDRAM DIMM Memory size (MB): 128 eeprom-i2c-0-55 Adapter: SMBus PIIX4 adapter at f0b0 Memory type: SDR SDRAM DIMM Memory size (MB): 128 eeprom-i2c-0-56 Adapter: SMBus PIIX4 adapter at f0b0 Memory type: SDR SDRAM DIMM Memory size (MB): 128 fscpos-i2c-0-73 Adapter: SMBus PIIX4 adapter at f0b0 temp1: +38.00 C temp2: +28.00 C temp3: failed fan1: 1440 RPM fan2: 0 RPM fan3: 3120 RPM volt12: +11.91 V volt5: +5.12 V voltbatt: +3.15 V phpsysinfo-3.4.4/sample/motherboard/lmsensors/lmsensors6.txt000066400000000000000000000020201467431054600244200ustar00rootroot00000000000000it8716-isa-0228 Adapter: ISA adapter VCore: +0.99 V (min = +0.00 V, max = +4.08 V) VDDR: +1.89 V (min = +0.00 V, max = +4.08 V) +3.3V: +3.38 V (min = +0.00 V, max = +4.08 V) +5V: +5.08 V (min = +0.00 V, max = +6.85 V) +12V: +12.16 V (min = +0.00 V, max = +16.32 V) in5: +3.25 V (min = +0.00 V, max = +4.08 V) in6: +0.10 V (min = +0.00 V, max = +4.08 V) 5VSB: +4.95 V (min = +0.00 V, max = +6.85 V) VBat: +3.26 V fan1: 1374 RPM (min = 0 RPM) fan2: 0 RPM (min = 0 RPM) temp1: +42°C (low = +127°C, high = +127°C) sensor = thermistor temp2: +37°C (low = +127°C, high = +127°C) sensor = thermistor temp3: +28°C (low = +127°C, high = +127°C) sensor = diode vid: +1.000 V k8temp-pci-00c3 Adapter: PCI adapter Core0 Temp: +31°C Core0 Temp: +21°C Core1 Temp: +29°C Core1 Temp: +21°C phpsysinfo-3.4.4/sample/motherboard/lmsensors/lmsensors7.txt000066400000000000000000000017021467431054600244270ustar00rootroot00000000000000asb100-i2c-1-2d Adapter: SMBus nForce2 adapter at 5500 VCore 1: +1.60 V (min = +1.25 V, max = +1.87 V) +3.3V: +3.30 V (min = +2.96 V, max = +3.63 V) +5V: +5.05 V (min = +4.49 V, max = +5.51 V) +12V: +11.55 V (min = +9.55 V, max = +14.41 V) -12V (reserved): -12.07 V (min = -0.00 V, max = -0.00 V) -5V (reserved): -5.06 V (min = -0.00 V, max = -0.00 V) CPU Fan: 11065 RPM (min = -1 RPM, div = 2) Chassis Fan: 2755 RPM (min = -1 RPM, div = 2) Power Fan: 0 RPM (min = -1 RPM, div = 2) M/B Temp: +34 C (high = +80 C, hyst = +75 C) CPU Temp (Intel): +25 C (high = +80 C, hyst = +75 C) Power Temp: -0 C (high = +80 C, hyst = +75 C) CPU Temp (AMD): +25 C (high = +80 C, hyst = +75 C) vid: +1.575 V (VRM Version 9.0) alarms: phpsysinfo-3.4.4/sample/motherboard/lmsensors/lmsensors8.txt000066400000000000000000000011261467431054600244300ustar00rootroot00000000000000coretemp-isa-0000 Adapter: ISA adapter Core 0: +49.0°C (high = +74.0°C, crit = +100.0°C) Core 1: +46.0°C (high = +74.0°C, crit = +100.0°C) fam15h_power-pci-00c4 Adapter: PCI adapter power1: 85.74 W fam15h_power-pci-00c4 Adapter: PCI adapter power1: 71.17 W (crit = 95.04 W) mcp3021-i2c-0-4d Adapter: MPC adapter in0: +0.19 V (min = +0.19 V, max = +0.21 V) curr1: +0.99 A (min = +0.93 A, max = +1.05 A) mcp3021-i2c-1-4d Adapter: MPC adapter in0: +0.40 V (min = +0.40 V, max = +0.41 V) curr1: +2.01 A (min = +1.98 A, max = +2.02 A) phpsysinfo-3.4.4/sample/motherboard/lmsensors/lmsensors9.txt000066400000000000000000000010631467431054600244310ustar00rootroot00000000000000power_meter-acpi-0 Adapter: ACPI interface power1: 4.29 MW (interval = 2.00 s) coretemp-isa-0000 Adapter: ISA adapter Physical id 0: +56.0°C (high = +87.0°C, crit = +97.0°C) Core 0: +54.0°C (high = +87.0°C, crit = +97.0°C) Core 1: +56.0°C (high = +87.0°C, crit = +97.0°C) Core 2: +53.0°C (high = +87.0°C, crit = +97.0°C) Core 3: +53.0°C (high = +87.0°C, crit = +97.0°C) Core 4: +53.0°C (high = +87.0°C, crit = +97.0°C) Core 5: +52.0°C (high = +87.0°C, crit = +97.0°C) phpsysinfo-3.4.4/sample/motherboard/mbm5/000077500000000000000000000000001467431054600203655ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/motherboard/mbm5/MBM51.csv000066400000000000000000000021331467431054600216620ustar00rootroot00000000000000;;;Case;CPU;Sensor 3;Core 0;Core 1;+3.3;+5.00;+12.00;-12.00;-5.00;Fan 1;Fan 2;Fan 3; 23/02/2008;15:45:18;2000 MHz;45 C;53 C;0 C;1,68 V;0,00 V;3,23 V;4,92 V;12,28 V;1,54 V;2,29 V;5037 RPM; 23/02/2008;15:44:48;2000 MHz;45 C;53 C;0 C;1,68 V;0,00 V;3,25 V;4,89 V;12,28 V;1,54 V;2,34 V;5113 RPM; 23/02/2008;15:44:18;2000 MHz;45 C;53 C;0 C;1,66 V;0,00 V;3,25 V;4,89 V;12,28 V;1,63 V;2,34 V;5113 RPM; 23/02/2008;15:43:48;2000 MHz;45 C;53 C;0 C;1,66 V;0,00 V;3,23 V;4,89 V;12,28 V;1,54 V;2,29 V;5037 RPM; 23/02/2008;15:43:18;2000 MHz;45 C;53 C;0 C;1,68 V;0,00 V;3,23 V;4,92 V;12,28 V;1,54 V;2,34 V;5113 RPM; 23/02/2008;15:42:48;2000 MHz;45 C;53 C;0 C;1,68 V;0,00 V;3,25 V;4,89 V;12,28 V;1,54 V;2,34 V;5037 RPM; 23/02/2008;15:42:18;2000 MHz;45 C;53 C;0 C;1,66 V;0,00 V;3,23 V;4,89 V;12,40 V;1,63 V;2,34 V;5037 RPM; 23/02/2008;15:41:48;2000 MHz;45 C;53 C;0 C;1,68 V;0,00 V;3,25 V;4,89 V;12,28 V;1,54 V;2,29 V;5113 RPM; 23/02/2008;15:41:18;2000 MHz;45 C;53 C;0 C;1,68 V;0,00 V;3,23 V;4,87 V;12,34 V;1,63 V;2,34 V;5113 RPM; 23/02/2008;15:40:48;2000 MHz;45 C;53 C;0 C;1,68 V;0,00 V;3,23 V;4,89 V;12,28 V;1,46 V;2,29 V;5037 RPM; phpsysinfo-3.4.4/sample/motherboard/nvidiasmi/000077500000000000000000000000001467431054600215105ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/motherboard/nvidiasmi/nvidiasmi0.txt000066400000000000000000000235221467431054600243200ustar00rootroot00000000000000==============NVSMI LOG============== Timestamp : Sun Nov 22 08:37:22 2015 Driver Version : 352.39 Attached GPUs : 2 GPU 0000:04:00.0 Product Name : GeForce GTX 690 Product Brand : GeForce Display Mode : N/A Display Active : N/A Persistence Mode : Disabled Accounting Mode : N/A Accounting Mode Buffer Size : N/A Driver Model Current : N/A Pending : N/A Serial Number : N/A GPU UUID : GPU-e777fefe-e8c6-466b-89e1-bc39d2a12345 Minor Number : 0 VBIOS Version : 80.04.4C.00.0E MultiGPU Board : N/A Board ID : N/A Inforom Version Image Version : N/A OEM Object : N/A ECC Object : N/A Power Management Object : N/A GPU Operation Mode Current : N/A Pending : N/A PCI Bus : 0x04 Device : 0x00 Domain : 0x0000 Device Id : 0x118810DE Bus Id : 0000:04:00.0 Sub System Id : 0x095B10DE GPU Link Info PCIe Generation Max : N/A Current : N/A Link Width Max : N/A Current : N/A Bridge Chip Type : N/A Firmware : N/A Replays since reset : 0 Tx Throughput : N/A Rx Throughput : N/A Fan Speed : 43 % Performance State : P0 Clocks Throttle Reasons : N/A FB Memory Usage Total : 2047 MiB Used : 237 MiB Free : 1810 MiB BAR1 Memory Usage Total : N/A Used : N/A Free : N/A Compute Mode : Default Utilization Gpu : N/A Memory : N/A Encoder : N/A Decoder : N/A Ecc Mode Current : N/A Pending : N/A ECC Errors Volatile Single Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Double Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Aggregate Single Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Double Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Retired Pages Single Bit ECC : N/A Double Bit ECC : N/A Pending : N/A Temperature GPU Current Temp : 59 C GPU Shutdown Temp : N/A GPU Slowdown Temp : N/A Power Readings Power Management : N/A Power Draw : N/A Power Limit : N/A Default Power Limit : N/A Enforced Power Limit : N/A Min Power Limit : N/A Max Power Limit : N/A Clocks Graphics : N/A SM : N/A Memory : N/A Applications Clocks Graphics : N/A Memory : N/A Default Applications Clocks Graphics : N/A Memory : N/A Max Clocks Graphics : N/A SM : N/A Memory : N/A Clock Policy Auto Boost : N/A Auto Boost Default : N/A Processes : N/A GPU 0000:05:00.0 Product Name : GeForce GTX 690 Product Brand : GeForce Display Mode : N/A Display Active : N/A Persistence Mode : Disabled Accounting Mode : N/A Accounting Mode Buffer Size : N/A Driver Model Current : N/A Pending : N/A Serial Number : N/A GPU UUID : GPU-7aad0000-7285-a503-c130-32de1ce12345 Minor Number : 1 VBIOS Version : 80.04.4C.00.0F MultiGPU Board : N/A Board ID : N/A Inforom Version Image Version : N/A OEM Object : N/A ECC Object : N/A Power Management Object : N/A GPU Operation Mode Current : N/A Pending : N/A PCI Bus : 0x05 Device : 0x00 Domain : 0x0000 Device Id : 0x118810DE Bus Id : 0000:05:00.0 Sub System Id : 0x095B10DE GPU Link Info PCIe Generation Max : N/A Current : N/A Link Width Max : N/A Current : N/A Bridge Chip Type : N/A Firmware : N/A Replays since reset : 0 Tx Throughput : N/A Rx Throughput : N/A Fan Speed : 30 % Performance State : P8 Clocks Throttle Reasons : N/A FB Memory Usage Total : 2047 MiB Used : 244 MiB Free : 1803 MiB BAR1 Memory Usage Total : N/A Used : N/A Free : N/A Compute Mode : Default Utilization Gpu : N/A Memory : N/A Encoder : N/A Decoder : N/A Ecc Mode Current : N/A Pending : N/A ECC Errors Volatile Single Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Double Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Aggregate Single Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Double Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Retired Pages Single Bit ECC : N/A Double Bit ECC : N/A Pending : N/A Temperature GPU Current Temp : 33 C GPU Shutdown Temp : N/A GPU Slowdown Temp : N/A Power Readings Power Management : N/A Power Draw : N/A Power Limit : N/A Default Power Limit : N/A Enforced Power Limit : N/A Min Power Limit : N/A Max Power Limit : N/A Clocks Graphics : N/A SM : N/A Memory : N/A Applications Clocks Graphics : N/A Memory : N/A Default Applications Clocks Graphics : N/A Memory : N/A Max Clocks Graphics : N/A SM : N/A Memory : N/A Clock Policy Auto Boost : N/A Auto Boost Default : N/A Processes : N/Aphpsysinfo-3.4.4/sample/motherboard/nvidiasmi/nvidiasmi1.txt000066400000000000000000000154701467431054600243240ustar00rootroot00000000000000==============NVSMI LOG============== Timestamp : Mon Nov 5 14:50:59 2018 Driver Version : 410.48 Attached GPUs : 4 GPU 00000000:18:00.0 Product Name : Tesla V100-PCIE-32GB Product Brand : Tesla Display Mode : Enabled Display Active : Disabled Persistence Mode : Disabled Accounting Mode : Disabled Accounting Mode Buffer Size : 4000 Driver Model Current : N/A Pending : N/A Serial Number : 032101234xxxx GPU UUID : GPU-4965xxxx-79e3-7941-12cb-1dfe9c53xxxx Minor Number : 0 VBIOS Version : 88.00.48.00.02 MultiGPU Board : No Board ID : 0x1800 GPU Part Number : 900-2G500-0010-000 Inforom Version Image Version : G500.0202.00.02 OEM Object : 1.1 ECC Object : 5.0 Power Management Object : N/A GPU Operation Mode Current : N/A Pending : N/A GPU Virtualization Mode Virtualization mode : None IBMNPU Relaxed Ordering Mode : N/A PCI Bus : 0x18 Device : 0x00 Domain : 0x0000 Device Id : 0x1DB610DE Bus Id : 00000000:18:00.0 Sub System Id : 0x124A10DE GPU Link Info PCIe Generation Max : 3 Current : 3 Link Width Max : 16x Current : 16x Bridge Chip Type : N/A Firmware : N/A Replays since reset : 0 Tx Throughput : 31000 KB/s Rx Throughput : 155000 KB/s Fan Speed : N/A Performance State : P0 Clocks Throttle Reasons Idle : Not Active Applications Clocks Setting : Not Active SW Power Cap : Not Active HW Slowdown : Not Active HW Thermal Slowdown : Not Active HW Power Brake Slowdown : Not Active Sync Boost : Not Active SW Thermal Slowdown : Not Active Display Clock Setting : Not Active FB Memory Usage Total : 32480 MiB Used : 31194 MiB Free : 1286 MiB BAR1 Memory Usage Total : 32768 MiB Used : 8 MiB Free : 32760 MiB Compute Mode : Default Utilization Gpu : 44 % Memory : 4 % Encoder : 0 % Decoder : 0 % Encoder Stats Active Sessions : 0 Average FPS : 0 Average Latency : 0 FBC Stats Active Sessions : 0 Average FPS : 0 Average Latency : 0 Ecc Mode Current : Enabled Pending : Enabled ECC Errors Volatile Single Bit Device Memory : 0 Register File : 0 L1 Cache : 0 L2 Cache : 0 Texture Memory : N/A Texture Shared : N/A CBU : N/A Total : 0 Double Bit Device Memory : 0 Register File : 0 L1 Cache : 0 L2 Cache : 0 Texture Memory : N/A Texture Shared : N/A CBU : 0 Total : 0 Aggregate Single Bit Device Memory : 0 Register File : 0 L1 Cache : 0 L2 Cache : 0 Texture Memory : N/A Texture Shared : N/A CBU : N/A Total : 0 Double Bit Device Memory : 0 Register File : 0 L1 Cache : 0 L2 Cache : 0 Texture Memory : N/A Texture Shared : N/A CBU : 0 Total : 0 Retired Pages Single Bit ECC : 0 Double Bit ECC : 0 Pending : No Temperature GPU Current Temp : 40 C GPU Shutdown Temp : 90 C GPU Slowdown Temp : 87 C GPU Max Operating Temp : 83 C Memory Current Temp : 39 C Memory Max Operating Temp : 85 C Power Readings Power Management : Supported Power Draw : 58.81 W Power Limit : 250.00 W Default Power Limit : 250.00 W Enforced Power Limit : 250.00 W Min Power Limit : 100.00 W Max Power Limit : 250.00 W Clocks Graphics : 1380 MHz SM : 1380 MHz Memory : 877 MHz Video : 1237 MHz Applications Clocks Graphics : 1230 MHz Memory : 877 MHz Default Applications Clocks Graphics : 1230 MHz Memory : 877 MHz Max Clocks Graphics : 1380 MHz SM : 1380 MHz Memory : 877 MHz Video : 1237 MHz Max Customer Boost Clocks Graphics : 1380 MHz Clock Policy Auto Boost : N/A Auto Boost Default : N/A Processes Process ID : 315406 Type : C Name : /usr/bin/python Used GPU Memory : 31181 MiBphpsysinfo-3.4.4/sample/motherboard/nvidiasmi/nvidiasmi2.txt000066400000000000000000000164621467431054600243270ustar00rootroot00000000000000==============NVSMI LOG============== Timestamp : Thu Aug 11 22:42:34 2016 Driver Version : 352.93 Attached GPUs : 2 GPU 0000:05:00.0 Product Name : Tesla K80 Product Brand : Tesla Display Mode : Disabled Display Active : Disabled Persistence Mode : Disabled Accounting Mode : Disabled Accounting Mode Buffer Size : 1920 Driver Model Current : N/A Pending : N/A Serial Number : 0325515512345 GPU UUID : GPU-a65eaaaa-8871-ded5-b6ee-526840412345 Minor Number : 0 VBIOS Version : 80.21.1B.00.01 MultiGPU Board : Yes Board ID : 0x300 Inforom Version Image Version : 2080.0200.00.04 OEM Object : 1.1 ECC Object : 3.0 Power Management Object : N/A GPU Operation Mode Current : N/A Pending : N/A PCI Bus : 0x05 Device : 0x00 Domain : 0x0000 Device Id : 0x102D10DE Bus Id : 0000:05:00.0 Sub System Id : 0x106C10DE GPU Link Info PCIe Generation Max : 3 Current : 3 Link Width Max : 16x Current : 16x Bridge Chip Type : PLX Firmware : 0xF0472900 Replays since reset : 0 Tx Throughput : N/A Rx Throughput : N/A Fan Speed : N/A Performance State : P0 Clocks Throttle Reasons Idle : Not Active Applications Clocks Setting : Active SW Power Cap : Not Active HW Slowdown : Not Active Unknown : Not Active FB Memory Usage Total : 12287 MiB Used : 56 MiB Free : 12231 MiB BAR1 Memory Usage Total : 16384 MiB Used : 2 MiB Free : 16382 MiB Compute Mode : Default Utilization Gpu : 0 % Memory : 0 % Encoder : 0 % Decoder : 0 % Ecc Mode Current : Disabled Pending : Disabled ECC Errors Volatile Single Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Double Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Aggregate Single Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Double Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Retired Pages Single Bit ECC : 0 Double Bit ECC : 0 Pending : No Temperature GPU Current Temp : 31 C GPU Shutdown Temp : 93 C GPU Slowdown Temp : 88 C Power Readings Power Management : Supported Power Draw : 59.20 W Power Limit : 149.00 W Default Power Limit : 149.00 W Enforced Power Limit : 149.00 W Min Power Limit : 100.00 W Max Power Limit : 175.00 W Clocks Graphics : 562 MHz SM : 562 MHz Memory : 2505 MHz Applications Clocks Graphics : 562 MHz Memory : 2505 MHz Default Applications Clocks Graphics : 562 MHz Memory : 2505 MHz Max Clocks Graphics : 875 MHz SM : 875 MHz Memory : 2505 MHz Clock Policy Auto Boost : On Auto Boost Default : On Processes : None GPU 0000:06:00.0 Product Name : Tesla K80 Product Brand : Tesla Display Mode : Disabled Display Active : Disabled Persistence Mode : Disabled Accounting Mode : Disabled Accounting Mode Buffer Size : 1920 Driver Model Current : N/A Pending : N/A Serial Number : 0325515512346 GPU UUID : GPU-21c2bbbb-72a9-1b68-adab-459d05d12345 Minor Number : 1 VBIOS Version : 80.21.1B.00.02 MultiGPU Board : Yes Board ID : 0x300 Inforom Version Image Version : 2080.0200.00.04 OEM Object : 1.1 ECC Object : 3.0 Power Management Object : N/A GPU Operation Mode Current : N/A Pending : N/A PCI Bus : 0x06 Device : 0x00 Domain : 0x0000 Device Id : 0x102D10DE Bus Id : 0000:06:00.0 Sub System Id : 0x106C10DE GPU Link Info PCIe Generation Max : 3 Current : 3 Link Width Max : 16x Current : 16x Bridge Chip Type : PLX Firmware : 0xF0472900 Replays since reset : 0 Tx Throughput : N/A Rx Throughput : N/A Fan Speed : N/A Performance State : P0 Clocks Throttle Reasons Idle : Not Active Applications Clocks Setting : Active SW Power Cap : Not Active HW Slowdown : Not Active Unknown : Not Active FB Memory Usage Total : 12287 MiB Used : 56 MiB Free : 12231 MiB BAR1 Memory Usage Total : 16384 MiB Used : 2 MiB Free : 16382 MiB Compute Mode : Default Utilization Gpu : 0 % Memory : 0 % Encoder : 0 % Decoder : 0 % Ecc Mode Current : Disabled Pending : Disabled ECC Errors Volatile Single Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Double Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Aggregate Single Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Double Bit Device Memory : N/A Register File : N/A L1 Cache : N/A L2 Cache : N/A Texture Memory : N/A Total : N/A Retired Pages Single Bit ECC : 0 Double Bit ECC : 0 Pending : No Temperature GPU Current Temp : 24 C GPU Shutdown Temp : 93 C GPU Slowdown Temp : 88 C Power Readings Power Management : Supported Power Draw : 70.89 W Power Limit : 149.00 W Default Power Limit : 149.00 W Enforced Power Limit : 149.00 W Min Power Limit : 100.00 W Max Power Limit : 175.00 W Clocks Graphics : 562 MHz SM : 562 MHz Memory : 2505 MHz Applications Clocks Graphics : 562 MHz Memory : 2505 MHz Default Applications Clocks Graphics : 562 MHz Memory : 2505 MHz Max Clocks Graphics : 875 MHz SM : 875 MHz Memory : 2505 MHz Clock Policy Auto Boost : On Auto Boost Default : On Processes : None phpsysinfo-3.4.4/sample/openbsd/000077500000000000000000000000001467431054600166515ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/openbsd/netstat_nbdi1.txt000066400000000000000000000011771467431054600221570ustar00rootroot00000000000000Name Mtu Network Address Ibytes Obytes Drop lo0 32768 0 0 0 lo0 32768 fe80::%lo0/ fe80::1%lo0 0 0 0 lo0 32768 ::1/128 ::1 0 0 0 lo0 32768 127/8 127.0.0.1 0 0 0 em0 1500 08:00:27:e5:b2:55 10050 4710 0 em0 1500 10.0.2/24 10.0.2.15 10050 4710 0 enc0* 0 0 0 0 pflog0 33144 0 0 0 phpsysinfo-3.4.4/sample/openbsd/netstat_nbdi2.txt000066400000000000000000000011221467431054600221460ustar00rootroot00000000000000Name Mtu Network Address Ibytes Obytes lo0 32768 0 0 lo0 32768 ::1/128 ::1 0 0 lo0 32768 fe80::%lo0/ fe80::1%lo0 0 0 lo0 32768 127/8 127.0.0.1 0 0 em0 1500 08:00:27:e5:b2:55 14428 5738 em0 1500 10.0.2/24 10.0.2.15 14428 5738 enc0* 0 0 0 pflog0 33136 0 0 phpsysinfo-3.4.4/sample/openbsd/netstat_ndi1.txt000066400000000000000000000013751467431054600220150ustar00rootroot00000000000000Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Colls Drop lo0 32768 0 0 0 0 0 0 lo0 32768 fe80::%lo0/ fe80::1%lo0 0 0 0 0 0 0 lo0 32768 ::1/128 ::1 0 0 0 0 0 0 lo0 32768 127/8 127.0.0.1 0 0 0 0 0 0 em0 1500 08:00:27:e5:b2:55 48 0 46 0 0 0 em0 1500 10.0.2/24 10.0.2.15 48 0 46 0 0 0 enc0* 0 0 0 0 0 0 0 pflog0 33144 0 0 0 0 0 0 phpsysinfo-3.4.4/sample/openbsd/netstat_ndi2.txt000066400000000000000000000013201467431054600220040ustar00rootroot00000000000000Name Mtu Network Address Ipkts Idrop Opkts Odrop Colls lo0 32768 0 0 0 0 0 lo0 32768 ::1/128 ::1 0 0 0 0 0 lo0 32768 fe80::%lo0/ fe80::1%lo0 0 0 0 0 0 lo0 32768 127/8 127.0.0.1 0 0 0 0 0 em0 1500 08:00:27:e5:b2:55 65 0 61 0 0 em0 1500 10.0.2/24 10.0.2.15 65 0 61 0 0 enc0* 0 0 0 0 0 0 pflog0 33136 0 0 0 0 0 phpsysinfo-3.4.4/sample/plugin_bat/000077500000000000000000000000001467431054600173435ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/plugin_bat/README000066400000000000000000000002651467431054600202260ustar00rootroot00000000000000FILE CONTENT OF ac_state cat /proc/acpi/ac_adapter/AC/state battery_info cat /proc/acpi/battery/BAT0/info battery_state cat /proc/acpi/battery/BAT0/state phpsysinfo-3.4.4/sample/plugin_bat/ac_state1.txt000066400000000000000000000000411467431054600217430ustar00rootroot00000000000000state: on-line phpsysinfo-3.4.4/sample/plugin_bat/battery_info1.txt000066400000000000000000000006371467431054600226600ustar00rootroot00000000000000present: yes design capacity: 50000 mWh last full capacity: 50000 mWh battery technology: rechargeable design voltage: 10000 mV design capacity warning: 100 mWh design capacity low: 50 mWh capacity granularity 1: 1 mWh capacity granularity 2: 1 mWh model number: 1 serial number: 0 battery type: VBOX OEM info: innotek phpsysinfo-3.4.4/sample/plugin_bat/battery_state1.txt000066400000000000000000000002751467431054600230430ustar00rootroot00000000000000present: yes capacity state: ok charging state: charged present rate: 0 mW remaining capacity: 50000 mWh present voltage: 10000 mV phpsysinfo-3.4.4/sample/plugin_bat/log_LenovoT530.txt000066400000000000000000000032031467431054600225610ustar00rootroot00000000000000---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/present 1 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/uevent POWER_SUPPLY_NAME=BAT0 POWER_SUPPLY_STATUS=Unknown POWER_SUPPLY_PRESENT=1 POWER_SUPPLY_TECHNOLOGY=Li-ion POWER_SUPPLY_CYCLE_COUNT=0 POWER_SUPPLY_VOLTAGE_MIN_DESIGN=10800000 POWER_SUPPLY_VOLTAGE_NOW=12365000 POWER_SUPPLY_POWER_NOW=0 POWER_SUPPLY_ENERGY_FULL_DESIGN=56160000 POWER_SUPPLY_ENERGY_FULL=44350000 POWER_SUPPLY_ENERGY_NOW=43580000 POWER_SUPPLY_CAPACITY=98 POWER_SUPPLY_CAPACITY_LEVEL=Normal POWER_SUPPLY_MODEL_NAME=45N1001 POWER_SUPPLY_MANUFACTURER=SANYO POWER_SUPPLY_SERIAL_NUMBER=18990 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/voltage_min_design 10800000 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/voltage_now 12367000 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/energy_full 44350000 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/energy_now 43580000 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/capacity 98 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/technology Li-ion ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/status Unknown ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/manufacturer SANYO ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/model_name 45N1001 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/serial_number 18990 phpsysinfo-3.4.4/sample/plugin_bat/log_android233.txt000066400000000000000000000031231467431054600226140ustar00rootroot00000000000000---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/present 1 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/uevent POWER_SUPPLY_NAME=battery POWER_SUPPLY_STATUS=Charging POWER_SUPPLY_HEALTH=Good POWER_SUPPLY_PRESENT=1 POWER_SUPPLY_TECHNOLOGY=Li-ion POWER_SUPPLY_VOLTAGE_MAX_DESIGN=4300 POWER_SUPPLY_VOLTAGE_MIN_DESIGN=2800 POWER_SUPPLY_VOLTAGE_NOW=4200 POWER_SUPPLY_CAPACITY=100 POWER_SUPPLY_BATT_TEMP=300 POWER_SUPPLY_BATT_TEMP_ADC=82 POWER_SUPPLY_BATT_VOL=4200 POWER_SUPPLY_BATT_VOL_ADC=3707 POWER_SUPPLY_BATT_VF_ADC=0 POWER_SUPPLY_BATT_VOL_ADC_AVER=3707 POWER_SUPPLY_BATT_TEMP_ADC_AVER=82 POWER_SUPPLY_BATT_VOL_AVER=0 POWER_SUPPLY_BATT_TEMP_AVER=15 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/capacity 100 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/batt_temp 300 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/batt_temp_adc 82 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/batt_vol 4200 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/voltage_min_design 2800 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/voltage_max_design 4300 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/technology Li-ion ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/status Charging ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/health Good phpsysinfo-3.4.4/sample/plugin_bat/log_android412.txt000066400000000000000000000016741467431054600226240ustar00rootroot00000000000000---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/present 1 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/uevent POWER_SUPPLY_NAME=battery POWER_SUPPLY_TYPE=Battery POWER_SUPPLY_STATUS=Charging POWER_SUPPLY_PRESENT=1 POWER_SUPPLY_HEALTH=Good POWER_SUPPLY_TECHNOLOGY=Li-poly POWER_SUPPLY_CAPACITY=100 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/capacity 100 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/batt_temp 330 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/batt_vol 4181 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/technology Li-poly ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/status Charging ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/health Good phpsysinfo-3.4.4/sample/plugin_bat/log_android422.txt000066400000000000000000000026761467431054600226300ustar00rootroot00000000000000---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/present 1 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/uevent POWER_SUPPLY_NAME=battery POWER_SUPPLY_STATUS=Charging POWER_SUPPLY_CHARGE_TYPE=Fast POWER_SUPPLY_HEALTH=Good POWER_SUPPLY_PRESENT=1 POWER_SUPPLY_ONLINE=3 POWER_SUPPLY_TECHNOLOGY=Li-ion POWER_SUPPLY_VOLTAGE_MAX_DESIGN=4350000 POWER_SUPPLY_VOLTAGE_MIN_DESIGN=3400000 POWER_SUPPLY_VOLTAGE_NOW=3926715 POWER_SUPPLY_CAPACITY=14 POWER_SUPPLY_CURRENT_MAX=1000000 POWER_SUPPLY_CURRENT_NOW=736500 POWER_SUPPLY_TEMP=308 POWER_SUPPLY_ENERGY_FULL=1940000000 POWER_SUPPLY_CHARGE_NOW=46573 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/capacity 14 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/batt_temp_adc 308 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/batt_vfocv 3920 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/voltage_min_design 3400000 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/voltage_max_design 4350000 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/technology Li-ion ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/status Charging ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/battery/health Good phpsysinfo-3.4.4/sample/plugin_bat/log_darwin_1.txt000066400000000000000000000027661467431054600224640ustar00rootroot00000000000000---Sat, 11 May 2013 09:44:41 +0000 GMT--- Executing: ioreg -w0 -l -n AppleSmartBattery -r +-o AppleSmartBattery { "TimeRemaining" = 0 "AvgTimeToEmpty" = 65535 "InstantTimeToEmpty" = 65535 "ExternalChargeCapable" = Yes "CellVoltage" = (4185,4183,4184,0) "PermanentFailureStatus" = 0 "BatteryInvalidWakeSeconds" = 30 "AdapterInfo" = 0 "MaxCapacity" = 5060 "Voltage" = 12552 "DesignCycleCount70" = 65535 "Manufacturer" = "DP" "Location" = 0 "CurrentCapacity" = 5060 "LegacyBatteryInfo" = {"Amperage"=234,"Flags"=5,"Capacity"=5060,"Current"=5060,"Voltage"=12552,"Cycle Count"=548} "FirmwareSerialNumber" = 60664 "BatteryInstalled" = Yes "PackReserve" = 200 "CycleCount" = 548 "DesignCapacity" = 5770 "OperationStatus" = 58435 "ManufactureDate" = 15764 "AvgTimeToFull" = 0 "BatterySerialNumber" = "9G0520ESBD3MA" "PostDischargeWaitSeconds" = 120 "Temperature" = 3062 "MaxErr" = 1 "ManufacturerData" = <000000000201000201580000024b3663033030310341544c00170000> "FullyCharged" = Yes "InstantAmperage" = 0 "DeviceName" = "bq20z451" "IOGeneralInterest" = "IOCommand is not serializable" "Amperage" = 234 "IsCharging" = No "DesignCycleCount9C" = 1000 "PostChargeWaitSeconds" = 120 "ExternalConnected" = Yes } phpsysinfo-3.4.4/sample/plugin_bat/log_freebsd_1.txt000066400000000000000000000007321467431054600226010ustar00rootroot00000000000000---Sat, 11 May 2013 09:44:41 +0000 GMT--- Executing: acpiconf -i batt Design capacity: 50000 mWh Last full capacity: 50000 mWh Technology: secondary (rechargeable) Design voltage: 10000 mV Capacity (warn): 100 mWh Capacity (low): 50 mWh Low/warn granularity: 1 mWh Warn/full granularity: 1 mWh Model number: 1 Serial number: 0 Type: VBOX OEM info: innotek State: high Remaining capacity: 100% Remaining time: unknown Present rate: 0 mW Present voltage: 10000 mV phpsysinfo-3.4.4/sample/plugin_bat/log_freebsd_2.txt000066400000000000000000000007351467431054600226050ustar00rootroot00000000000000---Sat, 11 May 2013 09:44:41 +0000 GMT--- Executing: acpiconf -i batt Design capacity: 4800 mAh Last full capacity: 3824 mAh Technology: secondary (rechargeable) Design voltage: 14800 mV Capacity (warn): 240 mAh Capacity (low): 144 mAh Low/warn granularity: 264 mAh Warn/full granularity: 3780 mAh Model number: Primary Serial number: Type: Lion OEM info: ACER State: discharging Remaining capacity: 95% Remaining time: unknown Present rate: 0 mA Voltage: 16391 mV phpsysinfo-3.4.4/sample/plugin_bat/log_test_1.txt000066400000000000000000000014511467431054600221450ustar00rootroot00000000000000---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /proc/acpi/battery/BAT0/state present: yes capacity state: ok charging state: charged present rate: 0 mA remaining capacity: 1009 mAh present voltage: 12167 mV ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /proc/acpi/battery/BAT0/info present: yes design capacity: 4400 mAh last full capacity: 1009 mAh battery technology: rechargeable design voltage: 10800 mV design capacity warning: 220 mAh design capacity low: 132 mAh cycle count: 0 capacity granularity 1: 264 mAh capacity granularity 2: 3780 mAh model number: Li_Ion_4000mA serial number: 0000 battery type: Lion OEM info: SANYO phpsysinfo-3.4.4/sample/plugin_bat/log_test_2.txt000066400000000000000000000014401467431054600221440ustar00rootroot00000000000000---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /proc/acpi/battery/BAT0/state present: yes capacity state: ok charging state: charged present rate: 0 mW remaining capacity: 70380 mWh present voltage: 12400 mV ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /proc/acpi/battery/BAT0/info present: yes design capacity: 82280 mWh last full capacity: 72420 mWh battery technology: rechargeable design voltage: 10800 mV design capacity warning: 3621 mWh design capacity low: 200 mWh cycle count: 0 capacity granularity 1: 1 mWh capacity granularity 2: 1 mWh model number: 92P1137 serial number: 999 battery type: LION OEM info: SANYO phpsysinfo-3.4.4/sample/plugin_bat/log_virtualbox.txt000066400000000000000000000025231467431054600231460ustar00rootroot00000000000000---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/present 1 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/uevent POWER_SUPPLY_NAME=BAT0 POWER_SUPPLY_STATUS=Unknown POWER_SUPPLY_PRESENT=1 POWER_SUPPLY_TECHNOLOGY=Unknown POWER_SUPPLY_CYCLE_COUNT=0 POWER_SUPPLY_VOLTAGE_MIN_DESIGN=10000000 POWER_SUPPLY_VOLTAGE_NOW=10000000 POWER_SUPPLY_POWER_NOW=0 POWER_SUPPLY_ENERGY_FULL_DESIGN=50000000 POWER_SUPPLY_ENERGY_FULL=50000000 POWER_SUPPLY_ENERGY_NOW=49000000 POWER_SUPPLY_CAPACITY=98 POWER_SUPPLY_CAPACITY_LEVEL=Normal POWER_SUPPLY_MODEL_NAME=1 POWER_SUPPLY_MANUFACTURER=innotek POWER_SUPPLY_SERIAL_NUMBER=0 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/voltage_min_design 10000000 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/voltage_now 10000000 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/energy_full 50000000 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/energy_now 49000000 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/capacity 98 ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/technology Unknown ---Sun, 12 May 2013 18:32:54 +0000 GMT--- Reading: /sys/class/power_supply/BAT0/status Unknown phpsysinfo-3.4.4/sample/plugin_bat/upower1.txt000066400000000000000000000032751467431054600215150ustar00rootroot00000000000000Device: /org/freedesktop/UPower/devices/line_power_AC native-path: AC power supply: yes updated: pon, 27 lis 2017, 11:09:15 (4923 seconds ago) has history: no has statistics: no line-power warning-level: none online: yes icon-name: 'ac-adapter-symbolic' Device: /org/freedesktop/UPower/devices/battery_BAT0 native-path: BAT0 vendor: innotek model: 1 serial: 0 power supply: yes updated: pon, 27 lis 2017, 12:31:17 (1 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: fully-charged warning-level: none energy: 50 Wh energy-empty: 0 Wh energy-full: 50 Wh energy-full-design: 50 Wh energy-rate: 0 W voltage: 10 V percentage: 100% capacity: 100% icon-name: 'battery-full-charged-symbolic' Device: /org/freedesktop/UPower/devices/DisplayDevice power supply: yes updated: pon, 27 lis 2017, 11:09:16 (4922 seconds ago) has history: no has statistics: no battery present: yes state: fully-charged warning-level: none energy: 50 Wh energy-full: 50 Wh energy-rate: 0 W percentage: 100% icon-name: 'battery-full-charged-symbolic' Daemon: daemon-version: 0.99.6 on-battery: no lid-is-closed: no lid-is-present: no critical-action: PowerOff phpsysinfo-3.4.4/sample/plugin_bat/upower2.txt000066400000000000000000000051321467431054600215100ustar00rootroot00000000000000Device: /org/freedesktop/UPower/devices/line_power_AC native-path: AC power supply: yes updated: pon, 27 lis 2017, 12:38:00 (103 seconds ago) has history: no has statistics: no line-power warning-level: none online: yes icon-name: 'ac-adapter-symbolic' Device: /org/freedesktop/UPower/devices/battery_BAT0 native-path: BAT0 vendor: SANYO model: 45N1001 serial: 7311 power supply: yes updated: pon, 27 lis 2017, 12:38:05 (98 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: fully-charged warning-level: none energy: 38,26 Wh energy-empty: 0 Wh energy-full: 38,38 Wh energy-full-design: 56,16 Wh energy-rate: 0 W voltage: 12,456 V percentage: 99% capacity: 68,3405% technology: lithium-ion icon-name: 'battery-full-charged-symbolic' History (charge): 1511782682 99,000 fully-charged 1511782680 0,000 unknown History (rate): 1511782680 0,000 unknown Device: /org/freedesktop/UPower/devices/mouse_0003o046DoC52Fx0002 native-path: /sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.1/0003:046D:C52F.0002 vendor: Logitech, Inc. model: M185 serial: 09A7C0B2 power supply: no updated: pon, 27 lis 2017, 12:38:00 (103 seconds ago) has history: yes has statistics: no mouse present: no rechargeable: yes state: unknown warning-level: none percentage: 0% icon-name: 'battery-missing-symbolic' History (charge): 1511782680 0,000 unknown History (rate): 1511782680 0,000 unknown Device: /org/freedesktop/UPower/devices/DisplayDevice power supply: yes updated: pon, 27 lis 2017, 12:38:00 (103 seconds ago) has history: no has statistics: no battery present: yes state: fully-charged warning-level: none energy: 38,26 Wh energy-full: 38,38 Wh energy-rate: 0 W percentage: 99% icon-name: 'battery-full-charged-symbolic' Daemon: daemon-version: 0.99.6 on-battery: no lid-is-closed: no lid-is-present: yes critical-action: PowerOff phpsysinfo-3.4.4/sample/plugin_bat/upower3.txt000066400000000000000000000046561467431054600215230ustar00rootroot00000000000000Device: /org/freedesktop/UPower/devices/line_power_AC native-path: AC power supply: yes updated: pon, 27 lis 2017, 12:38:00 (150 seconds ago) has history: no has statistics: no line-power warning-level: none online: yes icon-name: 'ac-adapter-symbolic' Device: /org/freedesktop/UPower/devices/battery_BAT0 native-path: BAT0 vendor: SANYO model: 45N1001 serial: 7311 power supply: yes updated: pon, 27 lis 2017, 12:40:04 (26 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: fully-charged warning-level: none energy: 38,26 Wh energy-empty: 0 Wh energy-full: 38,38 Wh energy-full-design: 56,16 Wh energy-rate: 0 W voltage: 12,455 V percentage: 99% capacity: 68,3405% technology: lithium-ion icon-name: 'battery-full-charged-symbolic' Device: /org/freedesktop/UPower/devices/mouse_0003o046DoC52Fx0002 native-path: /sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.1/0003:046D:C52F.0002 vendor: Logitech, Inc. model: M185 serial: 09A7C0B2 power supply: no updated: pon, 27 lis 2017, 12:40:00 (30 seconds ago) has history: yes has statistics: no mouse present: yes rechargeable: yes state: discharging warning-level: none percentage: 70% icon-name: 'battery-full-symbolic' History (charge): 1511782800 70,000 discharging Device: /org/freedesktop/UPower/devices/DisplayDevice power supply: yes updated: pon, 27 lis 2017, 12:38:00 (150 seconds ago) has history: no has statistics: no battery present: yes state: fully-charged warning-level: none energy: 38,26 Wh energy-full: 38,38 Wh energy-rate: 0 W percentage: 99% icon-name: 'battery-full-charged-symbolic' Daemon: daemon-version: 0.99.6 on-battery: no lid-is-closed: no lid-is-present: yes critical-action: PowerOff phpsysinfo-3.4.4/sample/plugin_bat/upower4.txt000066400000000000000000000012441467431054600215120ustar00rootroot00000000000000Device: /org/freedesktop/UPower/devices/keyboard_hid_e8o06o88o43o52od2_battery native-path: hid-e8:06:88:53:99:2a-battery model: Rick Uckers Keyboard power supply: no updated: Fri 15 Jan 2016 07:24:38 PM EDT (28 seconds ago) has history: yes has statistics: yes keyboard present: yes rechargeable: yes state: discharging warning-level: none percentage: 67% icon-name: 'battery-full-symbolic' Daemon: daemon-version: 0.9.23 on-battery: no lid-is-closed: no lid-is-present: no critical-action: PowerOffphpsysinfo-3.4.4/sample/plugin_bat/upower5.txt000066400000000000000000000014761467431054600215220ustar00rootroot00000000000000Device: /org/freedesktop/UPower/devices/keyboard_0003o046DoC52Bx000A native-path: /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.2/0003:046D:C52B.0009/0003:046D:C52B.000A vendor: Logitech, Inc. model: K800 serial: FB883B23 power supply: no updated: Wed 12 Feb 2014 12:11:10 PM CET (5 seconds ago) has history: yes has statistics: no keyboard present: yes rechargeable: yes state: discharging percentage: 55% History (charge): 1392203470 55.000 discharging Daemon: daemon-version: 0.9.23 can-suspend: no can-hibernate: no on-battery: no on-low-battery: no lid-is-closed: no lid-is-present: no is-docked: nophpsysinfo-3.4.4/sample/plugin_ps/000077500000000000000000000000001467431054600172175ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/plugin_ps/README000066400000000000000000000001621467431054600200760ustar00rootroot00000000000000FILE CONTENT OF ps1 ps -eo pid,ppid,pmem,args ps2 ps axo pid,ppid,pmem,args phpsysinfo-3.4.4/sample/plugin_ps/ps1.txt000066400000000000000000000032771467431054600204740ustar00rootroot00000000000000 PID PPID %MEM COMMAND 1 0 0.0 init [2] 31822 1 0.0 /sbin/syslogd 31847 1 0.0 /sbin/klogd -x 31861 1 0.0 /usr/sbin/sshd 1357 1 4.3 amavisd (master) 1918 1 0.3 ddclient - sleeping for 50 seconds 1923 1 1.0 /usr/bin/memcached -m 64 -p 11211 -u root 2001 1 0.1 /usr/lib/postfix/master 2006 1 0.0 /usr/sbin/vsftpd 2010 2001 0.1 qmgr -l -t fifo -u 2037 1 0.0 /usr/sbin/cron 3516 1 0.3 /usr/sbin/munin-node 3576 1 0.2 /usr/bin/fetchmail -f /etc/fetchmailrc --pidfile /var/run/fetchmail/fetchmail.pid --syslog 5266 2001 0.1 tlsmgr -l -t unix -u -c 32604 1 0.8 /usr/sbin/apache2 -k start 3097 1 0.0 /usr/bin/freshclam -d --quiet 3599 1 8.7 /usr/sbin/clamd 13505 1 0.0 /bin/sh /usr/bin/mysqld_safe 13545 13505 2.6 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock 13546 13505 0.0 logger -p daemon.err -t mysqld_safe -i -t mysqld 13988 1 0.0 /usr/sbin/dovecot 13989 13988 0.1 dovecot-auth 14041 13988 0.1 managesieve-login 14042 13988 0.1 managesieve-login 30094 13988 0.1 managesieve-login 15381 1357 4.5 amavisd (ch19-avail) 16215 13988 0.2 dovecot-auth -w 6095 2001 0.1 pickup -l -t fifo -u -c 9846 1357 4.4 amavisd (ch1-avail) 11585 13988 0.1 imap-login 22385 13988 0.1 imap-login 22421 32604 1.9 /usr/sbin/apache2 -k start 22424 32604 1.5 /usr/sbin/apache2 -k start 22425 32604 1.1 /usr/sbin/apache2 -k start 22432 32604 1.1 /usr/sbin/apache2 -k start 22433 32604 0.5 /usr/sbin/apache2 -k start 25851 13988 0.1 imap-login 26454 22424 0.0 ps -eo pid,ppid,pmem,args phpsysinfo-3.4.4/sample/plugin_ps/ps2.txt000066400000000000000000000137511467431054600204730ustar00rootroot00000000000000 PID PPID %MEM COMMAND 1 0 0.0 init [5] 2 0 0.0 [kthreadd] 3 2 0.0 [migration/0] 4 2 0.0 [ksoftirqd/0] 5 2 0.0 [events/0] 6 2 0.0 [khelper] 7 2 0.0 [kintegrityd/0] 8 2 0.0 [kblockd/0] 9 2 0.0 [kacpid] 10 2 0.0 [kacpi_notify] 11 2 0.0 [cqueue] 12 2 0.0 [kseriod] 13 2 0.0 [kondemand/0] 14 2 0.0 [pdflush] 15 2 0.0 [pdflush] 16 2 0.0 [kswapd0] 17 2 0.0 [aio/0] 18 2 0.0 [kpsmoused] 54 2 0.0 [ata/0] 55 2 0.0 [ata_aux] 57 2 0.0 [scsi_eh_0] 58 2 0.0 [scsi_eh_1] 202 2 0.0 [ksuspend_usbd] 203 2 0.0 [khubd] 510 2 0.0 [kjournald] 592 1 0.0 /sbin/udevd --daemon 818 2 0.0 [scsi_eh_2] 819 2 0.0 [usb-storage] 1303 2 0.0 [kauditd] 1326 2 0.0 [kstriped] 1363 2 0.0 [kjournald] 1385 1 0.0 /sbin/mount.ntfs-3g /dev/sda1 /windows/C -v -o rw,noexec,nosuid,nodev,users,gid=100,fmask=133,dmask=022,locale=de_DE.UTF-8 1808 1 0.0 /sbin/acpid 1827 1 0.0 /sbin/klogd -c 1 -x 1843 1 0.0 /sbin/syslog-ng 1853 1 0.0 /bin/dbus-daemon --system 1982 1 0.2 /usr/sbin/hald --daemon=yes 1991 1 0.1 /usr/sbin/console-kit-daemon 2054 1982 0.0 hald-runner 2129 2054 0.0 hald-addon-input: Listening on /dev/input/event4 /dev/input/event3 /dev/input/event2 /dev/input/event1 2223 2054 0.0 hald-addon-storage: no polling on /dev/fd0 because it is explicitly disabled 2234 2054 0.0 hald-addon-storage: polling /dev/sdb (every 2 sec) 2235 2054 0.0 hald-addon-storage: polling /dev/sdc (every 2 sec) 2238 2054 0.0 hald-addon-storage: polling /dev/sr0 (every 2 sec) 2246 2054 0.0 hald-addon-acpi: listening on acpid socket /var/run/acpid.socket 2478 1 0.0 /usr/bin/kdm 2492 2478 3.0 /usr/bin/Xorg -br -nolisten tcp :0 vt7 -auth /var/lib/xdm/authdir/authfiles/A:0-StlX1E 2873 1 0.0 /sbin/dhcpcd --netconfig -L -E -c /etc/sysconfig/network/scripts/dhcpcd-hook -t 0 -h linux-mcr eth0 2911 1 0.0 /sbin/rpcbind 3381 1 0.2 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf 3382 3381 0.3 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf 3383 3381 0.3 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf 3401 1 0.0 /sbin/auditd -s disable 3404 3401 0.0 /sbin/audispd 3422 1 0.0 avahi-daemon: running [linux-mcr.local] 3482 1 0.1 /usr/sbin/cupsd 3671 1 0.0 /usr/sbin/nscd 3701 1 0.0 /usr/sbin/ntpd -p /var/run/ntp/ntpd.pid -g -u ntp:ntp -i /var/lib/ntp -c /etc/ntp.conf 3761 1 0.0 /usr/sbin/smartd 3774 1 0.0 /usr/lib/postfix/master 3800 1 0.0 /usr/sbin/cron 3823 3774 0.0 pickup -l -t fifo -u 3824 3774 0.0 qmgr -l -t fifo -u 3843 1 0.0 /usr/sbin/sshd -o PidFile=/var/run/sshd.init.pid 3959 1 0.0 /sbin/mingetty --noclear tty1 3961 1 0.0 /sbin/mingetty tty2 3963 1 0.0 /sbin/mingetty tty3 3965 1 0.0 /sbin/mingetty tty4 3975 1 0.0 /sbin/mingetty tty5 3976 1 0.0 /sbin/mingetty tty6 4730 2478 0.1 -:0 4752 1 0.0 /bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session 4753 1 0.0 dbus-launch --autolaunch 9fe5b43331dd16711f578ff44a61a184 --binary-syntax --close-stderr 4777 4730 0.0 /bin/sh /usr/bin/startkde 4960 1 0.0 /bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session 4961 1 0.0 dbus-launch --sh-syntax --exit-with-session 4966 1 0.2 kdeinit4: kdeinit4 Running... 4967 4966 0.5 klauncher 4969 1 1.0 kded4 5008 4777 0.0 kwrapper4 ksmserver 5009 4966 1.4 ksmserver 5011 5009 1.7 kwin -session 1015110b9fd8000124791360500000100220000_1247938211_215332 5017 1 1.7 /usr/bin/knotify4 5018 1 1.5 /usr/bin/krunner 5020 1 2.0 /usr/bin/plasma 5024 1 0.5 /usr/bin/nepomukserver 5026 5024 0.6 /usr/bin/nepomukservicestub nepomukstorage 5027 5024 0.4 /usr/bin/nepomukservicestub nepomukfilewatch 5028 5024 0.4 /usr/bin/nepomukservicestub nepomukontologyloader 5030 1 0.4 /usr/bin/kaccess 5044 4966 0.5 /usr/bin/policykit-kde 5046 1 0.2 /usr/bin/pulseaudio --start 5053 1 1.1 beagled /usr/lib/beagle/BeagleDaemon.exe --replace --bg 5059 1 0.6 /usr/bin/kupdateapplet 5060 1 0.7 /usr/bin/kmix 5062 1 0.5 /usr/bin/klipper 5083 1 0.0 /usr/lib/kde4/libexec/kdesud 5309 1 2.3 amarokapp 5312 1 0.2 kdeinit Running... 5316 1 0.1 dcopserver [kdeinit] --nosid --suicide 5318 5312 0.3 klauncher [kdeinit] --new-startup 5320 1 0.5 kded [kdeinit] --new-startup 5342 5312 0.2 kio_file [kdeinit] file /tmp/ksocket-BigMic 5346 5309 0.5 yauap -noexit 5356 5309 0.1 ruby /opt/kde3/share/apps/amarok/scripts/score_default/score_default.rb 5440 1 0.4 knotify [kdeinit] 5465 1 0.4 /usr/bin/kwalletd 5495 1 1.0 beagled-helper /usr/lib/beagle/IndexHelper.exe 5536 1 0.6 kio_uiserver [kdeinit] 5621 1 1.1 /usr/bin/konsole 5623 5621 0.1 /bin/bash 5648 3381 0.3 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf 5661 3381 0.3 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf 5710 5623 0.2 /usr/bin/mc -P /tmp/mc-BigMichi1/mc.pwd.5623 5712 5710 0.1 bash -rcfile .bashrc 6305 4966 0.2 kdeinit4: kio_file [kdeinit] file local:/tmp/ksocket-BigMichi1/klauncherMT4967.slave-socket local:/tmp/ksocket-BigMichi1/konquerordx5442.slave-socket 6313 4966 0.0 /bin/sh /usr/bin/firefox 6318 6313 3.5 /usr/lib/firefox/firefox 6320 1 0.1 /usr/lib/GConf/2/gconfd-2 6332 1 0.1 /usr/lib/gvfs/gvfsd 6338 1 0.1 /usr/lib/gvfs//gvfs-fuse-daemon /home/BigMichi1/.gvfs 6389 3381 0.3 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf 6390 3381 0.3 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf 6395 3381 0.3 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf 6737 3381 0.3 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf 7003 5712 0.0 ps axo pid,ppid,pmem,args phpsysinfo-3.4.4/sample/plugin_psstatus/000077500000000000000000000000001467431054600204635ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/plugin_psstatus/README000066400000000000000000000002271467431054600213440ustar00rootroot00000000000000FILE CONTENT OF psstatus ps=("apache2" "mysqld" "sshd"); for((i=0;i<${#ps};i++)); do echo ${ps[$i]} "|" `pidof -s ${ps[$i]}` ;done phpsysinfo-3.4.4/sample/plugin_psstatus/psstatus1.txt000066400000000000000000000001071467431054600231710ustar00rootroot00000000000000apache2 | 15776 mysqld | 32349 sshd | 31861 bash | dovecot | 32055 | | phpsysinfo-3.4.4/sample/plugin_quotas/000077500000000000000000000000001467431054600201115ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/plugin_quotas/README000066400000000000000000000000721467431054600207700ustar00rootroot00000000000000FILE CONTENT OF quotas repquota -au phpsysinfo-3.4.4/sample/plugin_quotas/quotas1.txt000066400000000000000000000005321467431054600222470ustar00rootroot00000000000000Mon Dec 6 09:00:00 EST 2004 1K Block limits File limits User used soft hard grace used soft hard grace cherylstaff-- 2755724 0 0 15678 0 0 brucestaff -- 5738512 0 0 7830 0 0 phpsysinfo-3.4.4/sample/plugin_quotas/quotas2.txt000066400000000000000000000007601467431054600222530ustar00rootroot00000000000000*** Report for user quotas on device /dev/sda8 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- user1 -- 1742260 3072000 4096000 3067 0 0 user2 +- 3585440 3072000 4096000 6days 7565 0 0 user3 -- 114852 3072000 4096000 2645 0 0 phpsysinfo-3.4.4/sample/plugin_quotas/quotas3.txt000066400000000000000000000006351467431054600222550ustar00rootroot00000000000000 Block limits File limits User used soft hard grace used soft hard grace root -- 1049344 0 0 - 18003 0 0 - daemon -- 12 0 0 - 3 0 0 - operator -- 8 0 0 - 2 0 0 - man -- 500 0 0 - 125 0 0 - smmsp -- 8 0 0 - 2 0 0 - unbound -- 4 0 0 - 1 0 0 - uucp -- 4 0 0 - 1 0 0 - auditdistd -- 8 0 0 - 2 0 0 - nobody -- 0 0 0 - 1 0 0 - phpsysinfo-3.4.4/sample/plugin_raid/000077500000000000000000000000001467431054600175145ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/plugin_raid/raid3ware-status0.txt000066400000000000000000000003351467431054600235400ustar00rootroot00000000000000-- Controller informations -- -- ID | Model c0 | 8006-2LP -- Arrays informations -- -- ID Type Size Status c0u0 RAID1 153G OK -- Disks informations -- ID Model Status c0u0p0 VNRD3EC4C7J1SM OK c0u0p1 VNRD3EC4C7HZZM OK phpsysinfo-3.4.4/sample/plugin_raid/raid3ware-status1.txt000066400000000000000000000005551467431054600235450ustar00rootroot00000000000000-- Controller informations -- -- ID | Model c2 | 9500S-12 c3 | N/A -- Arrays informations -- -- ID Type Size Status c2u0 RAID1 1862G OK c3u0 RAID1 279G OK c3u2 RAID1 232G OK -- Disks informations -- ID Model Status c2u0p4 WDC WD20EZRX-32SPEB0 OK c2u0p5 WDC WD20EZRX-32D8PB0 OK c3u0p0 ST3300831A OK c3u0p1 ST3300831A OK c3u2p2 ST3250623A OK c3u2p3 ST3250624A OK phpsysinfo-3.4.4/sample/plugin_raid/raiddmraid1.txt000066400000000000000000000065311467431054600224430ustar00rootroot00000000000000NOTICE: /dev/sde: asr discovering NOTICE: /dev/sde: ddf1 discovering NOTICE: /dev/sde: hpt37x discovering NOTICE: /dev/sde: hpt45x discovering NOTICE: /dev/sde: isw discovering NOTICE: /dev/sde: isw metadata discovered NOTICE: /dev/sde: jmicron discovering NOTICE: /dev/sde: lsi discovering NOTICE: /dev/sde: nvidia discovering NOTICE: /dev/sde: pdc discovering NOTICE: /dev/sde: sil discovering NOTICE: /dev/sde: via discovering NOTICE: /dev/sdf: asr discovering NOTICE: /dev/sdf: ddf1 discovering NOTICE: /dev/sdf: hpt37x discovering NOTICE: /dev/sdf: hpt45x discovering NOTICE: /dev/sdf: isw discovering NOTICE: /dev/sdf: isw metadata discovered NOTICE: /dev/sdf: jmicron discovering NOTICE: /dev/sdf: lsi discovering NOTICE: /dev/sdf: nvidia discovering NOTICE: /dev/sdf: pdc discovering NOTICE: /dev/sdf: sil discovering NOTICE: /dev/sdf: via discovering NOTICE: /dev/sdb: asr discovering NOTICE: /dev/sdb: ddf1 discovering NOTICE: /dev/sdb: hpt37x discovering NOTICE: /dev/sdb: hpt45x discovering NOTICE: /dev/sdb: isw discovering NOTICE: /dev/sdb: isw metadata discovered NOTICE: /dev/sdb: jmicron discovering NOTICE: /dev/sdb: lsi discovering NOTICE: /dev/sdb: nvidia discovering NOTICE: /dev/sdb: pdc discovering NOTICE: /dev/sdb: sil discovering NOTICE: /dev/sdb: via discovering NOTICE: /dev/sda: asr discovering NOTICE: /dev/sda: ddf1 discovering NOTICE: /dev/sda: hpt37x discovering NOTICE: /dev/sda: hpt45x discovering NOTICE: /dev/sda: isw discovering NOTICE: /dev/sda: isw metadata discovered NOTICE: /dev/sda: jmicron discovering NOTICE: /dev/sda: lsi discovering NOTICE: /dev/sda: nvidia discovering NOTICE: /dev/sda: pdc discovering NOTICE: /dev/sda: sil discovering NOTICE: /dev/sda: via discovering NOTICE: /dev/sdc: asr discovering NOTICE: /dev/sdc: ddf1 discovering NOTICE: /dev/sdc: hpt37x discovering NOTICE: /dev/sdc: hpt45x discovering NOTICE: /dev/sdc: isw discovering NOTICE: /dev/sdc: isw metadata discovered NOTICE: /dev/sdc: jmicron discovering NOTICE: /dev/sdc: lsi discovering NOTICE: /dev/sdc: nvidia discovering NOTICE: /dev/sdc: pdc discovering NOTICE: /dev/sdc: sil discovering NOTICE: /dev/sdc: via discovering NOTICE: /dev/sdd: asr discovering NOTICE: /dev/sdd: ddf1 discovering NOTICE: /dev/sdd: hpt37x discovering NOTICE: /dev/sdd: hpt45x discovering NOTICE: /dev/sdd: isw discovering NOTICE: /dev/sdd: isw metadata discovered NOTICE: /dev/sdd: jmicron discovering NOTICE: /dev/sdd: lsi discovering NOTICE: /dev/sdd: nvidia discovering NOTICE: /dev/sdd: pdc discovering NOTICE: /dev/sdd: sil discovering NOTICE: /dev/sdd: via discovering NOTICE: added /dev/sde to RAID set "isw_jffegbfhc" NOTICE: added /dev/sdf to RAID set "isw_jffegbfhc" NOTICE: added /dev/sdb to RAID set "isw_deagibdgda" NOTICE: added /dev/sda to RAID set "isw_deagibdgda" NOTICE: added /dev/sdc to RAID set "isw_jffegbfhc" NOTICE: added /dev/sdd to RAID set "isw_jffegbfhc" *** Group superset isw_deagibdgda --> Active Subset name : isw_deagibdgda_root size : 125040896 stride : 128 type : mirror status : ok subsets: 0 devs : 2 spares : 0 *** Group superset isw_jffegbfhc --> Active Superset name : isw_jffegbfhc_data size : 3131113472 stride : 128 type : raid01 status : ok subsets: 2 devs : 4 spares : 0 phpsysinfo-3.4.4/sample/plugin_raid/raiddmraid2.txt000066400000000000000000000110361467431054600224400ustar00rootroot00000000000000ERROR: ddf1: seeking device "/dev/dm-4" to 18446744073709421056 ERROR: hpt37x: seeking device "/dev/dm-4" to 4608 ERROR: hpt45x: seeking device "/dev/dm-4" to 18446744073709547008 ERROR: pdc: seeking device "/dev/dm-4" to 137438913024 ERROR: pdc: seeking device "/dev/dm-4" to 137438920192 ERROR: pdc: seeking device "/dev/dm-4" to 137438927360 ERROR: pdc: seeking device "/dev/dm-4" to 137438934528 ERROR: sil: seeking device "/dev/dm-4" to 18446744073709289984 NOTICE: /dev/dm-5: asr discovering NOTICE: /dev/dm-5: ddf1 discovering NOTICE: /dev/dm-5: hpt37x discovering NOTICE: /dev/dm-5: hpt45x discovering NOTICE: /dev/dm-5: isw discovering NOTICE: /dev/dm-5: jmicron discovering NOTICE: /dev/dm-5: lsi discovering NOTICE: /dev/dm-5: nvidia discovering NOTICE: /dev/dm-5: pdc discovering NOTICE: /dev/dm-5: sil discovering NOTICE: /dev/dm-5: via discovering NOTICE: /dev/dm-4: asr discovering NOTICE: /dev/dm-4: ddf1 discovering NOTICE: /dev/dm-4: hpt37x discovering NOTICE: /dev/dm-4: hpt45x discovering NOTICE: /dev/dm-4: isw discovering NOTICE: /dev/dm-4: jmicron discovering NOTICE: /dev/dm-4: lsi discovering NOTICE: /dev/dm-4: nvidia discovering NOTICE: /dev/dm-4: pdc discovering NOTICE: /dev/dm-4: sil discovering NOTICE: /dev/dm-4: via discovering NOTICE: /dev/dm-3: asr discovering NOTICE: /dev/dm-3: ddf1 discovering NOTICE: /dev/dm-3: hpt37x discovering NOTICE: /dev/dm-3: hpt45x discovering NOTICE: /dev/dm-3: isw discovering NOTICE: /dev/dm-3: jmicron discovering NOTICE: /dev/dm-3: lsi discovering NOTICE: /dev/dm-3: nvidia discovering NOTICE: /dev/dm-3: pdc discovering NOTICE: /dev/dm-3: sil discovering NOTICE: /dev/dm-3: via discovering NOTICE: /dev/dm-2: asr discovering NOTICE: /dev/dm-2: ddf1 discovering NOTICE: /dev/dm-2: hpt37x discovering NOTICE: /dev/dm-2: hpt45x discovering NOTICE: /dev/dm-2: isw discovering NOTICE: /dev/dm-2: jmicron discovering NOTICE: /dev/dm-2: lsi discovering NOTICE: /dev/dm-2: nvidia discovering NOTICE: /dev/dm-2: pdc discovering NOTICE: /dev/dm-2: sil discovering NOTICE: /dev/dm-2: via discovering NOTICE: /dev/dm-1: asr discovering NOTICE: /dev/dm-1: ddf1 discovering NOTICE: /dev/dm-1: hpt37x discovering NOTICE: /dev/dm-1: hpt45x discovering NOTICE: /dev/dm-1: isw discovering NOTICE: /dev/dm-1: jmicron discovering NOTICE: /dev/dm-1: lsi discovering NOTICE: /dev/dm-1: nvidia discovering NOTICE: /dev/dm-1: pdc discovering NOTICE: /dev/dm-1: sil discovering NOTICE: /dev/dm-1: via discovering NOTICE: /dev/dm-0: asr discovering NOTICE: /dev/dm-0: ddf1 discovering NOTICE: /dev/dm-0: hpt37x discovering NOTICE: /dev/dm-0: hpt45x discovering NOTICE: /dev/dm-0: isw discovering NOTICE: /dev/dm-0: jmicron discovering NOTICE: /dev/dm-0: lsi discovering NOTICE: /dev/dm-0: nvidia discovering NOTICE: /dev/dm-0: pdc discovering NOTICE: /dev/dm-0: sil discovering NOTICE: /dev/dm-0: via discovering NOTICE: /dev/sda: asr discovering NOTICE: /dev/sda: ddf1 discovering NOTICE: /dev/sda: hpt37x discovering NOTICE: /dev/sda: hpt45x discovering NOTICE: /dev/sda: isw discovering NOTICE: /dev/sda: jmicron discovering NOTICE: /dev/sda: lsi discovering NOTICE: /dev/sda: nvidia discovering NOTICE: /dev/sda: pdc discovering NOTICE: /dev/sda: sil discovering NOTICE: /dev/sda: via discovering NOTICE: /dev/sdc: asr discovering NOTICE: /dev/sdc: ddf1 discovering NOTICE: /dev/sdc: ddf1 metadata discovered NOTICE: /dev/sdc: hpt37x discovering NOTICE: /dev/sdc: hpt45x discovering NOTICE: /dev/sdc: isw discovering NOTICE: /dev/sdc: jmicron discovering NOTICE: /dev/sdc: lsi discovering NOTICE: /dev/sdc: nvidia discovering NOTICE: /dev/sdc: pdc discovering NOTICE: /dev/sdc: sil discovering NOTICE: /dev/sdc: via discovering NOTICE: /dev/sdb: asr discovering NOTICE: /dev/sdb: ddf1 discovering NOTICE: /dev/sdb: ddf1 metadata discovered NOTICE: /dev/sdb: hpt37x discovering NOTICE: /dev/sdb: hpt45x discovering NOTICE: /dev/sdb: isw discovering NOTICE: /dev/sdb: jmicron discovering NOTICE: /dev/sdb: lsi discovering NOTICE: /dev/sdb: nvidia discovering NOTICE: /dev/sdb: pdc discovering NOTICE: /dev/sdb: sil discovering NOTICE: /dev/sdb: via discovering NOTICE: added /dev/sdc to RAID set ".ddf1_disks" NOTICE: added /dev/sdb to RAID set ".ddf1_disks" *** Group superset .ddf1_disks --> Active Subset name : ddf1_RAID1 size : 1953253376 stride : 128 type : mirror status : ok subsets: 0 devs : 2 spares : 0 phpsysinfo-3.4.4/sample/plugin_raid/raiddmraid3.txt000066400000000000000000000007611467431054600224440ustar00rootroot00000000000000ERROR: pdc: device /dev/hde broken in RAID set "pdc_bfcgjjgge" [1/2] ERROR: keeping degraded mirror set "pdc_bfcgjjgge" ERROR: pdc: device /dev/hdg broken in RAID set "pdc_dibachbhfh" [1/2] ERROR: keeping degraded mirror set "pdc_dibachbhfh" *** Set name : pdc_bfcgjjgge size : 78150656 stride : 128 type : mirror status : broken subsets: 0 devs : 1 spares : 0 *** Set name : pdc_dibachbhfh size : 78150656 stride : 128 type : mirror status : broken subsets: 0 devs : 1 spares : 0 phpsysinfo-3.4.4/sample/plugin_raid/raiddmraid4.txt000066400000000000000000000042001467431054600224350ustar00rootroot00000000000000NOTICE: skipping removable device /dev/sdd NOTICE: skipping removable device /dev/sde NOTICE: skipping removable device /dev/sdf NOTICE: skipping removable device /dev/sdg NOTICE: /dev/sdc: asr discovering NOTICE: /dev/sdc: ddf1 discovering NOTICE: /dev/sdc: hpt37x discovering NOTICE: /dev/sdc: hpt45x discovering NOTICE: /dev/sdc: isw discovering NOTICE: /dev/sdc: isw metadata discovered NOTICE: /dev/sdc: jmicron discovering NOTICE: /dev/sdc: lsi discovering NOTICE: /dev/sdc: nvidia discovering NOTICE: /dev/sdc: pdc discovering NOTICE: /dev/sdc: sil discovering NOTICE: /dev/sdc: via discovering NOTICE: /dev/sdb: asr discovering NOTICE: /dev/sdb: ddf1 discovering NOTICE: /dev/sdb: hpt37x discovering NOTICE: /dev/sdb: hpt45x discovering NOTICE: /dev/sdb: isw discovering NOTICE: /dev/sdb: isw metadata discovered NOTICE: /dev/sdb: jmicron discovering NOTICE: /dev/sdb: lsi discovering NOTICE: /dev/sdb: nvidia discovering NOTICE: /dev/sdb: pdc discovering NOTICE: /dev/sdb: sil discovering NOTICE: /dev/sdb: via discovering NOTICE: /dev/sda: asr discovering NOTICE: /dev/sda: ddf1 discovering NOTICE: /dev/sda: hpt37x discovering NOTICE: /dev/sda: hpt45x discovering NOTICE: /dev/sda: isw discovering NOTICE: /dev/sda: jmicron discovering NOTICE: /dev/sda: lsi discovering NOTICE: /dev/sda: nvidia discovering NOTICE: /dev/sda: pdc discovering NOTICE: /dev/sda: sil discovering NOTICE: /dev/sda: via discovering NOTICE: added /dev/sdc to RAID set "isw_bfdbhjciee" NOTICE: added /dev/sdb to RAID set "isw_bccajebghh" ERROR: isw: wrong number of devices in RAID set "isw_bccajebghh_DATA" [1/2] on /dev/sdb ERROR: isw: wrong number of devices in RAID set "isw_bfdbhjciee_DATA" [1/2] on /dev/sdc *** Group superset isw_bccajebghh --> *Inconsistent* Subset name : isw_bccajebghh_DATA size : 1953519872 stride : 128 type : mirror status : inconsistent subsets: 0 devs : 1 spares : 0 *** Group superset isw_bfdbhjciee --> *Inconsistent* Subset name : isw_bfdbhjciee_DATA size : 1953519872 stride : 128 type : mirror status : inconsistent subsets: 0 devs : 1 spares : 0 phpsysinfo-3.4.4/sample/plugin_raid/raiddmraid5.txt000066400000000000000000000011361467431054600224430ustar00rootroot00000000000000NOTICE: added /dev/sdd to RAID set "pdc_cifgjhgjdd-1" NOTICE: added /dev/sde to RAID set "pdc_cifgjhgjdd-1" NOTICE: added /dev/sdc to RAID set "pdc_cifgjhgjdd-0" NOTICE: added /dev/sdb to RAID set "pdc_cifgjhgjdd-0" *** Active Superset name : pdc_cifgjhgjdd size : 3517532672 stride : 128 type : raid10 status : ok subsets: 2 devs : 4 spares : 0 --> Active Subset name : pdc_cifgjhgjdd-0 size : 3517532672 stride : 128 type : stripe status : ok subsets: 0 devs : 2 spares : 0 --> Active Subset name : pdc_cifgjhgjdd-1 size : 3517532672 stride : 128 type : stripe status : ok subsets: 0 devs : 2 spares : 0 phpsysinfo-3.4.4/sample/plugin_raid/raidgraid1.txt000066400000000000000000000014121467431054600222620ustar00rootroot00000000000000Geom name: Intel-76494d3c State: OPTIMAL Metadata: Intel Providers: 1. Name: raid/r0 Mediasize: 1000202043392 (931G) Sectorsize: 512 Stripesize: 4096 Stripeoffset: 0 Mode: r2w2e3 Subdisks: ada0 (ACTIVE), ada1 (ACTIVE) Dirty: Yes State: OPTIMAL Strip: 65536 Components: 2 Transformation: RAID1 RAIDLevel: RAID1 Label: lstewart Consumers: 1. Name: ada0 Mediasize: 1000204886016 (931G) Sectorsize: 512 Stripesize: 4096 Stripeoffset: 0 Mode: r1w1e1 ReadErrors: 0 Subdisks: r0(lstewart):0 0 State: ACTIVE (ACTIVE) 2. Name: ada1 Mediasize: 1000204886016 (931G) Sectorsize: 512 Stripesize: 4096 Stripeoffset: 0 Mode: r1w1e1 ReadErrors: 0 Subdisks: r0(lstewart):1 0 State: ACTIVE (ACTIVE) phpsysinfo-3.4.4/sample/plugin_raid/raidgraid2.txt000066400000000000000000000016001467431054600222620ustar00rootroot00000000000000Geom name: Intel-19a4a771 State: OPTIMAL Metadata: Intel Providers: 1. Name: raid/r0 Mediasize: 900207083520 (838G) Sectorsize: 512 Stripesize: 131072 Stripeoffset: 0 Mode: r1w1e1 Subdisks: ada1 (ACTIVE), ada4 (ACTIVE), ada5 (ACTIVE) Dirty: No State: OPTIMAL Strip: 131072 Components: 3 Transformation: RAID0 RAIDLevel: RAID0 Label: speeddisk descr: Intel RAID0 volume Consumers: 1. Name: ada1 Mediasize: 320072933376 (298G) Sectorsize: 512 Mode: r1w1e1 ReadErrors: 0 Subdisks: r0(speeddisk):0@0 State: ACTIVE (ACTIVE) 2. Name: ada4 Mediasize: 300069052416 (279G) Sectorsize: 512 Mode: r1w1e1 ReadErrors: 0 Subdisks: r0(speeddisk):1@0 State: ACTIVE (RESYNC 4%) 3. Name: ada5 Mediasize: 300069052416 (279G) Sectorsize: 512 Mode: r1w1e1 ReadErrors: 0 Subdisks: r0(speeddisk):2@0 State: ACTIVE (ACTIVE) phpsysinfo-3.4.4/sample/plugin_raid/raididrac1.txt000066400000000000000000000270311467431054600222630ustar00rootroot00000000000000.1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.1.1 = INTEGER: 1 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.2.1 = STRING: "PERC H310 Mini (Embedded)" .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.7.1 = INTEGER: 30 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.8.1 = STRING: "20.12.1-0002" .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.9.1 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.37.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.38.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.41.1 = STRING: "--NA--" .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.42.1 = STRING: "Embedded" .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.48.1 = INTEGER: 30 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.49.1 = INTEGER: 30 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.50.1 = INTEGER: 30 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.51.1 = INTEGER: 30 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.52.1 = INTEGER: 4 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.53.1 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.59.1 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.60.1 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.61.1 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.62.1 = INTEGER: 30 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.69.1 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.70.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.71.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.72.1 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.73.1 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.74.1 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.75.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.76.1 = INTEGER: 4 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.77.1 = STRING: "0x5A12A330G1234000" .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.78.1 = STRING: "RAID.Integrated.1-1" .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.79.1 = STRING: "Integrated RAID Controller 1" .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.80.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.81.1 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.82.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.83.1 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.84.1 = INTEGER: 1 .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.1.1 = INTEGER: 1 .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.2.1 = STRING: "BP12G+ 0:1" .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.4.1 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.8.1 = STRING: "Not Applicable" .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.9.1 = STRING: "Not Applicable" .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.19.1 = STRING: "Not Applicable" .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.23.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.24.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.26.1 = STRING: "1.00" .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.30.1 = STRING: "0x5D12A330G1234000" .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.31.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.32.1 = INTEGER: 4 .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.40.1 = STRING: "Not Applicable" .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.41.1 = STRING: "Not Applicable" .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.42.1 = STRING: "Not Applicable" .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.43.1 = STRING: "Not Applicable" .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.44.1 = STRING: "Not Applicable" .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.45.1 = STRING: "Not Applicable" .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.46.1 = STRING: "1" .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.47.1 = STRING: "Enclosure.Internal.0-1:RAID.Integrated.1-1" .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.48.1 = STRING: "Backplane 1 on Connector 0 of Integrated RAID Controller 1" .1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.49.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.1.1 = INTEGER: 1 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.1.2 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.1.3 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.2.1 = STRING: "Physical Disk 0:1:0" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.2.2 = STRING: "Physical Disk 0:1:1" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.2.3 = STRING: "Physical Disk 0:1:3" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.3.1 = STRING: "WD" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.3.2 = STRING: "WD" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.3.3 = STRING: "WD" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.2 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.3 = INTEGER: 8 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.6.1 = STRING: "WD6001BKHG" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.6.2 = STRING: "WD6001BKHG" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.6.3 = STRING: "WD6001BKHG" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.7.1 = STRING: "WXH1E72ABC11" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.7.2 = STRING: "WXH1E72ABC22" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.7.3 = STRING: "WXH1E72ABC33" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.8.1 = STRING: "D1S6" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.8.2 = STRING: "D1S6" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.8.3 = STRING: "D1S6" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.11.1 = INTEGER: 571776 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.11.2 = INTEGER: 571776 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.11.3 = INTEGER: 571776 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.17.1 = INTEGER: 571776 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.17.2 = INTEGER: 571776 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.17.3 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.19.1 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.19.2 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.19.3 = INTEGER: 571776 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.21.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.21.2 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.21.3 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22.1 = INTEGER: 1 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22.2 = INTEGER: 1 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22.3 = INTEGER: 1 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24.2 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24.3 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.27.1 = STRING: "MY096G911255541GI9ABC04" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.27.2 = STRING: "MY096G911255541FI9ABC04" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.27.3 = STRING: "MY096G911255541GI9ABC04" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.28.1 = STRING: "0x50000C0F0231234E" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.28.2 = STRING: "0x50000C0F02E1234E" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.28.3 = STRING: "0x50000C0F0291234E" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.29.1 = INTEGER: 4 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.29.2 = INTEGER: 4 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.29.3 = INTEGER: 4 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.30.1 = INTEGER: 4 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.30.2 = INTEGER: 4 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.30.3 = INTEGER: 4 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.1 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.2 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.3 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.32.1 = STRING: "7" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.32.2 = STRING: "7" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.32.3 = STRING: "7" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.33.1 = STRING: "3" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.33.2 = STRING: "3" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.33.3 = STRING: "3" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.34.1 = STRING: "2014" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.34.2 = STRING: "2014" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.34.3 = STRING: "2014" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.35.1 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.35.2 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.35.3 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.42.1 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.42.2 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.42.3 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.49.1 = INTEGER: 255 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.49.2 = INTEGER: 255 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.49.3 = INTEGER: 255 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.50.1 = INTEGER: 1 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.50.2 = INTEGER: 1 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.50.3 = INTEGER: 1 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.51.1 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.51.2 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.51.3 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.52.1 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.52.2 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.52.3 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.53.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.53.2 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.53.3 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54.1 = STRING: "Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54.2 = STRING: "Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54.3 = STRING: "Disk.Bay.3:Enclosure.Internal.0-1:RAID.Integrated.1-1" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55.1 = STRING: "Disk 0 in Backplane 1 of Integrated RAID Controller 1" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55.2 = STRING: "Disk 1 in Backplane 1 of Integrated RAID Controller 1" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55.3 = STRING: "Disk 3 in Backplane 1 of Integrated RAID Controller 1" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.57.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.57.2 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.57.3 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.58.1 = INTEGER: 512 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.58.2 = INTEGER: 512 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.58.3 = INTEGER: 512 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.59.1 = STRING: "Not Applicable" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.59.2 = STRING: "Not Applicable" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.59.3 = STRING: "Not Applicable" .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.60.1 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.60.2 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.60.3 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.61.1 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.61.2 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.61.3 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.1.1 = INTEGER: 1 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.2.1 = STRING: "RAID1" .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.4.1 = INTEGER: 2 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.6.1 = INTEGER: 571776 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.10.1 = INTEGER: 1 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.11.1 = INTEGER: 1 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.13.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.14.1 = INTEGER: 10 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.20.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.23.1 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.24.1 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.25.1 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.26.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.30.1 = INTEGER: 1 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.31.1 = INTEGER: 0 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.32.1 = STRING: "SAS" .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.33.1 = STRING: "HDD" .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.34.1 = INTEGER: 1 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.35.1 = STRING: "Disk.Virtual.0:RAID.Integrated.1-1" .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.36.1 = STRING: "Virtual Disk 0 on Integrated RAID Controller 1" .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.37.1 = INTEGER: 3 .1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.38.1 = INTEGER: 512 phpsysinfo-3.4.4/sample/plugin_raid/raidmdstat1.txt000066400000000000000000000003301467431054600224660ustar00rootroot00000000000000Personalities : [linear] [raid0] [raid1] [raid5] [hsm] read_ahead 1024 sectors md0 : active raid5 sdd1[3] sdc6[2] sdb6[1] sda5[0] 633984 blocks level 5, 32k chunk, algorithm 2 [4/4] [UUUU] unused devices: phpsysinfo-3.4.4/sample/plugin_raid/raidmdstat10.txt000066400000000000000000000004441467431054600225540ustar00rootroot00000000000000Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdb[5] sda[0] sdd[4] sdc[2] 2197329408 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [U_UU] [>....................] recovery = 0.0% (683200/732443136) finish=592.4min speed=20586K/sec unused devices: phpsysinfo-3.4.4/sample/plugin_raid/raidmdstat11.txt000066400000000000000000000004461467431054600225570ustar00rootroot00000000000000Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdb[5] sda[0] sdd[4] sdc[2] 2197329408 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [U_UU] [>....................] recovery = 2.5% (18700800/732443136) finish=742.1min speed=16028K/sec unused devices: phpsysinfo-3.4.4/sample/plugin_raid/raidmdstat12.txt000066400000000000000000000004471467431054600225610ustar00rootroot00000000000000Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdb[5] sda[0] sdd[4] sdc[2] 2197329408 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [U_UU] [===>.................] recovery = 18.9% (138755104/732443136) finish=482.8min speed=20493K/sec unused devices: phpsysinfo-3.4.4/sample/plugin_raid/raidmdstat13.txt000066400000000000000000000011441467431054600225550ustar00rootroot00000000000000Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath] md1 : active raid1 sdb3[0] sda3[1] 3897063616 blocks super 1.0 [2/2] [UU] md256 : active raid1 sda2[1] sdb2[0] 530112 blocks super 1.0 [2/2] [UU] bitmap: 0/1 pages [0KB], 65536KB chunk md13 : active raid1 sdb4[0] sda4[1] 458880 blocks super 1.0 [24/2] [UU______________________] bitmap: 1/1 pages [4KB], 65536KB chunk md9 : active raid1 sdb1[0] sda1[1] 530048 blocks super 1.0 [24/2] [UU______________________] bitmap: 1/1 pages [4KB], 65536KB chunk unused devices: phpsysinfo-3.4.4/sample/plugin_raid/raidmdstat14.txt000066400000000000000000000002641467431054600225600ustar00rootroot00000000000000Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md_d0 : inactive sda4[0](S) 241095104 blocks unused devices: sdb sdd phpsysinfo-3.4.4/sample/plugin_raid/raidmdstat15.txt000066400000000000000000000003571467431054600225640ustar00rootroot00000000000000Personalities : [raid1] md1 : active (auto-read-only) raid1 sde1[1] sdd1[0] 976630336 blocks super 1.2 [2/2] [UU] resync=PENDING md0 : active raid1 sdb1[0] sdc1[1] 1953511936 blocks [2/2] [UU] unused devices: phpsysinfo-3.4.4/sample/plugin_raid/raidmdstat2.txt000066400000000000000000000003331467431054600224720ustar00rootroot00000000000000Personalities : [linear] [raid0] [raid1] [raid5] [hsm] read_ahead 1024 sectors md0 : active raid5 sdd1[3](F) sdc6[2] sdb6[1] sda5[0] 633984 blocks level 5, 32k chunk, algorithm 2 [4/3] [UUU_] unused devices: phpsysinfo-3.4.4/sample/plugin_raid/raidmdstat3.txt000066400000000000000000000003201467431054600224670ustar00rootroot00000000000000Personalities : [linear] [raid0] [raid1] [raid5] [hsm] read_ahead 1024 sectors md0 : active raid5 sdc6[2] sdb6[1] sda5[0] 633984 blocks level 5, 32k chunk, algorithm 2 [4/3] [UUU_] unused devices: phpsysinfo-3.4.4/sample/plugin_raid/raidmdstat4.txt000066400000000000000000000003621467431054600224760ustar00rootroot00000000000000Personalities : [linear] [raid0] [raid1] [raid5] [hsm] read_ahead 1024 sectors md0 : active raid5 sdd1[4] sdc6[2] sdb6[1] sda5[0] 633984 blocks level 5, 32k chunk, algorithm 2 [4/3] [UUU_] recovery=7% finish=4.3min unused devices: phpsysinfo-3.4.4/sample/plugin_raid/raidmdstat5.txt000066400000000000000000000003301467431054600224720ustar00rootroot00000000000000Personalities : [linear] [raid0] [raid1] [raid5] [hsm] read_ahead 1024 sectors md0 : active raid5 sdd1[3] sdc6[2] sdb6[1] sda5[0] 633984 blocks level 5, 32k chunk, algorithm 2 [4/4] [UUUU] unused devices: phpsysinfo-3.4.4/sample/plugin_raid/raidmdstat6.txt000066400000000000000000000004221467431054600224750ustar00rootroot00000000000000Personalities : [raid6] [raid5] [raid4] md1 : active raid5 hdc4[3] hdc3[1] hdc2[0] 3906816 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_] [===>.................] recovery = 16.5% (324080/1953408) finish=8.1min speed=3315K/sec unused devices: phpsysinfo-3.4.4/sample/plugin_raid/raidmdstat7.txt000066400000000000000000000002771467431054600225060ustar00rootroot00000000000000Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sdi1[3] sde1[2] sdd1[1] sdc1[0] 2197715712 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU] unused devices: phpsysinfo-3.4.4/sample/plugin_raid/raidmdstat8.txt000066400000000000000000000006441467431054600225050ustar00rootroot00000000000000Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md1 : active raid1 sdb2[2](F) sda2[1] 155181952 blocks super 1.2 [2/1] [U_] md0 : active raid1 sdb1[2] sda1[1] 975296 blocks super 1.2 [2/2] [UU] md2 : active raid5 sdf1[3] sdc1[0] sdd1[1] sde1[2] 1464758784 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU] unused devices: phpsysinfo-3.4.4/sample/plugin_raid/raidmdstat9.txt000066400000000000000000000004271467431054600225050ustar00rootroot00000000000000Personalities : [raid6] [raid5] [raid4] md0 : active raid6 sda1[0] sdd1[4] sde1[5] sdf1[2] sdb1[1] 2929683456 blocks super 1.2 level 6, 1024k chunk, algorithm 2 [5/5] [UUUUU] bitmap: 0/8 pages [0KB], 65536KB chunk, file: /var/md0_intent unused devices: phpsysinfo-3.4.4/sample/plugin_raid/raidmegaclisas-status1.txt000066400000000000000000000032601467431054600246300ustar00rootroot00000000000000-- Controller information -- -- ID | H/W Model | RAM | Temp | Firmware c0 | LSI MegaRAID SAS 9271-8i | 1024MB | 88C | FW: 23.32.0-0009 c1 | LSI MegaRAID SAS 9280-4i4e | 512MB | N/A | FW: 12.15.0-0205 -- Array information -- -- ID | Type | Size | Strpsz | Flags | DskCache | Status | OS Path | InProgress c0u0 | RAID-1 | 1817G | 256 KB | ADRA,WT | Enabled | Optimal | /dev/sda | None c0u1 | RAID-5 | 16370G | 512 KB | ADRA,WB | Enabled | Optimal | /dev/sdb | None c1u0 | RAID-0 | 476G | 256 KB | ADRA,WT | Enabled | Optimal | /dev/sdc | None -- Disk information -- -- ID | Type | Drive Model | Size | Status | Speed | Temp | Slot ID | LSI Device ID c0u0p0 | HDD | WD-WMC300412345WDC WD20EFRX-68AX9N0 80.00A80 | 1.817 TB | Online, Spun Up | 6.0Gb/s | 31C | [252:4] | 17 c0u0p1 | HDD | WD-WMC300412346WDC WD20EFRX-68AX9N0 80.00A80 | 1.817 TB | Online, Spun Up | 6.0Gb/s | 31C | [252:5] | 18 c0u1p0 | HDD | WD-WX41DA40ABC1WDC WD60EFRX-68MYMN1 82.00A82 | 5.456 TB | Online, Spun Up | 6.0Gb/s | 32C | [252:0] | 15 c0u1p1 | HDD | WD-WX41DA40ABC2WDC WD60EFRX-68MYMN1 82.00A82 | 5.456 TB | Online, Spun Up | 6.0Gb/s | 31C | [252:1] | 12 c0u1p2 | HDD | WD-WX61DA4HABCDWDC WD60EFRX-68MYMN1 82.00A82 | 5.456 TB | Online, Spun Up | 6.0Gb/s | 32C | [252:6] | 14 c0u1p3 | HDD | WD-WX41DA40ABC1WDC WD60EFRX-68MYMN1 82.00A82 | 5.456 TB | Online, Spun Up | 6.0Gb/s | 31C | [252:7] | 16 c1u0p0 | SSD | 0000000012345678CDE1M2-CT512M4SSD2 070H | 476.4 Gb | Online, Spun Up | 6.0Gb/s | N/A | [252:1] | 11 phpsysinfo-3.4.4/sample/plugin_raid/raidmegaclisas-status2.txt000066400000000000000000000020141467431054600246250ustar00rootroot00000000000000-- Controller information -- -- ID | H/W Model | RAM | Temp | BBU | Firmware c0 | PERC H310 Mini | 0MB | 57C | Absent | FW: 20.12.1-0002 -- Array information -- -- ID | Type | Size | Strpsz | Flags | DskCache | Status | OS Path | CacheCade |InProgress c0u0 | RAID-1 | 558G | 64 KB | RA,WT | Default | Optimal | /dev/sdb | None |None -- Disk information -- -- ID | Type | Drive Model | Size | Status | Speed | Temp | Slot ID | LSI ID c0u0p0 | HDD | WD WD6001BKHG D1S6WXH1E93ABC99 | 558.3 Gb | Online, Spun Up | 6.0Gb/s | 30C | [32:0] | 0 c0u0p1 | HDD | WD WD6001BKHG D1S6WXH1E93DEF99 | 558.3 Gb | Online, Spun Up | 6.0Gb/s | 29C | [32:1] | 1 -- Unconfigured Disk information -- -- ID | Type | Drive Model | Size | Status | Speed | Temp | Slot ID | LSI ID | Path c0uXpY | HDD | WD WD6001BKHG D1S6WXH1E93GHI99 | 558.3 Gb | JBOD | 6.0Gb/s | 26C | [32:3] | 3 | /dev/sda phpsysinfo-3.4.4/sample/plugin_raid/raidmegaclisas-status3.txt000066400000000000000000000023361467431054600246350ustar00rootroot00000000000000-- Controller information -- -- ID | H/W Model | RAM | Temp | BBU | Firmware c0 | LSI 2108 MegaRAID | 512MB | N/A | Good | FW: 12.15.0-0239 -- Array information -- -- ID | Type | Size | Strpsz | Flags | DskCache | Status | OS Path | CacheCade |InProgress c0u0 | RAID-5 | 7271G | 64 KB | RA,WB | Default | Optimal | /dev/sdf | None |Background Initialization : Completed 34%, Taken 80 min. -- Disk information -- -- ID | Type | Drive Model | Size | Status | Speed | Temp | Slot ID | LSI ID c0u0p0 | HDD | WD-WMC300123451WDC WD20EFRX-68AAZN0 80.00A80 | 1.817 TB | Online, Spun Up | 6.0Gb/s | 28C | [252:0] | 13 c0u0p1 | HDD | WD-WMC300123452WDC WD20EFRX-68EBZN0 82.00A82 | 1.817 TB | Online, Spun Up | 6.0Gb/s | 29C | [252:1] | 15 c0u0p2 | HDD | WD-WMC300123453WDC WD20EFRX-68ECZN0 82.00A82 | 1.817 TB | Online, Spun Up | 6.0Gb/s | 28C | [252:2] | 14 c0u0p3 | HDD | WD-WMC300123454WDC WD20EFRX-68ADZN0 80.00A80 | 1.817 TB | Online, Spun Up | 6.0Gb/s | 28C | [252:3] | 16 c0u0p4 | HDD | WD-WMC300123455WDC WD20EFRX-68EEZN0 82.00A82 | 1.817 TB | Online, Spun Up | 6.0Gb/s | 28C | [252:4] | 17 phpsysinfo-3.4.4/sample/plugin_raid/raidmegaclisas-status4.txt000066400000000000000000000006401467431054600246320ustar00rootroot00000000000000-- Controller informations -- -- ID | Model | Firmware c0 | PERC H710 Mini | 21.3.4-0001 -- Arrays informations -- -- ID | Type | Size | Status | InProgress c0u0 | RAID5 | 1089G | Optimal | None -- Disks informations -- ID | Model | Status c0u0p0 | WD WD6001BKHG D1S6WX11E80AB123 | Online, Spun Up c0u0p1 | WD WD6001BKHG D1S6WX11E80CD456 | Online, Spun Up c0u0p2 | WD WD6001BKHG D1S6WX11E80EF789 | Online, Spun Up phpsysinfo-3.4.4/sample/plugin_raid/raidmegaclisas-status5.txt000066400000000000000000000024411467431054600246340ustar00rootroot00000000000000-- Controller information -- -- ID | H/W Model | RAM | Temp | BBU | Firmware c0 | LSI 2108 MegaRAID | 512MB | N/A | Good | FW: 12.15.0-0239 -- Array information -- -- ID | Type | Size | Strpsz | Flags | DskCache | Status | OS Path | CacheCade |InProgress c0u0 | RAID-5 | 7271G | 64 KB | RA,WB | Default | Degraded | /dev/sdf | None |None -- Disk information -- -- ID | Type | Drive Model | Size | Status | Speed | Temp | Slot ID | LSI ID c0u0p0 | HDD | WD-WCC123456789WDC WD20EFRX-68AA110 80.00A80 | 1.817 TB | Rebuilding (9%) | 6.0Gb/s | 20C | [252:0] | 13 c0u0p1 | HDD | WD-WCC234567890WDC WD20EFRX-68AA220 80.00A80 | 1.817 TB | Online, Spun Up | 6.0Gb/s | 25C | [252:1] | 15 c0u0p2 | HDD | WD-WCC345678901WDC WD20EFRX-68AA330 80.00A80 | 1.817 TB | Online, Spun Up | 6.0Gb/s | 25C | [252:2] | 14 c0u0p3 | HDD | WD-WMC456789012WDC WD20EFRX-68AA440 80.00A80 | 1.817 TB | Online, Spun Up | 6.0Gb/s | 25C | [252:3] | 16 c0u0p4 | HDD | WD-WCC567890123WDC WD20EFRX-68AA550 80.00A80 | 1.817 TB | Online, Spun Up | 6.0Gb/s | 25C | [252:4] | 17 There is at least one disk/array in a NOT OPTIMAL state. RAID ERROR - Arrays: OK:0 Bad:1 - Disks: OK:5 Bad:0 phpsysinfo-3.4.4/sample/plugin_raid/raidmegactl1.txt000066400000000000000000000003021467431054600226050ustar00rootroot00000000000000a0 PERC 4/Di chan:2 ldrv:1 batt:good a0d0 273GiB RAID 5 1x3 optimal a0c0t0 136GiB a0d0 online a0c0t1 136GiB a0d0 online a0c0t2 136GiB a0d0 online phpsysinfo-3.4.4/sample/plugin_raid/raidmegactl2.txt000066400000000000000000000005321467431054600226130ustar00rootroot00000000000000a0 MegaRAID SCSI 320-1 chan:1 ldrv:2 batt:FAULT, module missing a0d0 68GiB RAID 1 1x2 optimal a0d1 137GiB RAID 10 2x2 optimal a0c0t0 68GiB a0d0 online a0c0t1 68GiB a0d0 online a0c0t2 68GiB a0d1 online a0c0t3 68GiB a0d1 online a0c0t4 68GiB a0d1 online a0c0t5 68GiB a0d1 online phpsysinfo-3.4.4/sample/plugin_raid/raidmegactl3.txt000066400000000000000000000003561467431054600226200ustar00rootroot00000000000000a0 PERC 3/DC bios:3.35 fw:199A chan:2 ldrv:1 rbld:30% batt:good a0d0 273GiB RAID 5 1x4 DEGRADED a0c0t0 136GiB a0d0 online a0c0t1 136GiB a0d0 online a0c0t2 136GiB a0d0 rebuild a0c0t3 136GiB a0d0 onlinephpsysinfo-3.4.4/sample/plugin_raid/raidmegactl4.txt000066400000000000000000000015671467431054600226260ustar00rootroot00000000000000a0 PERC 4e/Di bios:H433 fw:5A2D chan:2 ldrv:1 rbld:30% batt:good a0d0 838GiB RAID 5 1x4 optimal hot spares : a0c0t4 a0c0t0 279GiB a0d0 online a0c0t1 279GiB a0d0 online a0c0t2 279GiB a0d0 online a0c0t3 279GiB a0d0 online a0c0t4 279GiB hotspare a1 PERC 4/DC chan:2 ldrv:2 batt:good a1d0 68GiB RAID 1 1x2 optimal a1d1 1TiB RAID 5 1x12 optimal hot spares : a0c1t8 a1c0t0 68GiB a1d0 online a1c0t1 68GiB a1d0 online a1c1t1 136GiB a1d1 online a1c1t2 136GiB a1d1 online a1c1t3 136GiB a1d1 online a1c1t4 136GiB a1d1 online a1c1t5 136GiB a1d1 online a1c1t8 136GiB hotspare a1c1t9 136GiB a1d1 online a1c1t10 136GiB a1d1 online a1c1t11 136GiB a1d1 online a1c1t12 136GiB a1d1 online a1c1t13 136GiB a1d1 online a1c1t14 136GiB a1d1 online a1c1t15 136GiB a1d1 online phpsysinfo-3.4.4/sample/plugin_raid/raidmegasasctl1.txt000066400000000000000000000003601467431054600233200ustar00rootroot00000000000000a0 PERC H310 Mini encl:1 ldrv:1 batt:FAULT, module missing, pack missing, charge failed a0d0 1TiB RAID 5 1x3 optimal a0e32s0 558GiB a0d0 online a0e32s1 558GiB a0d0 online a0e32s2 558GiB a0d0 online phpsysinfo-3.4.4/sample/plugin_raid/raidmegasasctl2.txt000066400000000000000000000002421467431054600233200ustar00rootroot00000000000000a0 PERC 5/i Integrated encl:1 ldrv:1 batt:good a0d0 136GiB RAID 1 1x2 optimal a0e8s0 136GiB a0d0 online a0e8s1 136GiB a0d0 online phpsysinfo-3.4.4/sample/plugin_raid/raidmegasasctl3.txt000066400000000000000000000005111467431054600233200ustar00rootroot00000000000000a0 PERC 5/i Integrated encl:1 ldrv:2 batt:good a0d0 67GiB RAID 1 1x2 optimal a0d1 836GiB RAID 5 1x4 optimal a0e8s0 68GiB a0d0 online a0e8s1 68GiB a0d0 online a0e8s2 279GiB a0d1 online a0e8s3 279GiB a0d1 online a0e8s4 279GiB a0d1 online a0e8s5 279GiB a0d1 online phpsysinfo-3.4.4/sample/plugin_raid/raidmegasasctl4.txt000066400000000000000000000004511467431054600233240ustar00rootroot00000000000000a0 PERC 6/i Integrated encl:1 ldrv:1 batt:good a0d0 1861GiB RAID 6 1x6 optimal a0e32s0 465GiB a0d0 online a0e32s1 465GiB a0d0 online a0e32s2 465GiB a0d0 online a0e32s3 465GiB a0d0 online a0e32s4 465GiB a0d0 online a0e32s5 465GiB a0d0 online phpsysinfo-3.4.4/sample/plugin_raid/raidmegasasctl5.txt000066400000000000000000000004121467431054600233220ustar00rootroot00000000000000a0 PERC H310 Mini encl:1 ldrv:1 batt:FAULT, module missing, pack missing, charge failed a0d0 558GiB RAID 1 1x2 optimal unconfigured: a0e32s3 a0e32s0 558GiB a0d0 online a0e32s1 558GiB a0d0 online a0e32s3 558GiB ready phpsysinfo-3.4.4/sample/plugin_raid/raidmegasasctl6.txt000066400000000000000000000012071467431054600233260ustar00rootroot00000000000000a0 PERC H710 Mini bios:5.42.00.1_4.12.0 fw:3.131.05-8148 encl:1 ldrv:2 rbld:30% mem:512MiB batt:good/3874mV/48C a0d0 558GiB RAID 1 1x2 optimal row 0: a0e32s0 a0e32s1 a0d1 558GiB RAID 1 1x2 optimal row 0: a0e32s2 a0e32s3 a0e32s0 WD WD6001BKHG rev:D1S6 s/n:WXH1E98ABC01 558GiB a0d0 online a0e32s1 WD WD6001BKHG rev:D1S6 s/n:WXH1E98CDE01 558GiB a0d0 online a0e32s2 SEAGATE ST600MM0069 rev:ST33 s/n:WFJ5AB12 558GiB a0d1 online a0e32s3 WD WD6001BKHG rev:D1S6 s/n:WXH1E98EFG01 558GiB a0d1 online phpsysinfo-3.4.4/sample/plugin_raid/raidmegasasctl7.txt000066400000000000000000000012501467431054600233250ustar00rootroot00000000000000a0 MegaRAID SAS 8704ELP bios:2.07.00 fw:1.40.42-0615 encl:1 ldrv:2 rbld:30% mem:128MiB batt:FAULT, module missing, pack missing, charge failed/0mV/0C a0d0 1861GiB RAID 1 1x2 optimal row 0: a0e252s2 a0e252s3 a0d1 297GiB RAID 1 1x2 optimal row 0: a0e252s0 a0e252s1 a0e252s0 ATA WDC WD3201ABYS-0 rev:1C02 s/n:WD-WCARW1234567 298GiB a0d1 online a0e252s1 ATA WDC WD5003ABYX-0 rev:1S02 s/n:WD-WMAYP1234567 465GiB a0d1 online a0e252s2 ATA WDC WD2003FYYS-0 rev:1D02 s/n:WD-WCAY12345678 1863GiB a0d0 online a0e252s3 ATA WDC WD2003FYYS-0 rev:1D02 s/n:WD-WCAY87654321 1863GiB a0d0 onlinephpsysinfo-3.4.4/sample/plugin_raid/raidmegasasctl8.txt000066400000000000000000000013061467431054600233300ustar00rootroot00000000000000a0 PERC H710 Mini bios:5.42.00.1_4.12.0 fw:3.131.05-8148 encl:1 ldrv:2 rbld:30% mem:512MiB batt:good/3938mV/48C a0d0 558GiB RAID 1 1x2 optimal row 0: a0e32s0 a0e32s1 a0d1 893GiB RAID 1 1x2 optimal row 0: a0e32s2 a0e32s3 a0e32s0 WD WD6001BKHG rev:D1S6 s/n:WXH1A93ABC00 558GiB a0d0 online a0e32s1 WD WD6001BKHG rev:D1S6 s/n:WXH1A93ABC01 558GiB a0d0 online a0e32s2 ATA SAMSUNG MZ7L3960 rev:404Q s/n:S987NS0X101234A 894GiB a0d1 online errs: media:0 other:1158 a0e32s3 ATA SAMSUNG MZ7L3960 rev:404Q s/n:S987NS0X105678B 894GiB a0d1 online errs: media:0 other:1158 phpsysinfo-3.4.4/sample/plugin_raid/raidperccli0.txt000066400000000000000000000422001467431054600226140ustar00rootroot00000000000000Generating detailed summary of the adapter, it may take a while to complete. CLI Version = 007.0529.0000.0000 Sep 18, 2018 Operating system = Linux 4.9.0-18-amd64 Controller = 0 Status = Success Description = None Basics : ====== Controller = 0 Model = PERC H730P Adapter Serial Number = 8BN01234 Current Controller Date/Time = 06/27/2022, 21:30:40 Current System Date/time = 06/27/2022, 23:30:42 SAS Address = 54cdabf010303400 PCI Address = 00:18:00:00 Mfg Date = 11/27/18 Rework Date = 11/27/18 Revision No = A04 Version : ======= Firmware Package Build = 25.5.5.0005 Firmware Version = 4.290.00-8334 Bios Version = 6.33.01.0_4.16.07.00_0x06120304 Ctrl-R Version = 5.18-0701 NVDATA Version = 3.1511.00-0028 Boot Block Version = 3.07.00.00-0003 Driver Name = megaraid_sas Driver Version = 07.700.00.00-rc1 Bus : === Vendor Id = 0x1000 Device Id = 0x5D SubVendor Id = 0x1028 SubDevice Id = 0x1F42 Host Interface = PCI-E Device Interface = SAS-12G Bus Number = 24 Device Number = 0 Function Number = 0 Pending Images in Flash : ======================= Image name = No pending images Status : ====== Controller Status = Optimal Memory Correctable Errors = 0 Memory Uncorrectable Errors = 0 ECC Bucket Count = 0 Any Offline VD Cache Preserved = No BBU Status = 0 PD Firmware Download in progress = No Lock Key Assigned = No Failed to get lock key on bootup = No Lock key has not been backed up = No Bios was not detected during boot = No Controller must be rebooted to complete security operation = No A rollback operation is in progress = No At least one PFK exists in NVRAM = No SSC Policy is WB = No Controller has booted into safe mode = No Current Personality = RAID-Mode Supported Adapter Operations : ============================ Rebuild Rate = Yes CC Rate = Yes BGI Rate = Yes Reconstruct Rate = Yes Patrol Read Rate = Yes Alarm Control = Yes Cluster Support = No BBU = Yes Spanning = Yes Dedicated Hot Spare = Yes Revertible Hot Spares = Yes Foreign Config Import = Yes Self Diagnostic = Yes Allow Mixed Redundancy on Array = No Global Hot Spares = Yes Deny SCSI Passthrough = No Deny SMP Passthrough = No Deny STP Passthrough = No Support more than 8 Phys = Yes FW and Event Time in GMT = No Support Enhanced Foreign Import = Yes Support Enclosure Enumeration = Yes Support Allowed Operations = Yes Abort CC on Error = Yes Support Multipath = Yes Support Odd & Even Drive count in RAID1E = No Support Security = Yes Support Config Page Model = Yes Support the OCE without adding drives = Yes Support EKM = No Snapshot Enabled = No Support PFK = No Support PI = No Support Ld BBM Info = No Support Shield State = Yes Block SSD Write Disk Cache Change = No Support Suspend Resume BG ops = Yes Support Emergency Spares = No Support Set Link Speed = Yes Support Boot Time PFK Change = No Support SystemPD = Yes Disable Online PFK Change = No Support Perf Tuning = Yes Support SSD PatrolRead = Yes Real Time Scheduler = No Support Reset Now = Yes Support Emulated Drives = Yes Headless Mode = Yes Dedicated HotSpares Limited = No Point In Time Progress = No Extended LD = Yes Boot Volume Supported = No Support Uneven span = Yes Support Config Auto Balance = No Support Maintenance Mode = No Support Diagnostic results = Yes Support Ext Enclosure = No Support Sesmonitoring = No Support SecurityonJBOD = No Support ForceFlash = No Support DisableImmediateIO = No Support LargeIOSupport = Yes Support DrvActivityLEDSetting = No Support FlushWriteVerify = No Support CPLDUpdate = No Support ForceTo512e = No Support discardCacheDuringLDDelete = No Support JBOD Write cache = Yes Support Large QD Support = No Support Ctrl Info Extended = No Support IButton less = No Support AES Encryption Algorithm = No Support Encrypted MFC = No Support Force Personality Change = No Enterprise Key management : ========================= Capability = Not Supported Supported PD Operations : ======================= Force Online = Yes Force Offline = Yes Force Rebuild = Yes Deny Force Failed = No Deny Force Good/Bad = No Deny Missing Replace = No Deny Clear = No Deny Locate = No Support Power State = Yes Set Power State For Cfg = No Support T10 Power State = Yes Support Temperature = Yes NCQ = No Support Max Rate SATA = No Support Degraded Media = No Support Parallel FW Update = No Support Drive Crypto Erase = Yes Supported VD Operations : ======================= Read Policy = Yes Write Policy = Yes IO Policy = Yes Access Policy = Yes Disk Cache Policy = Yes Reconstruction = Yes Deny Locate = No Deny CC = No Allow Ctrl Encryption = No Enable LDBBM = Yes Support FastPath = Yes Performance Metrics = Yes Power Savings = Yes Support Powersave Max With Cache = No Support Breakmirror = Yes Support SSC WriteBack = No Support SSC Association = No Support VD Hide = No Support VD Cachebypass = Yes Support VD discardCacheDuringLDDelete = No Support VD Scsi Unmap = No HwCfg : ===== ChipRevision = C0 BatteryFRU = N/A Front End Port Count = 0 Backend Port Count = 8 BBU = Present Alarm = Missing Serial Debugger = Present NVRAM Size = 32KB Flash Size = 16MB On Board Memory Size = 2048MB CacheVault Flash Size = 4.0 GB TPM = Absent Upgrade Key = Absent On Board Expander = Absent Temperature Sensor for ROC = Present Temperature Sensor for Controller = Present Upgradable CPLD = Absent Current Size of CacheCade (GB) = 0 Current Size of FW Cache (MB) = 1931 ROC temperature(Degree Celsius) = 56 Ctrl temperature(Degree Celsius) = 56 Policies : ======== Policies Table : ============== ------------------------------------------------ Policy Current Default ------------------------------------------------ Predictive Fail Poll Interval 300 sec Interrupt Throttle Active Count 16 Interrupt Throttle Completion 50 us Rebuild Rate 30 % 30% PR Rate 30 % 30% BGI Rate 30 % 30% Check Consistency Rate 30 % 30% Reconstruction Rate 30 % 30% Cache Flush Interval 4s ------------------------------------------------ Flush Time(Default) = 4s Drive Coercion Mode = 128MB Auto Rebuild = On Battery Warning = On ECC Bucket Size = 255 ECC Bucket Leak Rate (hrs) = 4 Restore HotSpare on Insertion = Off Expose Enclosure Devices = Off Maintain PD Fail History = Off Reorder Host Requests = On Auto detect BackPlane = SGPIO/i2c SEP Load Balance Mode = Auto Security Key Assigned = Off Disable Online Controller Reset = Off Use drive activity for locate = Off Boot : ==== BIOS Enumerate VDs = 1 Stop BIOS on Error = Off Delay during POST = 0 Spin Down Mode = None Enable Ctrl-R = Yes Enable Web BIOS = No Enable PreBoot CLI = No Enable BIOS = Yes Max Drives to Spinup at One Time = 4 Maximum number of direct attached drives to spin up in 1 min = 0 Delay Among Spinup Groups (sec) = 12 Allow Boot with Preserved Cache = Off High Availability : ================= Topology Type = None Cluster Permitted = No Cluster Active = No Defaults : ======== Phy Polarity = 0 Phy PolaritySplit = 0 Strip Size = 64 KB Write Policy = WB Read Policy = Adaptive Cache When BBU Bad = Off Cached IO = Off VD PowerSave Policy = Controller Defined Default spin down time (mins) = 30 Coercion Mode = 128 MB ZCR Config = Unknown Max Chained Enclosures = 4 Direct PD Mapping = Yes Restore Hot Spare on Insertion = No Expose Enclosure Devices = No Maintain PD Fail History = No Zero Based Enclosure Enumeration = Yes Disable Puncturing = No EnableLDBBM = Yes DisableHII = No Un-Certified Hard Disk Drives = Allow SMART Mode = Mode 6 Enable LED Header = No LED Show Drive Activity = Yes Dirty LED Shows Drive Activity = No EnableCrashDump = No Disable Online Controller Reset = No Treat Single span R1E as R10 = Yes Power Saving option = Enabled TTY Log In Flash = Yes Auto Enhanced Import = No BreakMirror RAID Support = Yes Disable Join Mirror = Yes Enable Shield State = No Time taken to detect CME = 60 sec Capabilities : ============ Supported Drives = SAS, SATA Boot Volume Supported = NO RAID Level Supported = RAID0, RAID1, RAID5, RAID6, RAID10(2 or more drives per span), RAID50, RAID60 Enable SystemPD = Yes Mix in Enclosure = Allowed Mix of SAS/SATA of HDD type in VD = Not Allowed Mix of SAS/SATA of SSD type in VD = Not Allowed Mix of SSD/HDD in VD = Not Allowed SAS Disable = No Max Arms Per VD = 32 Max Spans Per VD = 8 Max Arrays = 128 Max VD per array = 16 Max Number of VDs = 64 Max Parallel Commands = 928 Max SGE Count = 60 Max Data Transfer Size = 8192 sectors Max Strips PerIO = 128 Max Configurable CacheCade Size(GB) = 0 Max Transportable DGs = 0 Min Strip Size = 64 KB Max Strip Size = 1.0 MB Scheduled Tasks : =============== Consistency Check Reoccurrence = 168 hrs Next Consistency check launch = NA Patrol Read Reoccurrence = 168 hrs Next Patrol Read launch = 07/02/2022, 03:00:00 Battery learn Reoccurrence = 2160 hrs OEMID = Dell Drive Groups = 2 TOPOLOGY : ======== ----------------------------------------------------------------------------- DG Arr Row EID:Slot DID Type State BT Size PDC PI SED DS3 FSpace TR ----------------------------------------------------------------------------- 0 - - - - RAID1 Optl N 744.625 GB dflt N N dflt N N 0 0 - - - RAID1 Optl N 744.625 GB dflt N N dflt N N 0 0 0 32:0 0 DRIVE Onln N 744.625 GB dflt N N dflt - N 0 0 1 32:1 1 DRIVE Onln N 744.625 GB dflt N N dflt - N 1 - - - - RAID5 Optl N 2.727 TB dflt N N dflt N N 1 0 - - - RAID5 Optl N 2.727 TB dflt N N dflt N N 1 0 0 32:2 2 DRIVE Onln N 931.0 GB dflt N N dflt - N 1 0 1 32:3 3 DRIVE Onln N 931.0 GB dflt N N dflt - N 1 0 2 32:4 4 DRIVE Onln N 931.0 GB dflt N N dflt - N 1 0 3 32:5 5 DRIVE Onln N 931.0 GB dflt N N dflt - N ----------------------------------------------------------------------------- DG=Disk Group Index|Arr=Array Index|Row=Row Index|EID=Enclosure Device ID DID=Device ID|Type=Drive Type|Onln=Online|Rbld=Rebuild|Dgrd=Degraded Pdgd=Partially degraded|Offln=Offline|BT=Background Task Active PDC=PD Cache|PI=Protection Info|SED=Self Encrypting Drive|Frgn=Foreign DS3=Dimmer Switch 3|dflt=Default|Msng=Missing|FSpace=Free Space Present TR=Transport Ready Virtual Drives = 2 VD LIST : ======= ------------------------------------------------------------------------- DG/VD TYPE State Access Consist Cache Cac sCC Size Name ------------------------------------------------------------------------- 0/0 RAID1 Optl RW Yes RWBD - OFF 744.625 GB Virtual Disk 0 1/1 RAID5 Optl RW Yes RWBD - OFF 2.727 TB Virtual Disk 1 ------------------------------------------------------------------------- Cac=CacheCade|Rec=Recovery|OfLn=OffLine|Pdgd=Partially Degraded|Dgrd=Degraded Optl=Optimal|RO=Read Only|RW=Read Write|HD=Hidden|TRANS=TransportReady|B=Blocked| Consist=Consistent|R=Read Ahead Always|NR=No Read Ahead|WB=WriteBack| FWB=Force WriteBack|WT=WriteThrough|C=Cached IO|D=Direct IO|sCC=Scheduled Check Consistency Physical Drives = 6 PD LIST : ======= --------------------------------------------------------------------------- EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp Type --------------------------------------------------------------------------- 32:0 0 Onln 0 744.625 GB SATA SSD N N 512B SSDSC2BB800G7 U - 32:1 1 Onln 0 744.625 GB SATA SSD N N 512B SSDSC2BB800G7 U - 32:2 2 Onln 1 931.0 GB SATA HDD N N 512B ST1000NX0443 U - 32:3 3 Onln 1 931.0 GB SATA HDD N N 512B ST1000NX0443 U - 32:4 4 Onln 1 931.0 GB SATA HDD N N 512B ST1000NX0443 U - 32:5 5 Onln 1 931.0 GB SATA HDD N N 512B ST1000NX0443 U - --------------------------------------------------------------------------- EID-Enclosure Device ID|Slt-Slot No.|DID-Device ID|DG-DriveGroup DHS-Dedicated Hot Spare|UGood-Unconfigured Good|GHS-Global Hotspare UBad-Unconfigured Bad|Onln-Online|Offln-Offline|Intf-Interface Med-Media Type|SED-Self Encrypting Drive|PI-Protection Info SeSz-Sector Size|Sp-Spun|U-Up|D-Down/PowerSave|T-Transition|F-Foreign UGUnsp-Unsupported|UGShld-UnConfigured shielded|HSPShld-Hotspare shielded CFShld-Configured shielded|Cpybck-CopyBack|CBShld-Copyback Shielded BBU_Info : ======== ---------------------------------------------- Model State RetentionTime Temp Mode MfgDate ---------------------------------------------- BBU Optimal 0 hour(s) 25C - 0/00/00 ---------------------------------------------- CLI Version = 007.0529.0000.0000 Sep 18, 2018 Operating system = Linux 4.9.0-18-amd64 Controller = 0 Status = Success Description = None /c0/v0 : ====== ------------------------------------------------------------------------- DG/VD TYPE State Access Consist Cache Cac sCC Size Name ------------------------------------------------------------------------- 0/0 RAID1 Optl RW Yes RWBD - OFF 744.625 GB Virtual Disk 0 ------------------------------------------------------------------------- Cac=CacheCade|Rec=Recovery|OfLn=OffLine|Pdgd=Partially Degraded|Dgrd=Degraded Optl=Optimal|RO=Read Only|RW=Read Write|HD=Hidden|TRANS=TransportReady|B=Blocked| Consist=Consistent|R=Read Ahead Always|NR=No Read Ahead|WB=WriteBack| FWB=Force WriteBack|WT=WriteThrough|C=Cached IO|D=Direct IO|sCC=Scheduled Check Consistency PDs for VD 0 : ============ --------------------------------------------------------------------------- EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp Type --------------------------------------------------------------------------- 32:0 0 Onln 0 744.625 GB SATA SSD N N 512B THNSF8800CCSE U - 32:1 1 Onln 0 744.625 GB SATA SSD N N 512B THNSF8800CCSE U - --------------------------------------------------------------------------- EID-Enclosure Device ID|Slt-Slot No.|DID-Device ID|DG-DriveGroup DHS-Dedicated Hot Spare|UGood-Unconfigured Good|GHS-Global Hotspare UBad-Unconfigured Bad|Onln-Online|Offln-Offline|Intf-Interface Med-Media Type|SED-Self Encrypting Drive|PI-Protection Info SeSz-Sector Size|Sp-Spun|U-Up|D-Down/PowerSave|T-Transition|F-Foreign UGUnsp-Unsupported|UGShld-UnConfigured shielded|HSPShld-Hotspare shielded CFShld-Configured shielded|Cpybck-CopyBack|CBShld-Copyback Shielded VD0 Properties : ============== Strip Size = 64 KB Number of Blocks = 1561591808 VD has Emulated PD = No Span Depth = 1 Number of Drives Per Span = 2 Write Cache(initial setting) = WriteBack Disk Cache Policy = Disk's Default Encryption = None Data Protection = None Active Operations = None Exposed to OS = Yes Creation Date = 04-01-2019 Creation Time = 11:04:16 PM Emulation type = default Cachebypass size = Cachebypass-64k Cachebypass Mode = Cachebypass Intelligent Is LD Ready for OS Requests = Yes SCSI NAA Id = 64cd98f040f0fd0023c2a2f070eefd16 SCSI Unmap = No /c0/v1 : ====== ----------------------------------------------------------------------- DG/VD TYPE State Access Consist Cache Cac sCC Size Name ----------------------------------------------------------------------- 1/1 RAID5 Optl RW Yes RWBD - OFF 2.727 TB Virtual Disk 1 ----------------------------------------------------------------------- Cac=CacheCade|Rec=Recovery|OfLn=OffLine|Pdgd=Partially Degraded|Dgrd=Degraded Optl=Optimal|RO=Read Only|RW=Read Write|HD=Hidden|TRANS=TransportReady|B=Blocked| Consist=Consistent|R=Read Ahead Always|NR=No Read Ahead|WB=WriteBack| FWB=Force WriteBack|WT=WriteThrough|C=Cached IO|D=Direct IO|sCC=Scheduled Check Consistency PDs for VD 1 : ============ ------------------------------------------------------------------------ EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp Type ------------------------------------------------------------------------ 32:2 2 Onln 1 931.0 GB SATA HDD N N 512B ST1000NX0443 U - 32:3 3 Onln 1 931.0 GB SATA HDD N N 512B ST1000NX0443 U - 32:4 4 Onln 1 931.0 GB SATA HDD N N 512B ST1000NX0443 U - 32:5 5 Onln 1 931.0 GB SATA HDD N N 512B ST1000NX0443 U - ------------------------------------------------------------------------ EID-Enclosure Device ID|Slt-Slot No.|DID-Device ID|DG-DriveGroup DHS-Dedicated Hot Spare|UGood-Unconfigured Good|GHS-Global Hotspare UBad-Unconfigured Bad|Onln-Online|Offln-Offline|Intf-Interface Med-Media Type|SED-Self Encrypting Drive|PI-Protection Info SeSz-Sector Size|Sp-Spun|U-Up|D-Down/PowerSave|T-Transition|F-Foreign UGUnsp-Unsupported|UGShld-UnConfigured shielded|HSPShld-Hotspare shielded CFShld-Configured shielded|Cpybck-CopyBack|CBShld-Copyback Shielded VD1 Properties : ============== Strip Size = 64 KB Number of Blocks = 5857345536 VD has Emulated PD = No Span Depth = 1 Number of Drives Per Span = 4 Write Cache(initial setting) = WriteBack Disk Cache Policy = Disk's Default Encryption = None Data Protection = None Active Operations = None Exposed to OS = Yes Creation Date = 04-01-2019 Creation Time = 11:04:44 PM Emulation type = default Cachebypass size = Cachebypass-64k Cachebypass Mode = Cachebypass Intelligent Is LD Ready for OS Requests = Yes SCSI NAA Id = 64cd98f040f0fd0023c2a30c729a1fb9 SCSI Unmap = No phpsysinfo-3.4.4/sample/plugin_raid/raidstorcli0.txt000066400000000000000000000264001467431054600226560ustar00rootroot00000000000000Generating detailed summary of the adapter, it may take a while to complete. Controller = 0 Status = Success Description = None Basics : ====== Controller = 0 Model = ServeRAID M5210 Serial Number = SV54341012 Current Controller Date/Time = 09/23/2016, 15:04:05 Current System Date/time = 09/23/2016, 15:04:05 SAS Address = 500605b00b3ee5e0 PCI Address = 00:01:00:00 Mfg Date = 10/28/15 Rework Date = 00/00/00 Revision No = 04D Version : ======= Firmware Package Build = 24.12.0-0024 Firmware Version = 4.620.00-6070 BIOS Version = 6.30.03.0_4.17.08.00_0x06130200 NVDATA Version = 3.1511.00-0009 Ctrl-R Version = 5.15-1002 Preboot CLI Version = 01.07-05:#%0000 Boot Block Version = 3.07.00.00-0003 Driver Name = megasas2.sys Driver Version = 6.710.15.00 Bus : === Vendor ID = 0x1000 Device ID = 0x5D SubVendor ID = 0x1014 SubDevice ID = 0x454 Host Interface = PCIE Device Interface = SAS-12G Bus Number = 1 Device Number = 0 Function Number = 0 Pending Images in Flash : ======================= Image name = No pending images Status : ====== Controller Status = Optimal Memory Correctable Errors = 0 Memory Uncorrectable Errors = 0 ECC Bucket Count = 0 Any Offline VD Cache Preserved = No BBU Status = 0 Support PD Firmware Download = No Lock Key Assigned = No Failed to get lock key on bootup = No Lock key has not been backed up = No BIOS was not detected during boot = No Controller must be rebooted to complete security operation = No A rollback operation is in progress = No At least one PFK exists in NVRAM = No SSC Policy is WB = No Controller has booted into safe mode = No Supported Adapter Operations : ============================ Rebuild Rate = Yes CC Rate = Yes BGI Rate = Yes Reconstruct Rate = Yes Patrol Read Rate = Yes Alarm Control = No Cluster Support = No BBU = Yes Spanning = Yes Dedicated Hot Spare = Yes Revertible Hot Spares = Yes Foreign Config Import = Yes Self Diagnostic = Yes Allow Mixed Redundancy on Array = No Global Hot Spares = Yes Deny SCSI Passthrough = No Deny SMP Passthrough = No Deny STP Passthrough = No Support more than 8 Phys = Yes firmware and Event Time in GMT = No Support Enhanced Foreign Import = Yes Support Enclosure Enumeration = Yes Support Allowed Operations = Yes Abort CC on Error = Yes Support Multipath = Yes Support Odd and Even Drive count in RAID1E = No Support Security = Yes Support Config Page Model = Yes Support the OCE without adding drives = Yes support EKM = Yes Snapshot Enabled = No Support PFK = Yes Support PI = Yes Support LDPI Type1 = No Support LDPI Type2 = No Support LDPI Type3 = No Support Ld BBM Info = No Support Shield State = Yes Block SSD Write Disk Cache Change = Yes Support Suspend Resume BG ops = Yes Support Emergency Spares = Yes Support Set Link Speed = Yes Support Boot Time PFK Change = Yes Support JBOD = Yes Disable Online PFK Change = Yes Support Perf Tuning = Yes Support SSD PatrolRead = Yes Real Time Scheduler = Yes Support Reset Now = Yes Support Emulated Drives = Yes Headless Mode = Yes Dedicated HotSpares Limited = No Point In Time Progress = Yes Extended LD = Yes Supported PD Operations : ======================= Force Online = Yes Force Offline = Yes Force Rebuild = Yes Deny Force Failed = No Deny Force Good/Bad = No Deny Missing Replace = No Deny Clear = No Deny Locate = No Support Power State = No Set Power State For Cfg = No Support T10 Power State = No Support Temperature = Yes NCQ = Yes Supported VD Operations : ======================= Read Policy = Yes Write Policy = Yes I/O Policy = Yes Access Policy = Yes Disk Cache Policy = Yes Reconstruction = Yes Deny Locate = No Deny CC = No Allow Ctrl Encryption = No Enable LDBBM = No Support FastPath = No Performance Metrics = Yes Power Savings = No Support Powersave Max With Cache = No Support Breakmirror = Yes Support SSC WriteBack = No Support SSC Association = No Advanced Software Option part number : ======================== -------------------------------------------- Adv S/W Opt Time Remaining Mode -------------------------------------------- MegaRAID SafeStore Unlimited Secured MegaRAID RAID5 Unlimited Secured -------------------------------------------- Safe ID = XCR9FXJX6PQ866ND56BJ86DU5V7CQ8XG4NQAKDRZ HwCfg : ===== ChipRevision = C0 BatteryFRU = N/A Front End Port Count = 0 Backend Port Count = 8 BBU = Present Alarm = Missing Serial Debugger = Present NVRAM Size = 32KB Flash Size = 32MB On Board Memory Size = 1024MB On Board Expander = Absent Temperature Sensor for ROC = Present Temperature Sensor for Controller = Absent Current Size of CacheCade (GB) = 0 Current Size of firmware Cache (MB) = 651 ROC temperature(Degree Celcius) = 72 Policies : ======== Policies Table : ============== ------------------------------------------------ Policy Current Default ------------------------------------------------ Predictive Fail Poll Interval 300 sec Interrupt Throttle Active Count 16 Interrupt Throttle Completion 50 us Rebuild Rate 30 % 30% PR Rate 30 % 30% BGI Rate 30 % 30% Check Consistency Rate 30 % 30% Reconstruction Rate 30 % 30% Cache Flush Interval 0s ------------------------------------------------ Flush Time(Default) = 4s Drive Coercion Mode = 1GB Auto Rebuild = On Battery Warning = On ECC Bucket Size = 15 ECC Bucket Leak Rate (hrs) = 24 Restore HotSpare on Insertion = Off Expose Enclosure Devices = On Maintain PD Fail History = On Reorder Host Requests = On Auto detect BackPlane = SGPIO/i2c SEP Load Balance Mode = Auto Security Key Assigned = Off Disable Online Controller Reset = Off Use drive activity for locate = Off Boot : ==== BIOS Enumerate VDs = 1 Stop BIOS on Error = On Delay during POST = 0 Spin Down Mode = None Enable Ctrl-R = No Enable Web BIOS = No Enable PreBoot CLI = No Enable BIOS = Yes Max Drives to Spinup at One Time = 2 Maximum number of direct attached drives to spin up in 1 min = 10 Delay Among Spinup Groups (sec) = 12 Allow Boot with Preserved Cache = Off High Availability : ================= Topology Type = None Cluster Permitted = No Cluster Active = No Defaults : ======== Phy Polarity = 0 Phy PolaritySplit = 0 Strip Size = 256kB Write Policy = WB Read Policy = Adaptive Cache When BBU Bad = Off Cached I/O = Off VD PowerSave Policy = Controller Defined Default spin down time (mins) = 30 Coercion Mode = 1 GB ZCR Config = Unknown Max Chained Enclosures = 16 Direct PD Mapping = No Restore Hot Spare on Insertion = No Expose Enclosure Devices = Yes Maintain PD Fail History = Yes Zero Based Enclosure Enumeration = No Disable Puncturing = Yes EnableLDBBM = No Un-Certified Hard Disk Drives = Allow SMART Mode = Mode 6 Enable LED Header = No LED Show Drive Activity = Yes Dirty LED Shows Drive Activity = No EnableCrashDump = Yes Disable Online Controller Reset = No Treat Single span R1E as R10 = No Power Saving Option part number = Disabled TTY Log In Flash = No Auto Enhanced Import = Yes BreakMirror RAID Support = Yes Disable Join Mirror = No Enable Shield State = Yes Time taken to detect CME = 60 sec Capabilities : ============ Supported Drives = SAS, SATA Boot Volume Supported = NO RAID Level Supported = RAID0, RAID1, RAID5, RAID00, RAID10, RAID50, PRL 11, PRL 11 with spanning, SRL 3 supported, PRL11-RLQ0 DDF layout with no span, PRL11-RLQ0 DDF layout with span Enable JBOD = No Mix in Enclosure = Allowed Mix of SAS/SATA of HDD type in VD = Not Allowed Mix of SAS/SATA of SSD type in VD = Not Allowed Mix of SSD/HDD in VD = Not Allowed SAS Disable = No Max Arms Per VD = 32 Max Spans Per VD = 8 Max Arrays = 128 Max VD per array = 64 Max Number of VDs = 64 Max Parallel Commands = 928 Max SGE Count = 60 Max Data Transfer Size = 8192 sectors Max Strips PerIO = 128 Max Configurable CacheCade Size = 0 Min Strip Size = 64 KB Max Strip Size = 1.0 MB Scheduled Tasks : =============== Consistency Check Reoccurrence = 168 hrs Next Consistency check launch = 09/24/2016, 02:59:53 Patrol Read Reoccurrence = 168 hrs Next Patrol Read launch = 09/24/2016, 02:59:53 Battery learn Reoccurrence = 672 hrs Next Battery Learn = 10/06/2016, 14:28:32 OEMID = IBM Drive Groups = 1 TOPOLOGY : ======== -------------------------------------------------------------------------- DG Arr Row EID:Slot DID Type State BT Size PDC PI SED DS3 FSpace -------------------------------------------------------------------------- 0 - - - - RAID5 Optl N 4.087 TB dsbl N N none N 0 0 - - - RAID5 Optl N 4.087 TB dsbl N N none N 0 0 0 252:5 7 DRIVE Onln N 837.258 GB dsbl N N none - 0 0 1 252:4 8 DRIVE Onln N 837.258 GB dsbl N N none - 0 0 2 252:1 10 DRIVE Onln N 837.258 GB dsbl N N none - 0 0 3 252:6 11 DRIVE Onln N 837.258 GB dsbl N N none - 0 0 4 252:2 12 DRIVE Onln N 837.258 GB dsbl N N none - 0 0 5 252:3 13 DRIVE Onln N 837.258 GB dsbl N N none - -------------------------------------------------------------------------- DG=Disk Group Index|Arr=Array Index|Row=Row Index|EID=Enclosure Device ID DID=Device ID|Type=Drive Type|Onln=Online|Rbld=Rebuild|Dgrd=Degraded Pdgd=Partially degraded|Offln=Offline|BT=Background Task Active PDC=PD Cache|PI=Protection Info|SED=Self Encrypting Drive|Frgn=Foreign DS3=Dimmer Switch 3|dflt=Default|Msng=Missing|FSpace=Free Space Present Virtual Drives = 1 VD LIST : ======= --------------------------------------------------------- DG/VD TYPE State Access Consist Cache sCC Size Name --------------------------------------------------------- 0/0 RAID5 Optl RW Yes RWBD - 4.087 TB --------------------------------------------------------- Cac=CacheCade|Rec=Recovery|OfLn=OffLine|Pdgd=Partially Degraded|dgrd=Degraded Optl=Optimal|RO=Read Only|RW=Read Write|B=Blocked|Consist=Consistent| R=Read Ahead Always|NR=No Read Ahead|WB=WriteBack| AWB=Always WriteBack|WT=WriteThrough|C=Cached IO|D=Direct IO|sCC=Scheduled Check Consistency Physical Drives = 7 PD LIST : ======= ------------------------------------------------------------------------- EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp ------------------------------------------------------------------------- 252:0 9 GHS - 837.258 GB SAS HDD N N 512B ST900MM0168 U 252:1 10 Onln 0 837.258 GB SAS HDD N N 512B ST900MM0168 U 252:2 12 Onln 0 837.258 GB SAS HDD N N 512B AL14SEB090N U 252:3 13 Onln 0 837.258 GB SAS HDD N N 512B AL14SEB090N U 252:4 8 Onln 0 837.258 GB SAS HDD N N 512B AL14SEB090N U 252:5 7 Onln 0 837.258 GB SAS HDD N N 512B AL14SEB090N U 252:6 11 Onln 0 837.258 GB SAS HDD N N 512B AL14SEB090N U ------------------------------------------------------------------------- EID-Enclosure Device ID|Slt-Slot No.|DID-Device ID|DG-DriveGroup DHS-Dedicated Hot Spare|UGood-Unconfigured Good|GHS-Global Hotspare UBad-Unconfigured Bad|Onln-Online|Offln-Offline|Intf-Interface Med-Media Type|SED-Self Encryptive Drive|PI-Protection Info SeSz-Sector Size|Sp-Spun|U-Up|D-Down|T-Transition|F-Foreign UGUnsp-Unsupported|UGShld-UnConfigured shielded|HSPShld-Hotspare shielded CFShld-Configured shielded Cachevault_Info : =============== ------------------------------------ Model State Temp Mode MfgDate ------------------------------------ CVPM02 Optimal 28C - 2016/01/09 ------------------------------------ phpsysinfo-3.4.4/sample/plugin_raid/raidstorcli1.txt000066400000000000000000000437131467431054600226650ustar00rootroot00000000000000Generating detailed summary of the adapter, it may take a while to complete. CLI Version = 007.1324.0000.0000 June 1, 2020 Operating system = Windows Server 2016 Controller = 0 Status = Success Description = None Basics : ====== Controller = 0 Model = RAID 930-24i 4GB Flash Serial Number = SXXXXXXX5 Current Controller Date/Time = 03/10/2022, 08:12:41 Current System Date/time = 03/10/2022, 08:12:43 SAS Address = 500062b1002dd100 PCI Address = 00:86:00:00 Mfg Date = 11/13/17 Rework Date = 00/00/00 Revision No = 26005 Version : ======= Firmware Package Build = 50.0.1-0374 Firmware Version = 5.001.00-0805 CPLD Version = 05664-021 SBR Version = 260 Boot Block Version = 7.02.00.00-0015 Bios Version = 7.00.09.0_4.17.08.00_0x07001600 NVDATA Version = 4.1610.00-0093 Driver Name = megasas35.sys Driver Version = 7.705.08.00 Bus : === Vendor Id = 0x1000 Device Id = 0x16 SubVendor Id = 0x1D49 SubDevice Id = 0x603 Host Interface = PCI-E Device Interface = SAS-12G Bus Number = 134 Device Number = 0 Function Number = 0 Domain ID = 0 Pending Images in Flash : ======================= Image name = No pending images Status : ====== Controller Status = Optimal Memory Correctable Errors = 0 Memory Uncorrectable Errors = 0 ECC Bucket Count = 0 Any Offline VD Cache Preserved = No BBU Status = 0 PD Firmware Download in progress = No Support PD Firmware Download = Yes Lock Key Assigned = No Failed to get lock key on bootup = No Lock key has not been backed up = No Bios was not detected during boot = No Controller must be rebooted to complete security operation = No A rollback operation is in progress = No At least one PFK exists in NVRAM = No SSC Policy is WB = No Controller has booted into safe mode = No Controller shutdown required = No Supported Adapter Operations : ============================ Rebuild Rate = Yes CC Rate = Yes BGI Rate = Yes Reconstruct Rate = Yes Patrol Read Rate = Yes Alarm Control = No Cluster Support = No BBU = Yes Spanning = Yes Dedicated Hot Spare = Yes Revertible Hot Spares = Yes Foreign Config Import = Yes Self Diagnostic = Yes Allow Mixed Redundancy on Array = No Global Hot Spares = Yes Deny SCSI Passthrough = No Deny SMP Passthrough = No Deny STP Passthrough = No Support more than 8 Phys = Yes FW and Event Time in GMT = No Support Enhanced Foreign Import = Yes Support Enclosure Enumeration = Yes Support Allowed Operations = Yes Abort CC on Error = Yes Support Multipath = Yes Support Odd & Even Drive count in RAID1E = No Support Security = Yes Support Config Page Model = Yes Support the OCE without adding drives = Yes Support EKM = Yes Snapshot Enabled = No Support PFK = Yes Support PI = Yes Support LDPI Type1 = No Support LDPI Type2 = No Support LDPI Type3 = No Support Ld BBM Info = No Support Shield State = Yes Block SSD Write Disk Cache Change = Yes Support Suspend Resume BG ops = Yes Support Emergency Spares = Yes Support Set Link Speed = Yes Support Boot Time PFK Change = Yes Support JBOD = Yes Disable Online PFK Change = Yes Support Perf Tuning = Yes Support SSD PatrolRead = Yes Real Time Scheduler = Yes Support Reset Now = Yes Support Emulated Drives = Yes Headless Mode = Yes Dedicated HotSpares Limited = No Point In Time Progress = Yes Extended LD = Yes Support Uneven span = No Support Config Auto Balance = No Support Maintenance Mode = No Support Diagnostic results = Yes Support Ext Enclosure = No Support Sesmonitoring = Yes Support SecurityonJBOD = Yes Support ForceFlash = Yes Support DisableImmediateIO = Yes Support LargeIOSupport = No Support DrvActivityLEDSetting = Yes Support FlushWriteVerify = Yes Support CPLDUpdate = Yes Support ForceTo512e = Yes Support discardCacheDuringLDDelete = No Support JBOD Write cache = No Support Large QD Support = No Support Ctrl Info Extended = Yes Support IButton less = Yes Support AES Encryption Algorithm = No Support Encrypted MFC = Yes Support Snapdump = No Support Force Personality Change = No Support Dual Fw Image = No Support PSOC Update = No Support Secure Boot = No Support Debug Queue = Yes Support Least Latency Mode = Yes Support OnDemand Snapdump = No Support Clear Snapdump = No Support PHY current speed = No Support Lane current speed = No Support NVMe Width = No Support Lane DeviceType = No Support Extended Drive performance Monitoring = No Enterprise Key management : ========================= Capability = Supported Boot Agent = Available Configured = No Supported PD Operations : ======================= Force Online = Yes Force Offline = Yes Force Rebuild = Yes Deny Force Failed = No Deny Force Good/Bad = No Deny Missing Replace = No Deny Clear = No Deny Locate = No Support Power State = No Set Power State For Cfg = No Support T10 Power State = No Support Temperature = Yes NCQ = Yes Support Max Rate SATA = No Support Degraded Media = No Support Parallel FW Update = No Support Drive Crypto Erase = No Support SSD Wear Gauge = No Supported VD Operations : ======================= Read Policy = Yes Write Policy = Yes IO Policy = Yes Access Policy = Yes Disk Cache Policy = Yes Reconstruction = Yes Deny Locate = No Deny CC = No Allow Ctrl Encryption = No Enable LDBBM = No Support FastPath = Yes Performance Metrics = Yes Power Savings = No Support Powersave Max With Cache = No Support Breakmirror = Yes Support SSC WriteBack = No Support SSC Association = No Support VD Hide = Yes Support VD Cachebypass = Yes Support VD discardCacheDuringLDDelete = No Support VD Scsi Unmap = No Advanced Software Option : ======================== ----------------------------------------- Adv S/W Opt Time Remaining Mode ----------------------------------------- MegaRAID FastPath Unlimited - MegaRAID SafeStore Unlimited - MegaRAID RAID6 Unlimited - MegaRAID RAID5 Unlimited - ----------------------------------------- Safe ID = EQ3WU1IHBBI8L3V6GDNIX997S9G36M1NXE7T9URZ HwCfg : ===== ChipRevision = B0 BatteryFRU = N/A Front End Port Count = 0 Backend Port Count = 8 BBU = Present Alarm = Missing Serial Debugger = Present NVRAM Size = 128KB Flash Size = 16MB On Board Memory Size = 4096MB CacheVault Flash Size = 8.187 GB TPM = Absent Upgrade Key = Absent On Board Expander = Absent Temperature Sensor for ROC = Present Temperature Sensor for Controller = Absent Upgradable CPLD = Present Upgradable PSOC = Absent Current Size of CacheCade (GB) = 0 Current Size of FW Cache (MB) = 3183 ROC temperature(Degree Celsius) = 69 Policies : ======== Policies Table : ============== ------------------------------------------------ Policy Current Default ------------------------------------------------ Predictive Fail Poll Interval 300 sec Interrupt Throttle Active Count 16 Interrupt Throttle Completion 50 us Rebuild Rate 30 % 30% PR Rate 30 % 30% BGI Rate 30 % 30% Check Consistency Rate 30 % 30% Reconstruction Rate 30 % 30% Cache Flush Interval 4s ------------------------------------------------ Flush Time(Default) = 4s Drive Coercion Mode = 1GB Auto Rebuild = On Battery Warning = On ECC Bucket Size = 15 ECC Bucket Leak Rate (hrs) = 24 Restore Hot Spare on Insertion = Off Expose Enclosure Devices = On Maintain PD Fail History = On Reorder Host Requests = On Auto detect BackPlane = SGPIO/i2c SEP Load Balance Mode = Auto Security Key Assigned = Off Disable Online Controller Reset = Off Use drive activity for locate = Off Boot : ==== BIOS Enumerate VDs = 1 Stop BIOS on Error = On Delay during POST = 0 Spin Down Mode = None Enable Ctrl-R = No Enable Web BIOS = No Enable PreBoot CLI = No Enable BIOS = Yes Max Drives to Spinup at One Time = 2 Maximum number of direct attached drives to spin up in 1 min = 60 Delay Among Spinup Groups (sec) = 2 Allow Boot with Preserved Cache = Off High Availability : ================= Topology Type = None Cluster Permitted = No Cluster Active = No Defaults : ======== Phy Polarity = 0 Phy PolaritySplit = 0 Strip Size = 256 KB Write Policy = WB Read Policy = No Read Ahead Cache When BBU Bad = Off Cached IO = Off VD PowerSave Policy = Controller Defined Default spin down time (mins) = 30 Coercion Mode = 1 GB ZCR Config = Unknown Max Chained Enclosures = 3 Direct PD Mapping = No Restore Hot Spare on Insertion = No Expose Enclosure Devices = Yes Maintain PD Fail History = Yes Zero Based Enclosure Enumeration = No Disable Puncturing = Yes EnableLDBBM = No DisableHII = No Un-Certified Hard Disk Drives = Allow SMART Mode = Mode 6 Enable LED Header = No LED Show Drive Activity = Yes Dirty LED Shows Drive Activity = No EnableCrashDump = Yes Disable Online Controller Reset = No Treat Single span R1E as R10 = No Power Saving option = Disabled TTY Log In Flash = No Auto Enhanced Import = Yes BreakMirror RAID Support = single span R1 Disable Join Mirror = No Enable Shield State = Yes Time taken to detect CME = 60 sec Capabilities : ============ Supported Drives = SAS, SATA RAID Level Supported = RAID0, RAID1(2 or more drives), RAID5, RAID6, RAID00, RAID10(2 or more drives per span), RAID50, RAID60 Enable JBOD = No Mix in Enclosure = Allowed Mix of SAS/SATA of HDD type in VD = Not Allowed Mix of SAS/SATA of SSD type in VD = Not Allowed Mix of SSD/HDD in VD = Not Allowed SAS Disable = No Max Arms Per VD = 32 Max Spans Per VD = 8 Max Arrays = 128 Max VD per array = 64 Max Number of VDs = 64 Max Parallel Commands = 4077 Max SGE Count = 60 Max Data Transfer Size = 8192 sectors Max Strips PerIO = 42 Max Configurable CacheCade Size(GB) = 0 Max Transportable DGs = 0 Enable Snapdump = No Enable SCSI Unmap = Yes FDE Drive Mix Support = No Min Strip Size = 64 KB Max Strip Size = 1.000 MB Scheduled Tasks : =============== Consistency Check Reoccurrence = 168 hrs Next Consistency check launch = 03/12/2022, 03:00:00 Patrol Read Reoccurrence = 168 hrs Next Patrol Read launch = 03/12/2022, 03:00:00 Battery learn Reoccurrence = 670 hrs Next Battery Learn = 03/27/2022, 10:00:00 OEMID = Lenovo Drive Groups = 2 TOPOLOGY : ======== ------------------------------------------------------------------------------ DG Arr Row EID:Slot DID Type State BT Size PDC PI SED DS3 FSpace TR ------------------------------------------------------------------------------ 0 - - - - RAID1 Optl N 893.137 GB dflt N N dflt N N 0 0 - - - RAID1 Optl N 893.137 GB dflt N N dflt N N 0 0 0 65:0 46 DRIVE Onln N 893.137 GB dflt N N dflt - N 0 0 1 65:1 47 DRIVE Onln N 893.137 GB dflt N N dflt - N 1 - - - - RAID10 Optl N 10.904 TB dsbl N N dflt N N 1 0 - - - RAID1 Optl N 2.180 TB dsbl N N dflt N N 1 0 0 65:2 49 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 0 1 65:3 41 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 0 2 65:4 40 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 0 3 65:5 44 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 1 - - - RAID1 Optl N 2.180 TB dsbl N N dflt N N 1 1 0 65:6 39 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 1 1 65:7 43 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 1 2 65:8 37 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 1 3 65:9 36 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 2 - - - RAID1 Optl N 2.180 TB dsbl N N dflt N N 1 2 0 65:10 35 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 2 1 65:11 42 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 2 2 65:12 34 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 2 3 65:13 33 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 3 - - - RAID1 Optl N 2.180 TB dsbl N N dflt N N 1 3 0 65:14 31 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 3 1 65:15 30 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 3 2 65:16 38 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 3 3 65:17 27 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 4 - - - RAID1 Optl N 2.180 TB dsbl N N dflt N N 1 4 0 65:18 28 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 4 1 65:19 26 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 4 2 65:20 25 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 4 3 65:21 32 DRIVE Onln N 1.089 TB dsbl N N dflt - N 1 - - 65:23 29 DRIVE DHS - 1.089 TB - - - - - N ------------------------------------------------------------------------------ DG=Disk Group Index|Arr=Array Index|Row=Row Index|EID=Enclosure Device ID DID=Device ID|Type=Drive Type|Onln=Online|Rbld=Rebuild|Optl=Optimal|Dgrd=Degraded Pdgd=Partially degraded|Offln=Offline|BT=Background Task Active PDC=PD Cache|PI=Protection Info|SED=Self Encrypting Drive|Frgn=Foreign DS3=Dimmer Switch 3|dflt=Default|Msng=Missing|FSpace=Free Space Present TR=Transport Ready Virtual Drives = 2 VD LIST : ======= ------------------------------------------------------------------- DG/VD TYPE State Access Consist Cache Cac sCC Size Name ------------------------------------------------------------------- 0/0 RAID1 Optl RW Yes RWBD - ON 893.137 GB OS 1/1 RAID10 Optl RW Yes RWBD - ON 10.904 TB Volume1 ------------------------------------------------------------------- VD=Virtual Drive| DG=Drive Group|Rec=Recovery Cac=CacheCade|OfLn=OffLine|Pdgd=Partially Degraded|Dgrd=Degraded Optl=Optimal|dflt=Default|RO=Read Only|RW=Read Write|HD=Hidden|TRANS=TransportReady|B=Blocked| Consist=Consistent|R=Read Ahead Always|NR=No Read Ahead|WB=WriteBack| AWB=Always WriteBack|WT=WriteThrough|C=Cached IO|D=Direct IO|sCC=Scheduled Check Consistency Physical Drives = 24 PD LIST : ======= ----------------------------------------------------------------------------------------------------- EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp Type ----------------------------------------------------------------------------------------------------- 65:0 46 Onln 0 893.137 GB SATA SSD N N 512B MTFDDAK960TDC-1AT1ZA 01PE307D7A09592LEN U - 65:1 47 Onln 0 893.137 GB SATA SSD N N 512B MTFDDAK960TDC-1AT1ZA 01PE307D7A09592LEN U - 65:2 49 Onln 1 1.089 TB SAS HDD N N 512B ST1200MM0009 U - 65:3 41 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:4 40 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:5 44 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:6 39 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:7 43 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:8 37 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:9 36 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:10 35 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:11 42 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:12 34 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:13 33 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:14 31 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:15 30 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:16 38 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:17 27 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:18 28 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:19 26 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:20 25 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:21 32 Onln 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - 65:22 48 UGood - 1.089 TB SAS HDD N N 512B ST1200MM0009 U - 65:23 29 DHS 1 1.089 TB SAS HDD N N 512B AL15SEB120N U - ----------------------------------------------------------------------------------------------------- EID=Enclosure Device ID|Slt=Slot No.|DID=Device ID|DG=DriveGroup DHS=Dedicated Hot Spare|UGood=Unconfigured Good|GHS=Global Hotspare UBad=Unconfigured Bad|Sntze=Sanitize|Onln=Online|Offln=Offline|Intf=Interface Med=Media Type|SED=Self Encryptive Drive|PI=Protection Info SeSz=Sector Size|Sp=Spun|U=Up|D=Down|T=Transition|F=Foreign UGUnsp=UGood Unsupported|UGShld=UGood shielded|HSPShld=Hotspare shielded CFShld=Configured shielded|Cpybck=CopyBack|CBShld=Copyback Shielded UBUnsp=UBad Unsupported|Rbld=Rebuild Enclosures = 2 Enclosure LIST : ============== ----------------------------------------------------------------------- EID State Slots PD PS Fans TSs Alms SIM Port# ProdID VendorSpecific ----------------------------------------------------------------------- 65 OK 24 24 0 0 0 0 0 SAS35x36R exp-0.3.2.0 134 OK 8 0 0 0 0 0 1 - SGPIO ----------------------------------------------------------------------- EID=Enclosure Device ID |PD=Physical drive count |PS=Power Supply count| TSs=Temperature sensor count |Alms=Alarm count |SIM=SIM Count ||ProdID=Product ID Cachevault_Info : =============== ------------------------------------ Model State Temp Mode MfgDate ------------------------------------ CVPM02 Optimal 29C - 2018/04/05 ------------------------------------ phpsysinfo-3.4.4/sample/plugin_raid/raidstorcli2.txt000066400000000000000000000354751467431054600226740ustar00rootroot00000000000000Generating detailed summary of the adapter, it may take a while to complete. Controller = 0 Status = Success Description = None Basics : ====== Controller = 0 Model = LSI 2108 MegaRAID Serial Number = FW-ABCDEFGHIJKLM Current Controller Date/Time = 12/24/2022, 10:33:04 Current System Date/time = 12/24/2022, 10:33:22 SAS Address = 5003048014579200 PCI Address = 00:82:00:00 Mfg Date = 00/00/00 Rework Date = 00/00/00 Revision No = Version : ======= Firmware Package Build = 12.15.0-0239 Firmware Version = 2.130.403-4660 Bios Version = 3.30.02.2_4.16.08.00_0x06060A05 Preboot CLI Version = 04.04-020:#%00009 WebBIOS Version = 6.0-54-e_50-Rel NVDATA Version = 2.09.03-0058 Boot Block Version = 2.02.00.00-0000 Bootloader Version = 09.250.01.219 Driver Name = megaraid_sas Driver Version = 07.717.02.00-rc1 Bus : === Vendor Id = 0x1000 Device Id = 0x79 SubVendor Id = 0x15D9 SubDevice Id = 0x700 Host Interface = PCI-E Device Interface = SAS-6G Bus Number = 130 Device Number = 0 Function Number = 0 Pending Images in Flash : ======================= Image name = No pending images Status : ====== Controller Status = Optimal Memory Correctable Errors = 0 Memory Uncorrectable Errors = 0 ECC Bucket Count = 0 Any Offline VD Cache Preserved = No BBU Status = 44 Support PD Firmware Download = No Lock Key Assigned = No Failed to get lock key on bootup = No Lock key has not been backed up = No Bios was not detected during boot = No Controller must be rebooted to complete security operation = No A rollback operation is in progress = No At least one PFK exists in NVRAM = No SSC Policy is WB = No Controller has booted into safe mode = No Supported Adapter Operations : ============================ Rebuild Rate = Yes CC Rate = Yes BGI Rate = Yes Reconstruct Rate = Yes Patrol Read Rate = Yes Alarm Control = Yes Cluster Support = No BBU = Yes Spanning = Yes Dedicated Hot Spare = Yes Revertible Hot Spares = Yes Foreign Config Import = Yes Self Diagnostic = Yes Allow Mixed Redundancy on Array = No Global Hot Spares = Yes Deny SCSI Passthrough = No Deny SMP Passthrough = No Deny STP Passthrough = No Support more than 8 Phys = Yes FW and Event Time in GMT = No Support Enhanced Foreign Import = Yes Support Enclosure Enumeration = Yes Support Allowed Operations = Yes Abort CC on Error = Yes Support Multipath = Yes Support Odd & Even Drive count in RAID1E = No Support Security = No Support Config Page Model = Yes Support the OCE without adding drives = Yes Support EKM = No Snapshot Enabled = No Support PFK = Yes Support PI = No Support Ld BBM Info = No Support Shield State = No Block SSD Write Disk Cache Change = No Support Suspend Resume BG ops = No Support Emergency Spares = Yes Support Set Link Speed = No Support Boot Time PFK Change = No Support JBOD = No Disable Online PFK Change = No Support Perf Tuning = No Support SSD PatrolRead = Yes Real Time Scheduler = Yes Support Reset Now = Yes Support Emulated Drives = Yes Headless Mode = Yes Dedicated HotSpares Limited = No Point In Time Progress = No Extended LD = No Boot Volume Supported = No Support Uneven span = No Support Config Auto Balance = No Support Maintenance Mode = No Support Diagnostic results = No Support Ext Enclosure = No Support Sesmonitoring = No Support SecurityonJBOD = No Support ForceFlash = No Support DisableImmediateIO = Yes Support LargeIOSupport = No Support DrvActivityLEDSetting = Yes Support FlushWriteVerify = No Support CPLDUpdate = No Support ForceTo512e = No Support discardCacheDuringLDDelete = No Support JBOD Write cache = No Support Large QD Support = No Support SRIOV Options = No Supported PD Operations : ======================= Force Online = Yes Force Offline = Yes Force Rebuild = Yes Deny Force Failed = No Deny Force Good/Bad = No Deny Missing Replace = No Deny Clear = No Deny Locate = No Support Power State = Yes Set Power State For Cfg = No Support T10 Power State = No Support Temperature = Yes NCQ = No Support Max Rate SATA = No Support Degraded Media = No Support Parallel FW Update = No Support Drive Crypto Erase = No Supported VD Operations : ======================= Read Policy = Yes Write Policy = Yes IO Policy = Yes Access Policy = Yes Disk Cache Policy = Yes Reconstruction = Yes Deny Locate = No Deny CC = No Allow Ctrl Encryption = No Enable LDBBM = Yes Support FastPath = No Performance Metrics = Yes Power Savings = No Support Powersave Max With Cache = No Support Breakmirror = No Support SSC WriteBack = No Support SSC Association = Yes Support VD Hide = No Support VD Cachebypass = No Support VD discardCacheDuringLDDelete = No Advanced Software Option : ======================== ------------------------------------- Adv S/W Opt Time Remaining Mode ------------------------------------- MegaRAID RAID6 Unlimited - MegaRAID RAID5 Unlimited - ------------------------------------- Safe ID = JJ17M5BUPUQ81RDKM9HGF7IMB81U6ME2RUI7432Z HwCfg : ===== ChipRevision = B4 BatteryFRU = N/A Front End Port Count = 0 Backend Port Count = 8 BBU = Present Alarm = On Serial Debugger = Present NVRAM Size = 32KB Flash Size = 8MB On Board Memory Size = 512MB CacheVault Flash Size = NA TPM = Absent Upgrade Key = Absent On Board Expander = Absent Temperature Sensor for ROC = Absent Temperature Sensor for Controller = Absent Upgradable CPLD = Absent Current Size of CacheCade (GB) = 0 Current Size of FW Cache (MB) = 346 Policies : ======== Policies Table : ============== ------------------------------------------------ Policy Current Default ------------------------------------------------ Predictive Fail Poll Interval 300 sec Interrupt Throttle Active Count 16 Interrupt Throttle Completion 50 us Rebuild Rate 30 % 30% PR Rate 30 % 30% BGI Rate 30 % 30% Check Consistency Rate 30 % 30% Reconstruction Rate 30 % 30% Cache Flush Interval 4s ------------------------------------------------ Flush Time(Default) = 4s Drive Coercion Mode = 1GB Auto Rebuild = On Battery Warning = On ECC Bucket Size = 15 ECC Bucket Leak Rate (hrs) = 24 Restore HotSpare on Insertion = Off Expose Enclosure Devices = On Maintain PD Fail History = Off Reorder Host Requests = On Auto detect BackPlane = SGPIO/i2c SEP Load Balance Mode = Auto Security Key Assigned = Off Disable Online Controller Reset = Off Use drive activity for locate = Off Boot : ==== BIOS Enumerate VDs = 1 Stop BIOS on Error = On Delay during POST = 0 Spin Down Mode = None Enable Ctrl-R = No Enable Web BIOS = Yes Enable PreBoot CLI = Yes Enable BIOS = Yes Max Drives to Spinup at One Time = 4 Maximum number of direct attached drives to spin up in 1 min = 120 Delay Among Spinup Groups (sec) = 2 Allow Boot with Preserved Cache = Off High Availability : ================= Topology Type = None Cluster Permitted = No Cluster Active = No Defaults : ======== Phy Polarity = 0 Phy PolaritySplit = 0 Strip Size = 64 KB Write Policy = WB Read Policy = Adaptive Cache When BBU Bad = On Cached IO = On VD PowerSave Policy = Controller Defined Default spin down time (mins) = 30 Coercion Mode = 1 GB ZCR Config = Unknown Max Chained Enclosures = 16 Direct PD Mapping = Yes Restore Hot Spare on Insertion = No Expose Enclosure Devices = Yes Maintain PD Fail History = No Zero Based Enclosure Enumeration = No Disable Puncturing = No EnableLDBBM = Yes DisableHII = No Un-Certified Hard Disk Drives = Allow SMART Mode = Mode 6 Enable LED Header = No LED Show Drive Activity = Yes Dirty LED Shows Drive Activity = No EnableCrashDump = No Disable Online Controller Reset = No Treat Single span R1E as R10 = No Power Saving option = Enabled TTY Log In Flash = No Auto Enhanced Import = No BreakMirror RAID Support = No Disable Join Mirror = No Enable Shield State = No Time taken to detect CME = 60 sec Capabilities : ============ Supported Drives = SAS, SATA Boot Volume Supported = NO RAID Level Supported = RAID0, RAID1, RAID5, RAID6, RAID00, RAID10, RAID50, RAID60, PRL 11, PRL 11 with spanning, SRL 3 supported, PRL11-RLQ0 DDF layout with no span, PRL11-RLQ0 DDF layout with span Enable JBOD = No Mix in Enclosure = Allowed Mix of SAS/SATA of HDD type in VD = Allowed Mix of SAS/SATA of SSD type in VD = Allowed Mix of SSD/HDD in VD = Allowed SAS Disable = No Max Arms Per VD = 32 Max Spans Per VD = 8 Max Arrays = 128 Max VD per array = 16 Max Number of VDs = 64 Max Parallel Commands = 1008 Max SGE Count = 80 Max Data Transfer Size = 8192 sectors Max Strips PerIO = 42 Max Configurable CacheCade Size(GB) = 0 Max Transportable DGs = 0 Min Strip Size = 8 KB Max Strip Size = 1.0 MB Scheduled Tasks : =============== Consistency Check Reoccurrence = 672 hrs Next Consistency check launch = 12/24/2022, 04:00:00 Patrol Read Reoccurrence = 672 hrs Next Patrol Read launch = 12/25/2022, 04:00:00 Battery learn Reoccurrence = 672 hrs Next Battery Learn = 12/24/2022, 04:00:00 OEMID = LSI Drive Groups = 1 TOPOLOGY : ======== ---------------------------------------------------------------------------- DG Arr Row EID:Slot DID Type State BT Size PDC PI SED DS3 FSpace TR ---------------------------------------------------------------------------- 0 - - - - RAID5 Optl Y 10.913 TB dflt N N none N N 0 0 - - - RAID5 Optl Y 10.913 TB dflt N N none N N 0 0 0 252:0 0 DRIVE Onln N 2.727 TB dflt N N none - N 0 0 1 252:1 1 DRIVE Onln N 2.727 TB dflt N N none - N 0 0 2 252:2 2 DRIVE Onln N 2.727 TB dflt N N none - N 0 0 3 252:3 3 DRIVE Onln N 2.727 TB dflt N N none - N 0 0 4 252:4 4 DRIVE Onln N 2.727 TB dflt N N none - N ---------------------------------------------------------------------------- DG=Disk Group Index|Arr=Array Index|Row=Row Index|EID=Enclosure Device ID DID=Device ID|Type=Drive Type|Onln=Online|Rbld=Rebuild|Dgrd=Degraded Pdgd=Partially degraded|Offln=Offline|BT=Background Task Active PDC=PD Cache|PI=Protection Info|SED=Self Encrypting Drive|Frgn=Foreign DS3=Dimmer Switch 3|dflt=Default|Msng=Missing|FSpace=Free Space Present TR=Transport Ready Virtual Drives = 1 VD LIST : ======= -------------------------------------------------------------- DG/VD TYPE State Access Consist Cache Cac sCC Size Name -------------------------------------------------------------- 0/0 RAID5 Optl RW Yes RWBC - ON 10.913 TB -------------------------------------------------------------- Cac=CacheCade|Rec=Recovery|OfLn=OffLine|Pdgd=Partially Degraded|Dgrd=Degraded Optl=Optimal|RO=Read Only|RW=Read Write|HD=Hidden|TRANS=TransportReady|B=Blocked| Consist=Consistent|R=Read Ahead Always|NR=No Read Ahead|WB=WriteBack| AWB=Always WriteBack|WT=WriteThrough|C=Cached IO|D=Direct IO|sCC=Scheduled Check Consistency Physical Drives = 5 PD LIST : ======= ----------------------------------------------------------------------------------- EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp Type ----------------------------------------------------------------------------------- 252:0 0 Onln 0 2.727 TB SATA HDD N N 512B Hitachi HUA723030ALA641 U - 252:1 1 Onln 0 2.727 TB SATA HDD N N 512B Hitachi HUA723030ALA641 U - 252:2 2 Onln 0 2.727 TB SATA HDD N N 512B Hitachi HUA723030ALA641 U - 252:3 3 Onln 0 2.727 TB SATA HDD N N 512B Hitachi HUA723030ALA641 U - 252:4 4 Onln 0 2.727 TB SATA HDD N N 512B Hitachi HUA723030ALA641 U - ----------------------------------------------------------------------------------- EID-Enclosure Device ID|Slt-Slot No.|DID-Device ID|DG-DriveGroup DHS-Dedicated Hot Spare|UGood-Unconfigured Good|GHS-Global Hotspare UBad-Unconfigured Bad|Onln-Online|Offln-Offline|Intf-Interface Med-Media Type|SED-Self Encryptive Drive|PI-Protection Info SeSz-Sector Size|Sp-Spun|U-Up|D-Down|T-Transition|F-Foreign UGUnsp-Unsupported|UGShld-UnConfigured shielded|HSPShld-Hotspare shielded CFShld-Configured shielded|Cpybck-CopyBack|CBShld-Copyback Shielded BBU_Info : ======== ----------------------------------------------------------------------- Model State RetentionTime Temp Mode MfgDate Next Learn ----------------------------------------------------------------------- iBBU08 Optimal 48 hours + 47C 1 2012/08/22 2022/13/24 04:00:00 ----------------------------------------------------------------------- Mode 1: 12+ Hrs retention with a transparent learn cycle and best service life. Controller = 0 Status = Success Description = None /c0/v0 : ====== -------------------------------------------------------------- DG/VD TYPE State Access Consist Cache Cac sCC Size Name -------------------------------------------------------------- 0/0 RAID5 Optl RW Yes RWBC - ON 10.913 TB -------------------------------------------------------------- Cac=CacheCade|Rec=Recovery|OfLn=OffLine|Pdgd=Partially Degraded|Dgrd=Degraded Optl=Optimal|RO=Read Only|RW=Read Write|HD=Hidden|TRANS=TransportReady|B=Blocked| Consist=Consistent|R=Read Ahead Always|NR=No Read Ahead|WB=WriteBack| AWB=Always WriteBack|WT=WriteThrough|C=Cached IO|D=Direct IO|sCC=Scheduled Check Consistency PDs for VD 0 : ============ ----------------------------------------------------------------------------------- EID:Slt DID State DG Size Intf Med SED PI SeSz Model Sp Type ----------------------------------------------------------------------------------- 252:0 0 Onln 0 2.727 TB SATA HDD N N 512B Hitachi HUA723030ALA641 U - 252:1 1 Onln 0 2.727 TB SATA HDD N N 512B Hitachi HUA723030ALA641 U - 252:2 2 Onln 0 2.727 TB SATA HDD N N 512B Hitachi HUA723030ALA641 U - 252:3 3 Onln 0 2.727 TB SATA HDD N N 512B Hitachi HUA723030ALA641 U - 252:4 4 Onln 0 2.727 TB SATA HDD N N 512B Hitachi HUA723030ALA641 U - ----------------------------------------------------------------------------------- EID-Enclosure Device ID|Slt-Slot No.|DID-Device ID|DG-DriveGroup DHS-Dedicated Hot Spare|UGood-Unconfigured Good|GHS-Global Hotspare UBad-Unconfigured Bad|Onln-Online|Offln-Offline|Intf-Interface Med-Media Type|SED-Self Encryptive Drive|PI-Protection Info SeSz-Sector Size|Sp-Spun|U-Up|D-Down|T-Transition|F-Foreign UGUnsp-Unsupported|UGShld-UnConfigured shielded|HSPShld-Hotspare shielded CFShld-Configured shielded|Cpybck-CopyBack|CBShld-Copyback Shielded VD0 Properties : ============== Strip Size = 64 KB Number of Blocks = 23437492224 VD has Emulated PD = No Span Depth = 1 Number of Drives Per Span = 5 Write Cache(initial setting) = WriteBack Disk Cache Policy = Disk's Default Encryption = None Data Protection = None Active Operations = Consistency Check (95%) Exposed to OS = Yes Creation Date = 29-04-2021 Creation Time = 10:53:28 AM Emulation type = default Is LD Ready for OS Requests = Yes SCSI NAA Id = 6003048014579200281d4ca843bb0950 phpsysinfo-3.4.4/sample/plugin_raid/raidzpool1.txt000066400000000000000000000011231467431054600223360ustar00rootroot00000000000000 pool: tank state: DEGRADED status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://www.sun.com/msg/ZFS-8000-2Q scrub: none requested config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 c1t0d0 ONLINE 0 0 0 c1t1d0 UNAVAIL 0 0 0 cannot open errors: No known data errors phpsysinfo-3.4.4/sample/plugin_raid/raidzpool10.txt000066400000000000000000000004261467431054600224230ustar00rootroot00000000000000 pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 errors: No known data errors phpsysinfo-3.4.4/sample/plugin_raid/raidzpool11.txt000066400000000000000000000006341467431054600224250ustar00rootroot00000000000000 pool: vol0 state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM vol0 ONLINE 0 0 0 raidz2 ONLINE 0 0 0 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 sdd ONLINE 0 0 0 spares sde AVAIL errors: No known data errorsphpsysinfo-3.4.4/sample/plugin_raid/raidzpool12.txt000066400000000000000000000014741467431054600224310ustar00rootroot00000000000000 pool: zeepool state: DEGRADED status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://www.sun.com/msg/ZFS-8000-2Q scrub: resilver in progress for 0h0m, 70.47% done, 0h0m to go config: NAME STATE READ WRITE CKSUM zeepool DEGRADED 0 0 0 mirror-0 DEGRADED 0 0 0 c1t2d0 ONLINE 0 0 0 spare-1 DEGRADED 0 0 0 c2t1d0 UNAVAIL 0 0 0 cannot open c2t3d0 ONLINE 0 0 0 70.5M resilvered spares c2t3d0 INUSE currently in use errors: No known data errors phpsysinfo-3.4.4/sample/plugin_raid/raidzpool13.txt000066400000000000000000000003501467431054600224220ustar00rootroot00000000000000 pool: rpool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 c1d0 ONLINE 0 0 0 errors: No known data errors phpsysinfo-3.4.4/sample/plugin_raid/raidzpool2.txt000066400000000000000000000012321467431054600223400ustar00rootroot00000000000000 pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 c4t5d0 ONLINE 0 0 0 c4t6d0 ONLINE 0 0 0 c4t7d0 ONLINE 0 0 0 c4t8d0 ONLINE 0 0 0 raidz1-1 ONLINE 0 0 0 c4t9d0 ONLINE 0 0 0 c4t10d0 ONLINE 0 0 0 c4t11d0 ONLINE 0 0 0 c4t12d0 ONLINE 0 0 0 errors: No known data errors phpsysinfo-3.4.4/sample/plugin_raid/raidzpool3.txt000066400000000000000000000015541467431054600223500ustar00rootroot00000000000000 pool: zones state: DEGRADED status: One or more devices are faulted in response to persistent errors. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Replace the faulted device, or use 'zpool clear' to mark the device repaired. scrub: resilver completed after 0h4m with 0 errors on Thu Dec 5 14:57:15 2013 config: NAME STATE READ WRITE CKSUM zones DEGRADED 0 0 0 raidz1 DEGRADED 0 0 0 c1t0d0s3 ONLINE 0 0 0 c1t1d0s3 ONLINE 0 0 0 c1t2d0s2 ONLINE 0 0 0 c1t3d0s2 ONLINE 0 0 0 c1t4d0s2 FAULTED 0 0 0 too many errors c1t5d0s2 ONLINE 0 0 0 errors: No known data errors phpsysinfo-3.4.4/sample/plugin_raid/raidzpool4.txt000066400000000000000000000016441467431054600223510ustar00rootroot00000000000000 pool: zones state: DEGRADED status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scrub: resilver in progress for 0h9m, 72.01% done, 0h3m to go config: NAME STATE READ WRITE CKSUM zones DEGRADED 0 0 0 raidz1 DEGRADED 0 0 0 c1t0d0s3 ONLINE 0 0 0 c1t1d0s3 ONLINE 0 0 0 c1t2d0s2 ONLINE 0 0 0 c1t3d0s2 ONLINE 0 0 0 replacing DEGRADED 0 0 0 c1t4d0s2/old FAULTED 0 0 0 too many errors c1t4d0s2 ONLINE 0 0 0 c1t5d0s2 ONLINE 0 0 0 errors: No known data errors phpsysinfo-3.4.4/sample/plugin_raid/raidzpool5.txt000066400000000000000000000007221467431054600223460ustar00rootroot00000000000000 pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t1d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 c0t2d0 ONLINE 0 0 0 c1t2d0 ONLINE 0 0 0 errors: No known data errors phpsysinfo-3.4.4/sample/plugin_raid/raidzpool6.txt000066400000000000000000000006011467431054600223430ustar00rootroot00000000000000 pool: pool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM pool ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 c0t8d0 ONLINE 0 0 0 c0t9d0 ONLINE 0 0 0 logs c0t10d0 ONLINE 0 0 0 errors: No known data errors phpsysinfo-3.4.4/sample/plugin_raid/raidzpool7.txt000066400000000000000000000007421467431054600223520ustar00rootroot00000000000000 pool: newpool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM newpool ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c0t4d0 ONLINE 0 0 0 c0t5d0 ONLINE 0 0 0 logs mirror-1 ONLINE 0 0 0 c0t6d0 ONLINE 0 0 0 c0t7d0 ONLINE 0 0 0 errors: No known data errors phpsysinfo-3.4.4/sample/plugin_raid/raidzpool8.txt000066400000000000000000000007401467431054600223510ustar00rootroot00000000000000 pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c2t0d0 ONLINE 0 0 0 c2t1d0 ONLINE 0 0 0 c2t3d0 ONLINE 0 0 0 cache c2t5d0 ONLINE 0 0 0 c2t8d0 ONLINE 0 0 0 errors: No known data errors phpsysinfo-3.4.4/sample/plugin_raid/raidzpool9.txt000066400000000000000000000032171467431054600223540ustar00rootroot00000000000000 pool: data state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scan: resilver in progress since Sat Mar 11 10:01:16 2017 6.16G scanned out of 28.9T at 263M/s, 32h3m to go 2.02G resilvered, 0.02% done config: NAME STATE READ WRITE CKSUM data ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 sdd ONLINE 0 0 0 replacing-1 UNAVAIL 0 0 0 5824186382562856058 UNAVAIL 0 0 0 was /dev/sdb1/old sdb1 ONLINE 0 0 0 (resilvering) sde ONLINE 0 0 0 raidz1-1 ONLINE 0 0 0 sdj ONLINE 0 0 0 sdk ONLINE 0 0 0 sdl ONLINE 0 0 0 raidz1-2 ONLINE 0 0 0 sdg ONLINE 0 0 0 16211591403717513484 UNAVAIL 0 0 0 was /dev/sdb1 sdf ONLINE 0 0 0 raidz1-3 ONLINE 0 0 0 sdc ONLINE 0 0 0 sdh ONLINE 0 0 0 sdi ONLINE 0 0 0 errors: No known data errorsphpsysinfo-3.4.4/sample/plugin_smart/000077500000000000000000000000001467431054600177235ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/plugin_smart/smart0.txt000066400000000000000000000036631467431054600217020ustar00rootroot00000000000000smartctl version 5.38 [x86_64-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen Home page is http://smartmontools.sourceforge.net/ Device: SEAGATE ST3146855LW Version: 0003 Serial number: 3LN1GA[rest of serial number redacted] Device type: disk Transport protocol: Parallel SCSI (SPI-4) Local Time is: Sat Jan 30 21:59:56 2010 CET Device supports SMART and is Enabled Temperature Warning Enabled SMART Health Status: OK Current Drive Temperature: 39 C Drive Trip Temperature: 68 C Elements in grown defect list: 0 Vendor (Seagate) cache information Blocks sent to initiator = 1490558074 Blocks received from initiator = 624662611 Blocks read from cache and sent to initiator = 2900209651 Number of read and write commands whose size <= segment size = 386699414 Number of read and write commands whose size > segment size = 28 Vendor (Seagate/Hitachi) factory information number of hours powered up = 14959.20 number of minutes until next internal SMART test = 44 Error counter log: Errors Corrected by Total Correction Gigabytes Total ECC rereads/ errors algorithm processed uncorrected fast | delayed rewrites corrected invocations [10^9 bytes] errors read: 6663270 0 0 6663270 6663270 5100.626 0 write: 0 0 0 0 0 12594895028.099 0 verify: 22626 0 0 22626 22626 28.314 0 Non-medium error count: 3 [GLTSD (Global Logging Target Save Disable) set. Enable Save with '-S on'] SMART Self-test log Num Test Status segment LifeTime LBA_first_err [SK ASC ASQ] Description number (hours) # 1 Background long Interrupted ('-X' switch) - 14371 - [- - -] Long (extended) Self Test duration: 1367 seconds [22.8 minutes] phpsysinfo-3.4.4/sample/plugin_smart/smart1.txt000066400000000000000000000112111467431054600216670ustar00rootroot00000000000000smartctl version 5.38 [x86_64-unknown-linux-gnu] Copyright (C) 2002-8 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF INFORMATION SECTION === Device Model: Hitachi HDS722020ALA330 Serial Number: JK1121[rest of serial number redacted] Firmware Version: JKAOA20N User Capacity: 2,000,398,934,016 bytes Device is: Not in smartctl database [for details use: -P showall] ATA Version is: 8 ATA Standard is: ATA-8-ACS revision 4 Local Time is: Tue Dec 1 15:21:30 2009 CST SMART support is: Available - device has SMART capability. SMART support is: Enabled === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED General SMART Values: Offline data collection status: (0x84) Offline data collection activity was suspended by an interrupting command from host. Auto Offline Data Collection: Enabled. Self-test execution status: ( 0) The previous self-test routine completed without error or no self-test has ever been run. Total time to complete Offline data collection: (21742) seconds. Offline data collection capabilities: (0x5b) SMART execute Offline immediate. Auto Offline data collection on/off support. Suspend Offline collection upon new command. Offline surface scan supported. Self-test supported. No Conveyance Self-test supported. Selective Self-test supported. SMART capabilities: (0x0003) Saves SMART data before entering power-saving mode. Supports SMART auto save timer. Error logging capability: (0x01) Error logging supported. General Purpose Logging supported. Short self-test routine recommended polling time: ( 1) minutes. Extended self-test routine recommended polling time: ( 255) minutes. SCT capabilities: (0x003d) SCT Status supported. SCT Feature Control supported. SCT Data Table supported. SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000b 100 100 016 Pre-fail Always - 0 2 Throughput_Performance 0x0005 134 134 054 Pre-fail Offline - 98 3 Spin_Up_Time 0x0007 123 123 024 Pre-fail Always - 587 (Average 584) 4 Start_Stop_Count 0x0012 100 100 000 Old_age Always - 16 5 Reallocated_Sector_Ct 0x0033 100 100 005 Pre-fail Always - 0 7 Seek_Error_Rate 0x000b 100 100 067 Pre-fail Always - 0 8 Seek_Time_Performance 0x0005 114 114 020 Pre-fail Offline - 38 9 Power_On_Hours 0x0012 100 100 000 Old_age Always - 292 10 Spin_Retry_Count 0x0013 100 100 060 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 16 192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 16 193 Load_Cycle_Count 0x0012 100 100 000 Old_age Always - 16 194 Temperature_Celsius 0x0002 230 230 000 Old_age Always - 27 (Lifetime Min/Max 20/45) 196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 0 197 Current_Pending_Sector 0x0022 100 100 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0008 100 100 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x000a 200 200 000 Old_age Always - 0 SMART Error Log Version: 0 No Errors Logged SMART Self-test log structure revision number 1 No self-tests have been logged. [To run self-tests, use: smartctl -t] SMART Selective self-test log data structure revision number 1 SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS 1 0 0 Not_testing 2 0 0 Not_testing 3 0 0 Not_testing 4 0 0 Not_testing 5 0 0 Not_testing Selective self-test flags (0x0): After scanning selected spans, do NOT read-scan remainder of disk. If Selective self-test is pending on power-up, resume after 0 minute delay. phpsysinfo-3.4.4/sample/plugin_smart/smart2.txt000066400000000000000000000042011467431054600216710ustar00rootroot00000000000000smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.4.0-98-generic] (local build) Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Number: INTEL SSDPEDMD400G4 Serial Number: XXXXXXXXXXXXXXXXXX Firmware Version: XXXXXXXXX PCI Vendor/Subsystem ID: 0x8086 IEEE OUI Identifier: 0x5cd2e4 Controller ID: 0 Number of Namespaces: 1 Namespace 1 Size/Capacity: 400,088,457,216 [400 GB] Namespace 1 Formatted LBA Size: 512 Local Time is: Wed Nov 22 12:56:42 2017 CET Firmware Updates (0x02): 1 Slot Optional Admin Commands (0x0006): Format Frmw_DL Optional NVM Commands (0x0006): Wr_Unc DS_Mngmt Maximum Data Transfer Size: 32 Pages Supported Power States St Op Max Active Idle RL RT WL WT Ent_Lat Ex_Lat 0 + 25.00W - - 0 0 0 0 0 0 Supported LBA Sizes (NSID 0x1) Id Fmt Data Metadt Rel_Perf 0 + 512 0 2 1 - 512 8 2 2 - 512 16 2 3 - 4096 0 0 4 - 4096 8 0 5 - 4096 64 0 6 - 4096 128 0 === START OF SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED SMART/Health Information (NVMe Log 0x02, NSID 0xffffffff) Critical Warning: 0x00 Temperature: 29 Celsius Available Spare: 100% Available Spare Threshold: 10% Percentage Used: 1% Data Units Read: 380,891,746 [195 TB] Data Units Written: 285,976,046 [146 TB] Host Read Commands: 17,185,258,529 Host Write Commands: 11,740,524,085 Controller Busy Time: 0 Power Cycles: 158 Power On Hours: 3,026 Unsafe Shutdowns: 0 Media and Data Integrity Errors: 0 Error Information Log Entries: 0 Error Information (NVMe Log 0x01, max 64 entries) No Errors Logged phpsysinfo-3.4.4/sample/plugin_smart/smart3.txt000066400000000000000000000224121467431054600216760ustar00rootroot00000000000000smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.78-2-pve] (local build) Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Family: Western Digital Red Device Model: WDC WD20EFRX-68AX9N0 Serial Number: WD-WMC300654321 LU WWN Device Id: 5 0014ee 058d123a4 Firmware Version: 80.00A80 User Capacity: 2.000.398.934.016 bytes [2,00 TB] Sector Sizes: 512 bytes logical, 4096 bytes physical Device is: In smartctl database [for details use: -P show] ATA Version is: ACS-2 (minor revision not indicated) SATA Version is: SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s) Local Time is: Wed Dec 23 12:45:04 2020 CET SMART support is: Available - device has SMART capability. SMART support is: Enabled === START OF READ SMART DATA SECTION === SMART Status not supported: ATA return descriptor not supported by controller firmware SMART overall-health self-assessment test result: PASSED Warning: This result is based on an Attribute check. General SMART Values: Offline data collection status: (0x00) Offline data collection activity was never started. Auto Offline Data Collection: Disabled. Self-test execution status: ( 0) The previous self-test routine completed without error or no self-test has ever been run. Total time to complete Offline data collection: (26280) seconds. Offline data collection capabilities: (0x7b) SMART execute Offline immediate. Auto Offline data collection on/off support. Suspend Offline collection upon new command. Offline surface scan supported. Self-test supported. Conveyance Self-test supported. Selective Self-test supported. SMART capabilities: (0x0003) Saves SMART data before entering power-saving mode. Supports SMART auto save timer. Error logging capability: (0x01) Error logging supported. General Purpose Logging supported. Short self-test routine recommended polling time: ( 2) minutes. Extended self-test routine recommended polling time: ( 266) minutes. Conveyance self-test routine recommended polling time: ( 5) minutes. SCT capabilities: (0x70bd) SCT Status supported. SCT Error Recovery Control supported. SCT Feature Control supported. SCT Data Table supported. SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x002f 200 200 051 Pre-fail Always - 0 3 Spin_Up_Time 0x0027 174 173 021 Pre-fail Always - 4266 4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 657 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0 7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0 9 Power_On_Hours 0x0032 005 005 000 Old_age Always - 69539 10 Spin_Retry_Count 0x0032 100 100 000 Old_age Always - 0 11 Calibration_Retry_Count 0x0032 100 100 000 Old_age Always - 0 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 657 192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 655 193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 1 194 Temperature_Celsius 0x0022 123 106 000 Old_age Always - 24 196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0030 100 253 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0 200 Multi_Zone_Error_Rate 0x0008 100 253 000 Old_age Offline - 0 SMART Error Log Version: 1 ATA Error Count: 323 (device log contains only the most recent five errors) CR = Command Register [HEX] FR = Features Register [HEX] SC = Sector Count Register [HEX] SN = Sector Number Register [HEX] CL = Cylinder Low Register [HEX] CH = Cylinder High Register [HEX] DH = Device/Head Register [HEX] DC = Device Command Register [HEX] ER = Error register [HEX] ST = Status register [HEX] Powered_Up_Time is measured from power on, and printed as DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes, SS=sec, and sss=millisec. It "wraps" after 49.710 days. Error 323 occurred at disk power-on lifetime: 3990 hours (166 days + 6 hours) When the command that caused the error occurred, the device was active or idle. After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 04 61 0c 00 00 00 00 Device Fault; Error: ABRT Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- ef 03 0c 00 00 00 00 00 6d+22:51:52.646 SET FEATURES [Set transfer mode] e5 00 00 00 00 00 00 00 6d+22:51:52.646 CHECK POWER MODE ec 00 00 00 00 00 00 00 6d+22:51:52.645 IDENTIFY DEVICE ef 03 0c 00 00 00 00 00 6d+22:51:52.396 SET FEATURES [Set transfer mode] e5 00 00 00 00 00 00 00 6d+22:51:52.396 CHECK POWER MODE Error 322 occurred at disk power-on lifetime: 3990 hours (166 days + 6 hours) When the command that caused the error occurred, the device was active or idle. After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 04 61 0c 00 00 00 00 Device Fault; Error: ABRT Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- ef 03 0c 00 00 00 00 00 6d+22:51:52.396 SET FEATURES [Set transfer mode] e5 00 00 00 00 00 00 00 6d+22:51:52.396 CHECK POWER MODE ec 00 00 00 00 00 00 00 6d+22:51:52.396 IDENTIFY DEVICE ef 03 0c 00 00 00 00 00 6d+22:51:52.146 SET FEATURES [Set transfer mode] e5 00 00 00 00 00 00 00 6d+22:51:52.146 CHECK POWER MODE Error 321 occurred at disk power-on lifetime: 3990 hours (166 days + 6 hours) When the command that caused the error occurred, the device was active or idle. After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 04 61 0c 00 00 00 00 Device Fault; Error: ABRT Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- ef 03 0c 00 00 00 00 00 6d+22:51:52.146 SET FEATURES [Set transfer mode] e5 00 00 00 00 00 00 00 6d+22:51:52.146 CHECK POWER MODE ec 00 00 00 00 00 00 00 6d+22:51:52.146 IDENTIFY DEVICE ef 03 0c 00 00 00 00 00 6d+22:51:51.896 SET FEATURES [Set transfer mode] e5 00 00 00 00 00 00 00 6d+22:51:51.896 CHECK POWER MODE Error 320 occurred at disk power-on lifetime: 3990 hours (166 days + 6 hours) When the command that caused the error occurred, the device was active or idle. After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 04 61 0c 00 00 00 00 Device Fault; Error: ABRT Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- ef 03 0c 00 00 00 00 00 6d+22:51:51.896 SET FEATURES [Set transfer mode] e5 00 00 00 00 00 00 00 6d+22:51:51.896 CHECK POWER MODE ec 00 00 00 00 00 00 00 6d+22:51:51.896 IDENTIFY DEVICE ef 03 0c 00 00 00 00 00 6d+22:51:51.647 SET FEATURES [Set transfer mode] e5 00 00 00 00 00 00 00 6d+22:51:51.647 CHECK POWER MODE Error 319 occurred at disk power-on lifetime: 3990 hours (166 days + 6 hours) When the command that caused the error occurred, the device was active or idle. After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 04 61 0c 00 00 00 00 Device Fault; Error: ABRT Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- ef 03 0c 00 00 00 00 00 6d+22:51:51.647 SET FEATURES [Set transfer mode] e5 00 00 00 00 00 00 00 6d+22:51:51.647 CHECK POWER MODE ec 00 00 00 00 00 00 00 6d+22:51:51.647 IDENTIFY DEVICE ef 03 0c 00 00 00 00 00 6d+22:51:51.647 SET FEATURES [Set transfer mode] e5 00 00 00 00 00 00 00 6d+22:51:51.647 CHECK POWER MODE SMART Self-test log structure revision number 1 No self-tests have been logged. [To run self-tests, use: smartctl -t] SMART Selective self-test log data structure revision number 1 SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS 1 0 0 Not_testing 2 0 0 Not_testing 3 0 0 Not_testing 4 0 0 Not_testing 5 0 0 Not_testing Selective self-test flags (0x0): After scanning selected spans, do NOT read-scan remainder of disk. If Selective self-test is pending on power-up, resume after 0 minute delay. phpsysinfo-3.4.4/sample/plugin_smart/smart4.txt000066400000000000000000000036331467431054600217030ustar00rootroot00000000000000smartctl version 5.38 [x86_64-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen Home page is http://smartmontools.sourceforge.net/ Device: SEAGATE ST3146855LW Version: 0003 Serial number: 3LN38VV300001234X9Y9 Device type: disk Transport protocol: Parallel SCSI (SPI-4) Local Time is: Wed Jan 6 11:12:33 2010 CET Device supports SMART and is Enabled Temperature Warning Enabled SMART Health Status: FAILURE PREDICTION THRESHOLD EXCEEDED [asc=5d, ascq=0] Current Drive Temperature: 41 C Drive Trip Temperature: 68 C Vendor (Seagate) cache information Blocks sent to initiator = 2530286685 Blocks received from initiator = 69995041 Blocks read from cache and sent to initiator = 369926188 Number of read and write commands whose size <= segment size = 285052588 Number of read and write commands whose size > segment size = 2 Vendor (Seagate/Hitachi) factory information number of hours powered up = 14396.07 number of minutes until next internal SMART test = 49 Error counter log: Errors Corrected by Total Correction Gigabytes Total ECC rereads/ errors algorithm processed uncorrected fast | delayed rewrites corrected invocations [10^9 bytes] errors read: 31670228 7327 0 31677555 31677510 1071.313 63 write: 0 0 0 0 0 15728656813.914 0 verify: 527341 3 0 527344 527452 131.461 0 Non-medium error count: 1618 [GLTSD (Global Logging Target Save Disable) set. Enable Save with '-S on'] SMART Self-test log Num Test Status segment LifeTime LBA_first_err [SK ASC ASQ] Description number (hours) # 1 Background long Interrupted ('-X' switch) - 14394 - [- - -] Long (extended) Self Test duration: 1367 seconds [22.8 minutes] phpsysinfo-3.4.4/sample/plugin_updatenotifier/000077500000000000000000000000001467431054600216175ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/plugin_updatenotifier/ubuntu-landscape1.txt000066400000000000000000000000771467431054600257170ustar00rootroot00000000000000 27 packages can be updated. 15 updates are security updates. phpsysinfo-3.4.4/sample/plugin_updatenotifier/ubuntu-landscape2.txt000066400000000000000000000001411467431054600257100ustar00rootroot000000000000001 updates can be applied immediately. To see these additional updates run: apt list --upgradable phpsysinfo-3.4.4/sample/plugin_updatenotifier/ubuntu-landscape3.txt000066400000000000000000000002241467431054600257130ustar00rootroot0000000000000018 updates can be applied immediately. 9 of these updates are standard security updates. To see these additional updates run: apt list --upgradable phpsysinfo-3.4.4/sample/plugin_updatenotifier/ubuntu-landscape4.txt000066400000000000000000000003311467431054600257130ustar00rootroot00000000000000Expanded Security Maintenance for Applications is not enabled. 0 updates can be applied immediately. Enable ESM Apps to receive additional future security updates. See https://ubuntu.com/esm or run: sudo pro status phpsysinfo-3.4.4/sample/plugin_updatenotifier/ubuntu-landscape5.txt000066400000000000000000000003511467431054600257160ustar00rootroot00000000000000Expanded Security Maintenance for Applications is not enabled. 0 updates can be applied immediately. 56 additional security updates can be applied with ESM Apps. Learn more about enabling ESM Apps service at https://ubuntu.com/esm phpsysinfo-3.4.4/sample/plugin_updatenotifier/ubuntu-landscape6.txt000066400000000000000000000003551467431054600257230ustar00rootroot00000000000000UA Infra: Extended Security Maintenance (ESM) is enabled. 3 packages can be updated. 1 of these updates is fixed through UA Infra: ESM. 1 of these updates is a security update. To see these additional updates run: apt list --upgradable phpsysinfo-3.4.4/sample/plugin_updatenotifier/ubuntu-landscape7.txt000066400000000000000000000005101467431054600257150ustar00rootroot00000000000000Expanded Security Maintenance for Applications is not enabled. 30 updates can be applied immediately. 14 of these updates are standard security updates. To see these additional updates run: apt list --upgradable Enable ESM Apps to receive additional future security updates. See https://ubuntu.com/esm or run: sudo pro status phpsysinfo-3.4.4/sample/plugin_updatenotifier/universal-format.txt000066400000000000000000000000041467431054600256500ustar00rootroot0000000000000017;5phpsysinfo-3.4.4/sample/processes/000077500000000000000000000000001467431054600172255ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/processes/processes.txt000066400000000000000000000063601467431054600220010ustar00rootroot00000000000000Processes state translation table -----Linux (Android) [R] R Running [S] S Sleeping in an interruptible wait [D] D Waiting in uninterruptible disk sleep [Z] Z Zombie [T] T Stopped (on a signal) or (before Linux 2.6.33) trace stopped t Tracing stop (Linux 2.6.33 onward) W Paging (only before Linux 2.6.0) X Dead (from Linux 2.6.0 onward) x Dead (Linux 2.6.33 to 3.13 only) K Wakekill (Linux 2.6.33 to 3.13 only) W Waking (Linux 2.6.33 to 3.13 only) P Parked (Linux 3.9 to 3.13 only) -----FreeBSD [D] D Marks a process in disk (or other short term, uninterruptible) wait. [S] I Marks a process that is idle (sleeping for longer than about 20 seconds). [D] L Marks a process that is waiting to acquire a lock. [R] R Marks a runnable process. [S] S Marks a process that is sleeping for less than about 20 seconds. [T] T Marks a stopped process. W Marks an idle interrupt thread. [Z] Z Marks a dead process (a ``zombie''). -----NetBSD [D] D Marks a process in disk (or other short term, uninterruptible) wait. [S] I Marks a process that is idle (sleeping for longer than about 20 seconds). [R] O Marks a process running on a processor. [R] R Marks a runnable process, or one that is in the process of creation. [S] S Marks a process that is sleeping for less than about 20 seconds. [T] T Marks a stopped process. U Marks a suspended process. [Z] Z Marks a dead process (a ``zombie''). -----OpenBSD [D] D Marks a process in disk (or other short term, uninterruptible) wait. [S] I Marks a process that is idle (sleeping for longer than about 20 seconds). [R] R Marks a runnable process. [S] S Marks a process that is sleeping for less than about 20 seconds. [T] T Marks a stopped process. [Z] Z Marks a dead process (a ``zombie''). -----Darwin [S] I Marks a process that is idle (sleeping for longer than about 20 seconds). [R] R Marks a runnable process. [S] S Marks a process that is sleeping for less than about 20 seconds. [T] T Marks a stopped process. [D] U Marks a process in uninterruptible wait. [Z] Z Marks a dead process (a ``zombie''). [d] D [invalid state] -----Minix [R] R runnable [S] S sleeping (i.e.,suspended on PM or VFS) [T] T stopped [D] W waiting (on a message) [Z] Z zombie [d] D [invalid state] -----DragonFly B Marks a blocked kernel thread. [D] D Marks a process in disk (or other short term, uninterruptible) wait. [S] I Marks a process that is idle (sleeping for longer than about 20 seconds). J Marks a process which is in jail(2). The hostname of the prison can be found in /proc//status. [R] R Marks a runnable process and is followed by the CPU number. [S] S Marks a process that is sleeping for less than about 20 seconds. [T] T Marks a stopped process. [Z] Z Marks a dead process (a ``zombie''). -----SunOS [R] O Process is running on a processor. [S] S Sleeping: process is waiting for an event to complete. [R] R Runnable: process is on run queue. [T] T Process is stopped, either by a job control signal or because it is being traced. [D] W Waiting: process is waiting for CPU usage to drop to the CPU-caps enforced limits [Z] Z Zombie state: process terminated and parent not waiting. [d] D [invalid state] phpsysinfo-3.4.4/sample/ups/000077500000000000000000000000001467431054600160265ustar00rootroot00000000000000phpsysinfo-3.4.4/sample/ups/apcupsd.txt000066400000000000000000000024541467431054600202330ustar00rootroot00000000000000APC : 001,052,1303 DATE : 2014-06-15 09:53:19 +0200 HOSTNAME : intranet VERSION : 3.14.10 (13 September 2011) redhat UPSNAME : UPS_1 CABLE : Custom Cable Smart DRIVER : APC Smart UPS (any) UPSMODE : Stand Alone STARTTIME: 2014-05-21 17:17:39 +0200 MODEL : SMART-UPS 700 STATUS : ONLINE LINEV : 231.4 Volts LOADPCT : 23.9 Percent Load Capacity BCHARGE : 100.0 Percent TIMELEFT : 6.0 Minutes MBATTCHG : 5 Percent MINTIMEL : 3 Minutes MAXTIME : 0 Seconds MAXLINEV : 232.7 Volts MINLINEV : 230.1 Volts OUTPUTV : 231.4 Volts SENSE : High DWAKE : 000 Seconds DSHUTD : 020 Seconds DLOWBATT : 02 Minutes LOTRANS : 196.0 Volts HITRANS : 253.0 Volts RETPCT : 000.0 Percent ITEMP : 36.9 C Internal ALARMDEL : 5 seconds BATTV : 27.7 Volts LINEFREQ : 50.0 Hz LASTXFER : Line voltage notch or spike NUMXFERS : 8 XONBATT : 2014-06-12 13:25:24 +0200 TONBATT : 0 seconds CUMONBATT: 13 seconds XOFFBATT : 2014-06-12 13:25:26 +0200 SELFTEST : NO STESTI : 336 STATFLAG : 0x07000008 Status Flag DIPSW : 0x00 Dip Switch REG1 : 0x00 Register 1 REG2 : 0x00 Register 2 REG3 : 0x00 Register 3 MANDATE : 12/01/98 SERIALNO : NS9876543210 BATTDATE : 08/01/14 NOMOUTV : 230 Volts NOMBATTV : 24.0 Volts EXTBATTS : 0 FIRMWARE : 50.11.I END APC : 2014-06-15 09:54:07 +0200 phpsysinfo-3.4.4/sample/ups/nutDell2700.txt000066400000000000000000000034341467431054600205130ustar00rootroot00000000000000battery.capacity: 9.00 battery.charge: 96 battery.charge.low: 30 battery.charge.restart: 0 battery.energysave: no battery.runtime: 4963 battery.runtime.low: 180 battery.type: PbAc device.mfr: DELL device.model: Dell UPS Rack/Tower 2700W HV - 230V device.serial: device.type: ups driver.name: usbhid-ups driver.parameter.pollfreq: 30 driver.parameter.pollinterval: 2 driver.parameter.port: auto driver.version: 2.6.3 driver.version.data: MGE HID 1.27 driver.version.internal: 0.35 input.frequency: 50.0 input.frequency.nominal: 50 input.transfer.boost.low: 210 input.transfer.high: 286 input.transfer.low: 160 input.transfer.trim.high: 250 input.voltage: 226.0 input.voltage.nominal: 230 outlet.1.autoswitch.charge.low: 0 outlet.1.delay.shutdown: 2147483647 outlet.1.delay.start: 0 outlet.1.desc: PowerShare Outlet 1 outlet.1.id: 1 outlet.1.status: on outlet.1.switchable: yes outlet.2.autoswitch.charge.low: 0 outlet.2.delay.shutdown: 2147483647 outlet.2.delay.start: 1 outlet.2.desc: PowerShare Outlet 2 outlet.2.id: 2 outlet.2.status: on outlet.2.switchable: yes outlet.desc: Main Outlet outlet.id: 0 outlet.switchable: no output.current: 1.40 output.frequency: 50.0 output.frequency.nominal: 50 output.voltage: 226.0 output.voltage.nominal: 230 ups.beeper.status: enabled ups.date: 2012/11/24 ups.delay.shutdown: 20 ups.delay.start: 30 ups.firmware: 01.14.0003 ups.load: 13 ups.load.high: 110 ups.mfr: DELL ups.model: Dell UPS Rack/Tower 2700W HV - 230V ups.power: 333 ups.power.nominal: 2700 ups.productid: ffff ups.realpower: 306 ups.realpower.nominal: 2700 ups.serial: ups.start.battery: yes ups.start.reboot: yes ups.status: OL CHRG ups.test.interval: 7776000 ups.test.result: No test initiated ups.time: 22:45:33 ups.timer.shutdown: 0 ups.timer.start: 0 ups.type: offline / line interactive ups.vendorid: 047c phpsysinfo-3.4.4/sample/ups/nutPW5110.txt000066400000000000000000000007001467431054600201500ustar00rootroot00000000000000battery.voltage: 13.5 driver.name: bcmxcp_usb driver.parameter.pollinterval: 2 driver.parameter.port: auto driver.version: 2.2.2 driver.version.internal: 0.14 input.frequency: 49.9 input.voltage: 234 output.current: 0.3 output.frequency: 49.9 output.phases: 1 output.voltage: 234 output.voltage.nominal: 240 ups.firmware: Cont:00.50 Inve:01.50 ups.load: 16.7 ups.model: POWERWARE UPS 700VA ups.power.nominal: 700 ups.serial: ups.status: OLphpsysinfo-3.4.4/sample/ups/pmset1.txt000066400000000000000000000001221467431054600177730ustar00rootroot00000000000000Now drawing from 'AC Power' -InternalBattery-0 100%; charged; 0:00 remaining phpsysinfo-3.4.4/sample/ups/pmset2.txt000066400000000000000000000001321467431054600177750ustar00rootroot00000000000000Now drawing from 'Battery Power' -InternalBattery-0 100%; discharging; (no estimate) phpsysinfo-3.4.4/sample/ups/pmset3.txt000066400000000000000000000001241467431054600177770ustar00rootroot00000000000000Now drawing from 'AC Power' -Back-UPS XS 900 FW:830.E7 .D USB FW:E7 100%; charging phpsysinfo-3.4.4/sample/ups/pmset4.txt000066400000000000000000000001521467431054600200010ustar00rootroot00000000000000Currently drawing from 'UPS Power' -Back-UPS BR 800 FW:9.o4 .D USB FW:o4 98%; discharging; 0:21 remainingphpsysinfo-3.4.4/sample/ups/pmset5.txt000066400000000000000000000002011467431054600177750ustar00rootroot00000000000000Now drawing from 'AC Power' -Back-UPS ES 850G2 FW:938.a2 .I USB FW:a2 (id=12345678) 100%; AC attached; not charging present: truephpsysinfo-3.4.4/sample/ups/pmset6.txt000066400000000000000000000002031467431054600200000ustar00rootroot00000000000000Now drawing from 'AC Power' -Back-UPS ES 850G2 FW:938.a2 .I USB FW:a2 (id=12345678) 100%; discharging; 0:16 remaining present: truephpsysinfo-3.4.4/sample/ups/pmset7.txt000066400000000000000000000001571467431054600200110ustar00rootroot00000000000000Now drawing from 'AC Power' -Back-UPS ES 850G2 FW:938.a2 .I USB FW:a2 (id=12345678) 75%; charging present: truephpsysinfo-3.4.4/sample/ups/powersoftplus.txt000066400000000000000000000014611467431054600215250ustar00rootroot00000000000000PowerSoft Plus v.0.1.6 - EVER UPS monitoring software =========================================================== Current UPS state : Normal mode Alert : - ----------------------------------------------------------- Identifier: UPS Model : SINLINE 1200 Identifier: UPS Version : Firmware: 1.1 Battery state : At full capacity Battery voltage : 27.2 [Volt] Input voltage : 228 [Volt] Input frequency : 50.0 [Hz] Output voltage : 229 [Volt] Output current : 0.4 [A] Effective power : 61 [W] Output load : 0 [%] =========================================================== phpsysinfo-3.4.4/sample/ups/snmpups.txt000066400000000000000000000014641467431054600203010ustar00rootroot00000000000000.1.3.6.1.4.1.318.1.1.1.1.1.1.0 = STRING: "OR1500LCDRM1U" .1.3.6.1.4.1.318.1.1.1.1.1.2.0 = STRING: "raspberrypi" .1.3.6.1.4.1.318.1.1.1.1.2.3.0 = STRING: "BFE7103*1E1" .1.3.6.1.4.1.318.1.1.1.2.1.1.0 = INTEGER: 2 .1.3.6.1.4.1.318.1.1.1.2.1.2.0 = Timeticks: (0) 0:00:00.00 .1.3.6.1.4.1.318.1.1.1.2.2.1.0 = Gauge32: 100 .1.3.6.1.4.1.318.1.1.1.2.2.3.0 = Timeticks: (390000) 1:05:00.00 .1.3.6.1.4.1.318.1.1.1.3.2.1.0 = Gauge32: 122 .1.3.6.1.4.1.318.1.1.1.4.1.1.0 = INTEGER: 2 .1.3.6.1.4.1.318.1.1.1.4.2.1.0 = Gauge32: 122 .1.3.6.1.4.1.318.1.1.1.4.2.3.0 = Gauge32: 13 .1.3.6.1.4.1.318.1.1.1.5.2.2.0 = INTEGER: 140 .1.3.6.1.4.1.318.1.1.1.5.2.3.0 = INTEGER: 90 .1.3.6.1.4.1.318.1.1.1.5.2.4.0 = INTEGER: 0 .1.3.6.1.4.1.318.1.1.1.5.2.8.0 = Timeticks: (60000) 0:10:00.00 .1.3.6.1.4.1.318.1.1.1.5.2.9.0 = Timeticks: (100) 0:00:01.00 phpsysinfo-3.4.4/templates/000077500000000000000000000000001467431054600157345ustar00rootroot00000000000000phpsysinfo-3.4.4/templates/aqua.css000066400000000000000000000053571467431054600174070ustar00rootroot00000000000000/* $Id* */ a { text-decoration: none; color: #c03000; } a:hover { text-decoration: underline; } * { margin: 0; padding: 0; } wbr { display: inline-block; } html { height: 100%; background: url("aqua/aq_background.gif"); } body { position: relative; width: 940px; _width: 945px; /* ie6 */ min-height: 100%; overflow: auto; margin: 0 auto; padding: 20px 20px 0 20px; font: 75% arial, tahoma, helvetica, sans-serif; color: #000; } p { padding: 4px 10px 2px 10px; line-height: 1.6; text-align: left; vertical-align: top; } h1 { margin: 0 10px; _margin: 0 15px 0 10px; /* ie6 */ padding: 10px 10px; border-top: 1px solid #2971a7; border-bottom: 1px solid #2971a7; font-size: 1.67em; font-weight: normal; color: #fff; background: #2971a7; } h2 { padding: 5px 10px; font-family: "trebuchet ms"; font-size: 1em; font-weight: bold; letter-spacing: 0.0em; text-transform: uppercase; color: #fff; background: #2971a7; text-align: center; } th, td, h3 { padding: 4px 10px 2px 10px; text-align: left; vertical-align: top; } h3 { font-size: 100%; } table { width: 100%; font-size: 1em; background-color: #fff; } table tfoot td { color: #2e2e2e; } select { background-color: #fefefe; } #select { text-align: right; padding: 10px 10px 0 10px; font-size: 0.8em; } #select select { width: 100px; } .fullsize, .halfsize { float: left; margin: 10px 0 0 8px; _margin: 10px 4px 0 4px; /* ie6 */ padding: 1px; border: 2px solid #2971a7; background: #fff; } .fullsize { width: 916px; } .halfsize { width: 451px; } #filesystemTable thead tr th { cursor: pointer; } #footer { clear: both; color: #000; margin: 12px; padding: 13px 25px; line-height: 18px; } .plugin { float: left; margin: 10px 0 0 8px; _margin: 10px 4px 0 4px; /* ie6 */ padding: 1px; border: 2px solid #2971a7; background: #fff; } .even { background: #e4ebf3; } .bar { background: #2971a7; } .barwarn { background: #a72971; } .barrest { background: #29a79e; } .right { text-align: right; padding-right: 20px; } .dataTables_wrapper{ margin: 0 0 0 0 !important; border: 0px !important; } .treeimg { display: table-cell; *float: left; /* ie6 ie7 */ vertical-align: top; } .treespan { display: table-cell; *float: left; /* ie6 ie7 */ } .treespanbold { font-weight: bold; display: table-cell; *float: left; /* ie6 ie7 */ } .tree tr td { cursor: auto; height: 100%; } .treediv { display: table; height: 100%; } .tablemain { width: 100%; height: 100%; } phpsysinfo-3.4.4/templates/aqua/000077500000000000000000000000001467431054600166635ustar00rootroot00000000000000phpsysinfo-3.4.4/templates/aqua/aq_background.gif000066400000000000000000000004431467431054600221530ustar00rootroot00000000000000GIF89ax䄄lllCCCԭiiisssιϼ AAAGGG,x`'dihlp,tmx|pH,Ȥrl:ШtJyجvzxL.zn|N~kX!;phpsysinfo-3.4.4/templates/blue.css000066400000000000000000000055161467431054600174040ustar00rootroot00000000000000a { text-decoration: none; color: #efefef; } a:hover { text-decoration: underline; } * { margin: 0; padding: 0; } wbr { display: inline-block; } html { background: url("blue/bg.png") #195287; color: #195287; font-size: 100%; height: 100%; } body { font-family: Helvetica, Verdana, Tahoma, Arial, 'Liberation Sans', FreeSans, sans-serif; font-size: .75em; position: relative; margin: 0 auto; min-height: 100%; padding: 20px 20px 0 20px; overflow: auto; width: 940px; _width: 945px; /* ie6 */ } p { padding: 4px 10px 2px 10px; line-height: 1.6; text-align: left; vertical-align: top; } h1 { color: #fff; font-size: 170%; font-weight: bold; line-height: 1.5em; margin: 0 10px; _margin: 0 15px 0 10px; /* ie6 */ padding: 10px 10px; text-align: center; text-shadow: #444 2px 2px 3px; } h2 { background-image: url('blue/title.png'); background-color: #195287; color: #fff; font-size: 130%; font-weight: bold; line-height: 1.5em; padding: 3px 10px; /*text-transform: uppercase;*/ text-shadow: #333 2px 2px 2px; } th, td, h3 { font-size: 100%; padding: 4px 10px 2px 10px; text-align: left; vertical-align: top; } table { width: 100%; } select { background-color: #fefefe; } #select { text-align: right; padding: 0 10px 0 10px; color: #fff } #select select { width: 100px; } .fullsize, .halfsize { background-color: #fff; float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; } .fullsize { width: 918px; } .halfsize { width: 453px; } #filesystemTable thead tr th { cursor: pointer; } #footer { clear: both; color: #fff; margin: 12px; padding: 13px 25px; line-height: 18px; font-size: 80%; text-align: center; } .plugin { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; background-color: #f6f6f6; } .odd { background-color: #f6f6f6; } .even { background-color: #efefef; } .bar { background-image: url('blue/bar.png'); background-color: #195287; } .barwarn { background-image: url('blue/barwarn.png'); background-color: #871952; } .barrest { background-image: url('blue/barrest.png'); background-color: #198785; } .right { padding-right: 20px; text-align: right; } .treeimg { display: table-cell; *float: left; /* ie6 ie7 */ vertical-align: top; } .treespan { display: table-cell; *float: left; /* ie6 ie7 */ } .treespanbold { font-weight: bold; display: table-cell; *float: left; /* ie6 ie7 */ } .tree tr td { cursor: auto; height: 100%; } .treediv { display: table; height: 100%; } .tablemain { width: 100%; height: 100%; } phpsysinfo-3.4.4/templates/blue/000077500000000000000000000000001467431054600166635ustar00rootroot00000000000000phpsysinfo-3.4.4/templates/blue/bar.png000066400000000000000000000006711467431054600201410ustar00rootroot00000000000000PNG  IHDR%gAMA a cHRMz&u0`:pQ<NPLTERVVU [ \!\ [&b%b%c%b*i+i*j+j0p0q/p4v4u4v3vTRV%XbKGDntIME 3qCIDATו %!(!W p8"!č#RwEV-ͺ5y^c{!-%tEXtdate:create2019-03-03T22:09:18+00:00;%tEXtdate:modify2019-03-03T22:09:18+00:00=tEXtSoftwareAdobe ImageReadyqe<IENDB`phpsysinfo-3.4.4/templates/blue/barrest.png000066400000000000000000000016111467431054600210320ustar00rootroot00000000000000PNG  IHDR%PLTE ! &%%%*+*+00/4443حg%DIDATו kCP4R<;g"!ą#RWle?zZj 27= 7IENDB`phpsysinfo-3.4.4/templates/blue/barwarn.png000066400000000000000000000006241467431054600210270ustar00rootroot00000000000000PNG  IHDR%gAMA a cHRMz&u0`:pQ<NPLTERVVU [ \!\ [&b%b%c%b*i+i*j+j0p0q/p4v4u4v3vTRɕbKGDntIME 3qCIDATו %!(!W p8"!č#RwEV-ͺ5y^c{!-%tEXtdate:create2019-03-03T22:09:18+00:00;%tEXtdate:modify2019-03-03T22:09:18+00:00=IENDB`phpsysinfo-3.4.4/templates/blue/bg.png000066400000000000000000000214721467431054600177670ustar00rootroot00000000000000PNG  IHDRHgAMA a cHRMz&u0`:pQ<PLTE^8yOc`_b_6xa]6wL][5v^][4u[Y4t3tZI3s]X\\Y2r1qHVW0pFYX/oX/nCV/n.mU-lTT-kSS+j@~SRQ*hP)gOO<{O(eNNM'dJL:xI%bKH7vG$`G#_H"^EG3r"]FC!]E [EBDD ZZCB0oAX/nW@V?-lT>>+k==S*j<<<R;7{9~:U bKGDehtIME 3q IDATxۗdUOFQQ^qDaV4]KICUeʓgOD|ծ/Sʵx:#(SUclpHssQQ'yn`ps,#)XJ@=.Gk>vSl{zwvԉw="95!-k31}x>(SU-uK=+JŝgS{Q'{gogׅzԝ;ujFzhGt9꿏.Gh;*GvԉGHnc2U#{؟NTT{OsO|~'e6ͼ 5Az?vSlNR?Յ>$:M}Q>0ZꁊϤ峛*>oFgKLLQ'>6Iɉy;Do ?uBLU=?ZjsSvԉN25Sj+_\g/}Q-5K͗Z|y/ͨSU|"%R"_:[M=Fhrү%U.lR{T/Û?7NU}rvS_k.G"y0j*>oG`AURS:%*y(>~2U5j7zP㥏L|]qGFK|ѓ|=&UK#]6>7nꛍ2U5KHDMU3Zl$5@m%}L=ǾvSjåکx]5NTMꮥT7ǟXg'epfjcb*o'ﴣNTkt7@>SlO5TǿyߎΟ~u~vw~Fɪ"O=ɪ钘NTntdꓙ^R}ogvԉjv~ﭳep.*隨uV:K/v*>sl7F:\ 󃨩uv~5fԉå[ ]CK[#uyͿU`L.nl|NU]ᇃr|d0/mޅ uti*.ˏvԉ/^xq%44QSq;DK. .H-ty.7TK8DMUq,T\|'j*>q3ꮪB˗/_~z$].ԳUQS_XgLZ/NT|܎]u#NET%TBŋ,TBAL="lbԟlQ4ON<'reKJ@ ,T[IO?VI~(13R-<_E9ܜo)';NumSD*_6JL̷T)G零]ws>:RRu߰Iś9}[OUo-UJ?·F-UJ<|#JoR[zA[E9ߊշg:oN}k1ETq6ooݜη/ R'jo!JT3R5Qꀚ*OMK뾣ΌOyQٜyt[ڑmj45Oj)5L͕}wRT%;u7é-)H_Du::-UJMRˤu^k&5H-ڣKrM>*ߢ\ۜmt[~ 1jJzߣDu>:-UJ-Q+R;jvF-5ڠ6^(_3R#*Q]m·SZŠPF;:;[»,TܸqF;(Q%` 7XB{'YIދU}ot[{,TMQatXXP!,T BP!,T BP!,T 7- ,T* zMzj7:j?6jG2jO.jW*j_&jg"jojwj  (aũKSJnoM+]:X ut9*nP!,T BPv{1PPO7ӹnvyFSb"PX,T* BE`"PX,T*V,T BP!,T BP!,T BP!,T BP!,T BP!,T BP!,T ٿX(BP!,T BJѾqӛRwK=#uK=+J!uJ%I)uI-H:NIQ'Ro=Rg}R_ԽRWRO#uV:/BM:H}P.iRDj>5Yj.N͐HmSyRLaj.5[j/J-HmR&e娷GK RKp\jZ!5FڢVIMQ뤖RCZj ^uT?T=T;T9T7T5T3T1T/T-T+T)T'T%T#T!TTTTTTTTTT T uT uTuTuTuTuty0qҥ SGJ.I,]:ZX* aBXG['SכS7;SmΩXPX,T* BE`"PX,T* +* aBX* aBX* aBX* aBX* aBX* aBX*_WX aBX* aIPgh_:/BM:H}P.iRDj>5Yj.N͐HmSyRLaj.5[j/J-HmR&eRBAjXjZ.FHmQuRKJ!jZjZ/Bm 5Bm!Am"5Am#@m$5@m%OŊBE`"PX,T* BE`"PXXP!,T BP!,T un:?ٻPBM 7BE`"P3Pgԓz䞺yFAx ꛺5uM޲zjc~gvĻz:zNHRRwi73>/^+~'uN:+uCz&HPS>IR4j5Uj,5OMZfHSsYRIR4j5Uj,5OMZfHSsYRh۠s*V,T* BE`"PX,T* BŊ aBX* aBX* aBX* aBX* aBX* aBX* a"#BX* aBXsR?Yi;ڗKPN)R$ j5Qꀚ*OMKS3Ʃ9R,ij25Sj+K͖KR F%R"Ij"PjZ*G-KQ+ƨ5R[*)jRjZ+CKPHP[HmPHMPH-PI P[ISb"PX,T* BE`"PX,T*V,T BP!,T Bun:7PsBͥ@`"PX,ԣo d⟺#n&fީl95n{]Sl{'zzs_ngng^;N>;.R)?uZꍺGꌺOꋺWꊺ_:#uDJP^ R'j5Mꁚ(u@Mڧ&KSӥ֩Rmj45Oj)5L͕ڥfKRVRMj$LhAjXnKQ+ƨ5R[*)jRjZ+CKڠ6Z66j6*6j6*6jv*vjv*vjv*vjv*vj*j*.O&]:N4utaHܾԱ% RGK BP!,T hxd_z3{fwjm9+* BE`"PX,T* BE`bBP!,T BP!,T BP!,T BP!,T BP!,T BP!,T BPR!,T BP!,9ꬴS^ R'j5Mꁚ(u@Mڧ&KSӥ֩Rmj45Oj)5L͕ڥfKRVRMj$LjZ(5H-ڣKQ˥֨Rc-jNjZ)5DڡVKPV F-6M&mXPX,T* BE`"PX,T* +* aBX* aM:{7t^ w9RB PX,T7q́z2]O]ϑS73h6OA}S潮[=SOwL=9/̎x3RԳRR]RԝRR CuR:-F#uF'E+uE/D:IPgnR/j5Iꂚ&@M:JSR qj65Kj'L͔JRfRQj&HjZ&]z{ TjZ, Q˥֨Rc-jNjZ)5DڡVKPQKP[HmPHMPH-PI P[ISISISJS[JuSJUSJ5SKS[KRKRKR;HR{HuRHURH5R;IR{IQIQIQ;JQ{JuQJUQJ5Q;KQ{KPKPKPHPGHuPHUPH5PIPGI.N']:P0utn_}_XQq aBX*zۋzŌz?u=u;56蜊 BE`"PX,T* BE`"PbBX* aBX* aBX* aBX* aBX* aBX* aBXEpE* aBXuVR/j5Iꂚ&@M:JSR qj65Kj'L͔JRfRQj&HjZ&H-JQRk 1jJjZ'DJPfR+R#R&R6R FRVRTX,T* BE`"PX,T*  BP!,T BPC un:/ԄPqs){!X,T* 8x@@=Hwj4tN[^-۞;ޜzfG[[YWS.ONKnG!uJ:)uGz:zHQ~R7yj 5Eꃚ$uAMz&JPSRtuj85Gj%5M͓ZfJ SsvR|Uj(DjZ$5I-.G=ZjZ*G-ƨRk 1jJjZ'DJPfåF-6M&mͤک ʩ-MmzͥjZJ=:]*} ݤڨʨ=]}zݥjZJ#:C*c SI.M(]:R:/utI`娸BP!,T B=@=bF@=柺L瞺mtNŊBE`"PX,T* BE`"PXXP!,T BP!,T BP!,T BP!,T BP!,T BP!,T BP!,Td"buĢT BP!,T uN:+mtGyj 5Eꃚ$uAMz&JPSRtuj85Gj%5M͓ZfJ SsvR|Uj(DjZ$5I-ZJ RKRsr5jFjZ%5EZVJ QkvR3zjj j jj#j+~*V,T* BE`"PX,T* BŊ aBX* aBXswM:7jtNw c%tEXtdate:create2019-03-03T22:09:18+00:00;%tEXtdate:modify2019-03-03T22:09:18+00:00=tEXtSoftwareAdobe ImageReadyqe<IENDB`phpsysinfo-3.4.4/templates/blue/title.png000066400000000000000000000010401467431054600205050ustar00rootroot00000000000000PNG  IHDRӠ$gAMA a cHRMz&u0`:pQ<PLTERSTSUVVXXX[ [Z["^!^!^"^$a%a$`%a'e&d'd&d)g)h)h*h+j+k+k,j,k.n.n0q0q1q2s2t3t2t4v5w4v4w5x6x6y x&bKGD37|^tIME 3q\IDAT׵ B@@oiFd-JD)iY!R:z' \R-ϹeUP7TZ/g㿬n6,;U %tEXtdate:create2019-03-03T22:09:18+00:00;%tEXtdate:modify2019-03-03T22:09:18+00:00=tEXtSoftwareAdobe ImageReadyqe<IENDB`phpsysinfo-3.4.4/templates/clean.css000066400000000000000000000053631467431054600175370ustar00rootroot00000000000000/* $Id: clean.css 518 2011-10-28 08:09:07Z namiltd $ */ a { text-decoration: none; color: #c03000; } a:hover { text-decoration: underline; } * { margin: 0; padding: 0; } wbr { display: inline-block; } html { font-size: 100%; height: 100%; color: #333; } body { font-family: Helvetica, Arial, "Lucida Grande", Verdana, sans-serif; font-size: .75em; position: relative; width: 940px; _width: 945px; /* ie6 */ min-height: 100%; overflow: auto; margin: 0 auto; padding: 20px 20px 0 20px; } p { padding: 4px 10px 2px 10px; line-height: 1.6; text-align: left; vertical-align: top; } h1 { margin: 0 10px; _margin: 0 15px 0 10px; /* ie6 */ padding: 10px 10px; text-align: center; font-family: Helvetica, Arial, "Lucida Grande", Verdana, sans-serif; font-size: 130%; line-height: 1.5em; color: #224970; } h2 { font-family: Helvetica, Arial, "Lucida Grande", Verdana, sans-serif; font-size: 120%; padding: 3px 10px; text-transform: uppercase; line-height: 1.5em; color: #224970; text-align: left; } th, td, h3 { padding: 4px 10px 2px 10px; text-align: left; vertical-align: top; font-size: 100%; } table { width: 100%; border-top: solid 2px #dadada; border-bottom: solid 2px #dadada; background-color: #f3f8fc; } table th { color: #330; } select { background-color: #fefefe; } #select { text-align: right; padding: 0 10px 0 10px; } #select select { width: 100px; font-family: Helvetica, Arial, "Lucida Grande", Verdana, sans-serif; } .fullsize, .halfsize { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ color: #000; } .fullsize { width: 920px; } .halfsize { width: 455px; } #filesystemTable thead tr th { cursor: pointer; } #footer { clear: both; color: #000; margin: 12px; padding: 13px 25px; line-height: 18px; font-size: 80%; text-align: center; } .plugin { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; } .bar { background-color: #2f659b; } .barwarn { background-color: #9b2f65; } .barrest { background: #2f9b9b; } .right { text-align: right; padding-right: 20px; } .treeTable { border: none; } .treeimg { display: table-cell; *float: left; /* ie6 ie7 */ vertical-align: top; } .treespan { display: table-cell; *float: left; /* ie6 ie7 */ } .treespanbold { font-weight: bold; display: table-cell; *float: left; /* ie6 ie7 */ } .tree tr td { cursor: auto; height: 100%; } .treediv { display: table; height: 100%; } .tablemain { width: 100%; height: 100%; } phpsysinfo-3.4.4/templates/cleansyn.css000066400000000000000000000053751467431054600202740ustar00rootroot00000000000000/* $Id: cleansyn.css 518 2015-03-21 10:31:07Z namiltd $ */ a { text-decoration: none; color: #363; } a:hover { text-decoration: underline; } * { margin: 0; padding: 0; } wbr { display: inline-block; } html { font-size: 100%; height: 100%; color: #ddd; } body { font-family: Helvetica, Arial, "Lucida Grande", Verdana, sans-serif; font-size: .75em; position: relative; width: 940px; _width: 945px; /* ie6 */ min-height: 100%; overflow: auto; margin: 0 auto; padding: 20px 20px 0 20px; background-color: #111; } p { padding: 4px 10px 2px 10px; line-height: 1.6; text-align: left; vertical-align: top; } h1 { margin: 0 10px; _margin: 0 15px 0 10px; /* ie6 */ padding: 10px 10px; text-align: center; font-family: Helvetica, Arial, "Lucida Grande", Verdana, sans-serif; font-size: 130%; line-height: 1.5em; color: #fff; } h2 { font-family: Helvetica, Arial, "Lucida Grande", Verdana, sans-serif; font-size: 120%; padding: 3px 10px; text-transform: uppercase; line-height: 1.5em; color: #fff; text-align: left; } th, td, h3 { padding: 4px 10px 2px 10px; text-align: left; vertical-align: top; font-size: 100%; } table { width: 100%; border-top: solid 2px #dadada; border-bottom: solid 2px #dadada; background-color: #333; } table th { color: #3a3; } select { background-color: #fefefe; } #select { text-align: right; padding: 0 10px 0 10px; } #select select { width: 100px; font-family: Helvetica, Arial, "Lucida Grande", Verdana, sans-serif; } .fullsize, .halfsize { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ color: #ccc; } .fullsize { width: 920px; } .halfsize { width: 455px; } #filesystemTable thead tr th { cursor: pointer; } #footer { clear: both; color: #bbb; margin: 12px; padding: 13px 25px; line-height: 18px; font-size: 80%; text-align: center; } .plugin { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; } .bar { background-color: #0f0; } .barwarn { background-color: #944; } .barrest { background: #80ff00; } .right { text-align: right; padding-right: 20px; } .treeTable { border: none; } .treeimg { display: table-cell; *float: left; /* ie6 ie7 */ vertical-align: top; } .treespan { display: table-cell; *float: left; /* ie6 ie7 */ } .treespanbold { font-weight: bold; display: table-cell; *float: left; /* ie6 ie7 */ } .tree tr td { cursor: auto; height: 100%; } .treediv { display: table; height: 100%; } .tablemain { width: 100%; height: 100%; } phpsysinfo-3.4.4/templates/cream.css000066400000000000000000000050651467431054600175430ustar00rootroot00000000000000/* $Id */ a { text-decoration: none; color: #c03000; } a:hover { text-decoration: underline; } * { margin: 0; padding: 0; } wbr { display: inline-block; } html { background: url("cream/bg.gif") repeat-x #f8f2e3; color: #444b54; font-size: 100%; height: 100%; } body { font-family: Helvetica, Arial, 'Liberation Sans', FreeSans, sans-serif; font-size: .75em; position: relative; margin: 0 auto; min-height: 100%; padding: 20px 20px 0 20px; overflow: auto; width: 940px; _width: 945px; /* ie6 */ } p { padding: 4px 10px 2px 10px; line-height: 1.6; text-align: left; vertical-align: top; } h1 { color: #394047; font-size: 150%; font-weight: normal; line-height: 1.5em; margin: 0 10px; _margin: 0 15px 0 10px; /* ie6 */ padding: 10px 10px; text-align: center; } h2 { background-color: #444b54; color: #fff; font-size: 130%; font-weight: bold; line-height: 1.5em; padding: 3px 10px; text-transform: uppercase; } th, td, h3 { font-size: 100%; padding: 4px 10px 2px 10px; text-align: left; vertical-align: top; } table { width: 100%; background-color: #fff; } select { background-color: #fefefe; } #select { text-align: right; padding: 0 10px 0 10px; } #select select { width: 100px; } .fullsize, .halfsize { background-color: #fff; float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; } .fullsize { width: 918px; } .halfsize { width: 453px; } #filesystemTable thead tr th { cursor: pointer; } #footer { clear: both; color: #5c5c5c; margin: 12px; padding: 13px 25px; line-height: 18px; font-size: 80%; text-align: center; } .plugin { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; background: #fff; } .even { background-color: #fbfbf9; } .bar { background-color: #58626d; } .barwarn { background-color: #9b2f65; } .barrest { background-color: #586d6d; } .right { padding-right: 20px; text-align: right; } .treeimg { display: table-cell; *float: left; /* ie6 ie7 */ vertical-align: top; } .treespan { display: table-cell; *float: left; /* ie6 ie7 */ } .treespanbold { font-weight: bold; display: table-cell; *float: left; /* ie6 ie7 */ } .tree tr td { cursor: auto; height: 100%; } .treediv { display: table; height: 100%; } .tablemain { width: 100%; height: 100%; } phpsysinfo-3.4.4/templates/cream/000077500000000000000000000000001467431054600170235ustar00rootroot00000000000000phpsysinfo-3.4.4/templates/cream/bg.gif000066400000000000000000000003331467431054600201010ustar00rootroot00000000000000GIF87a EM@GO?FN9@H6=D0./6=E8@G7?FJR[IQZKS\MU^LT]IPYCJSBIRDLTGOWFNV, `#h6lK,2c |S0X)Ɖr\F(TBZv%x`L.:h|N'<^!;phpsysinfo-3.4.4/templates/css.php000066400000000000000000000037571467431054600172510ustar00rootroot00000000000000 * @copyright 2021 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version Release: 1.0 * @link http://phpsysinfo.sourceforge.net */ $file = isset($_GET['name']) ? basename(htmlspecialchars($_GET['name'])) : null; $increase = isset($_GET['increase']) ? (($_GET['increase']>0)? $_GET['increase'] : 0) : 0; if ($file != null) { $css = $file.'.css'; header('content-type: text/css'); if (file_exists($css) && is_readable($css)) { $filecontent = file_get_contents($css); if ($increase == 0) { echo $filecontent; } else { $lines = preg_split("/\r?\n/", $filecontent, -1, PREG_SPLIT_NO_EMPTY); $block = ''; foreach ($lines as $line) { if (preg_match('/^(.+)\{/', $line, $tmpbuf)) { $block = strtolower(trim($tmpbuf[1])); echo $line."\n"; } elseif (($block === 'body') || ($block === '.fullsize')) { if (preg_match('/^(\s*_?width\s*:\s*)(\d+)(px.*)/', $line, $widthbuf)) { echo $widthbuf[1].($widthbuf[2]+$increase).$widthbuf[3]."\n"; } elseif (preg_match('/^(\s*background\s*:.+)(url)/', $line, $widthbuf)) { echo $widthbuf[1].";\n"; } else echo $line."\n"; } elseif ($block === '.halfsize') { if (preg_match('/^(\s*_?width\s*:\s*)(\d+)(px.*)/', $line, $widthbuf)) { echo $widthbuf[1].($widthbuf[2]+$increase/2).$widthbuf[3]."\n"; } else echo $line."\n"; } else { echo $line."\n"; } } } } } phpsysinfo-3.4.4/templates/dark_bootstrap.css000066400000000000000000000064661467431054600215000ustar00rootroot00000000000000body { font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; font-size: 13px; padding-top: 80px; color: #c8c8c8; background-color: #272b30; } wbr { display: inline-block; } .table td.rightCell, .table th.rightCell { text-align: right; } .percent { text-align: center; } .card { background-color: #2e3338; border: none; } .navbar { background-color: #3a3f44; border-color: #2b2e32; } .navbar-brand, .navbar-brand:hover { color: #fff; margin-right: 0; } .treegrid-span { display: table-cell; } .treegrid-spanbold { font-weight: bold; display: table-cell; } .treegrid-indent { width: 16px; height: 16px; display: table-cell; } .treegrid-expander { width: 0px; height: 16px; display: table-cell; cursor: pointer; } .normalicon { width: 16px; height: 16px; position: relative; top: 1px; display: table-cell; font-style: normal; font-weight: normal; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .normalicon-right:before { content: "\25ba"; } .normalicon-down:before { content: "\25bc"; } table.sortable thead th { cursor: pointer; position: relative; top: 0; left: 0; } table.sortable thead th:hover { background-color: #49515a; } .sorttable_nosort { cursor: auto!important; } .table-hover > tbody > tr:hover { color: #c8c8c8; background-color: #49515a; } .table-hover > tfoot > tr:hover { background-color: #49515a; } table.borderless td, table.borderless th, table.noborderattop tr:first-child td, table.noborderattop tr:first-child th { border: none!important; } .table { color: #c8c8c8; background-color: #2e3338!important; margin: 0; border: 0; } .logo { cursor: pointer; width: 32px; } .select { color: #c8c8c8; } select { background-color: #fefefe; } .template { cursor: pointer; color: #333; } .language { cursor: pointer; color: #333; } .card-header { background-color: #3e444c!important; border-color: #3e444c!important; color: #fff!important; } .progress { margin-bottom: 0; background-color: #1c1e22; -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); } .progress-bar-success { background-color: #62c462; } .progress-bar-info { background-color: #5bc0de; } .progress-bar-warning { background-color: #f89406; } .progress-bar-danger { background-color: #ee5f5b; } .modal-content { background-color: #2e3338; } .list-group { display: block; } .list-group-item { background-color: #2e3338; } .reload { background-image: url("../gfx/reload.gif"); float: right; cursor: pointer; width: 16px; height: 16px; } .container { padding:0; } .table thead th { border-top: none; } a, a:visited { color: #fff; } a:hover { text-decoration: underline; color: #fff; } .psihref, .psihref:visited { color: #fff; } .psihref:hover { text-decoration: underline; color: #fff; } .col-lg-6, .col-lg-12 { padding-bottom: 20px; } .badge { font-size: 12px; border-radius: 10px; padding: 3px 7px; float: right; } .table-nopadding > tbody > tr > td, .table-nopadding > tbody > tr > th { padding: 0; } phpsysinfo-3.4.4/templates/green_bootstrap.css000066400000000000000000000064121467431054600216460ustar00rootroot00000000000000body { font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; font-size: 13px; padding-top: 80px; color: #333; background-color: #fff; } wbr { display: inline-block; } .table td.rightCell, .table th.rightCell { text-align: right; } .percent { text-align: center; } .card { border-color: #f2f2f2; } .navbar { background-color: #3bc873; border-color: #33b667; } .navbar-brand, .navbar-brand:hover { color: #fff; margin-right: 0; } .treegrid-span { display: table-cell; } .treegrid-spanbold { font-weight: bold; display: table-cell; } .treegrid-indent { width: 16px; height: 16px; display: table-cell; } .treegrid-expander { width: 0px; height: 16px; display: table-cell; cursor: pointer; } .normalicon { width: 16px; height: 16px; position: relative; top: 1px; display: table-cell; font-style: normal; font-weight: normal; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .normalicon-right:before { content: "\25ba"; } .normalicon-down:before { content: "\25bc"; } table.sortable thead th { cursor: pointer; position: relative; top: 0; left: 0; } table.sortable thead th:hover { background-color: #ececec; } .sorttable_nosort { cursor: auto!important; } .table-hover > tbody > tr:hover { color: #333; background-color: #ececec; } .table-hover > tfoot > tr:hover { background-color: #ececec; } table.borderless td, table.borderless th, table.noborderattop tr:first-child td, table.noborderattop tr:first-child th { border: none!important; } .table { color: #333; background-color: #fff!important; margin: 0; border: 0; } .logo { cursor: pointer; width: 32px; } .select { color: #333; } select { background-color: #fefefe; } .template { cursor: pointer; color: #333; } .language { cursor: pointer; color: #333; } .card-header { background-color: #33b770!important; border-color: #33b770!important; color: #fff!important; } .progress { margin-bottom: 0; background-color: #f5f5f5; -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); } .progress-bar-success { background-color: #5bc0de; } .progress-bar-info { background-color: #5cb85c; } .progress-bar-warning { background-color: #f0ad4e; } .progress-bar-danger { background-color: #d9534f; } .modal-content { background-color: #fff; } .list-group { display: block; } .list-group-item { background-color: #fff; } .reload { background-image: url("../gfx/reload.gif"); float: right; cursor: pointer; width: 16px; height: 16px; } .container { padding:0; } .table thead th { border-top: none; } a, a:visited { color: #000; } a:hover { text-decoration: underline; color: #000; } .psihref, .psihref:visited { color: #fff; } .psihref:hover { text-decoration: underline; color: #fff; } .col-lg-6, .col-lg-12 { padding-bottom: 20px; } .badge{ font-size: 12px; border-radius: 10px; padding: 3px 7px; float: right; } .table-nopadding > tbody > tr > td, .table-nopadding > tbody > tr > th { padding: 0; } phpsysinfo-3.4.4/templates/html/000077500000000000000000000000001467431054600167005ustar00rootroot00000000000000phpsysinfo-3.4.4/templates/html/error_config.html000066400000000000000000000022621467431054600222460ustar00rootroot00000000000000"; ?> phpSysInfo - Error

    phpSysInfo - Error

    phpsysinfo.ini does not exist or is not readable by the webserver in the phpsysinfo directory or is misunderstood.

    Generated by phpSysInfo - 

    phpsysinfo-3.4.4/templates/html/index_all.html000066400000000000000000000041421467431054600215260ustar00rootroot00000000000000"; ?> phpSysInfo - Redirection

    REDIRECTING ...

    Loading redirection target

    In approx. 2 seconds the redirection target page should load.
    If it doesn't please select the link above.

    Generated by phpSysInfo - 

    phpsysinfo-3.4.4/templates/html/index_bootstrap.html000066400000000000000000000607611467431054600230040ustar00rootroot00000000000000 phpSysInfo <?php echo PSI_VERSION_STRING ?>
    phpsysinfo-3.4.4/templates/html/index_dynamic.html000066400000000000000000000304621467431054600224060ustar00rootroot00000000000000 phpSysInfo <?php echo PSI_VERSION_STRING ?>

    Loading... please wait!

    phpsysinfo-3.4.4/templates/idash.css000066400000000000000000000055121467431054600175410ustar00rootroot00000000000000/* NextGen Remixed by iDash.pl */ a { text-decoration: none; color: #5a7000; } a:hover { text-decoration: underline; color: #5a7000; } * { margin: 0; padding: 0; } wbr { display: inline-block; } html { height: 100%; background: url("idash/bg.png") repeat-x scroll center top #111; } body { position: relative; width: 940px; _width: 945px; /* ie6 */ min-height: 100%; overflow: auto; margin: 0 auto; padding: 20px 20px 0 20px; font: 0.75em tahoma, arial, sans-serif; color: #ccc; } div#output { margin: -20px -10px 0 -10px; padding: 95px 0 0 0; } p { padding: 4px 10px 2px 10px; line-height: 1.6; text-align: left; vertical-align: top; } h1 { position: absolute; top: 35px; left: 10px; margin: 0; padding: 0px 10px; font-size: 2em; font-weight: normal; color: #fff; } h2 { padding: 5px 10px; font-family: "trebuchet ms"; font-size: 1.2em; font-weight: bold; letter-spacing: 0.0em; text-transform: uppercase; color: #fff; /* #7d9100; */ background: #354242; } th, td, h3 { padding: 4px 10px 2px 10px; text-align: left; vertical-align: top; } h3 { font-size: 120%; } table { width: 100%; } select { background-color: #fefefe; } #select { position: absolute; top: 75px; color: #fff; right: 30px; width: 370px; text-align: right; padding: 0 10px 0 10px; } #select select { width: 100px; } .fullsize, .halfsize { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; border: 1px solid #354242; } .fullsize { width: 916px; } .halfsize { width: 451px; } #filesystemTable thead tr th { cursor: pointer; } #footer { color: #777; clear: both; margin: 12px; padding: 13px 25px; line-height: 18px; text-align: right; } .lang_047 { color:444 } .plugin { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; border: 1px solid #354242; } .even { background: #333; } .bar { background: #34da64 url("idash/html.gif"); } .barwarn { background: #e69575 url("idash/htmlwarn.gif"); } .barrest { background: #57da34 url("idash/htmlrest.gif"); } .right { text-align: right; padding-right: 20px; } .dataTables_wrapper{ margin: 0 0 0 0 !important; border: 0px !important; } .treeimg { display: table-cell; *float: left; /* ie6 ie7 */ vertical-align: top; } .treespan { display: table-cell; *float: left; /* ie6 ie7 */ } .treespanbold { font-weight: bold; display: table-cell; *float: left; /* ie6 ie7 */ } .tree tr td { cursor: auto; height: 100%; } .treediv { display: table; height: 100%; } .tablemain { width: 100%; height: 100%; } phpsysinfo-3.4.4/templates/idash/000077500000000000000000000000001467431054600170245ustar00rootroot00000000000000phpsysinfo-3.4.4/templates/idash/bg.png000066400000000000000000000011241467431054600201200ustar00rootroot00000000000000PNG  IHDRdagAMA a cHRMz&u0`:pQ<BPLTE%..&//&00'11(22)33*44+55+66,77-88.99,88/::/;;0<<1==2>>3??3@@3Ya|pbKGD pHYs+tIME 3qIDATE D7DMu/Fy8t!}IafX`ݴ Yp `e瀤uY$E 2Th*PtUhO5p% $4x7jTSnE99O0FM>mX9x3|C Ǟg`)ktEXtCreation Time11/10/10P{%tEXtdate:create2019-03-03T22:09:18+00:00;%tEXtdate:modify2019-03-03T22:09:18+00:00=tEXtSoftwareMacromedia Fireworks 8hxIENDB`phpsysinfo-3.4.4/templates/idash/html.gif000066400000000000000000000001701467431054600204550ustar00rootroot00000000000000GIF89a&W4d!,%P1$u֫`z])jl483P;phpsysinfo-3.4.4/templates/idash/htmlrest.gif000066400000000000000000000001701467431054600213530ustar00rootroot00000000000000GIF89aH%W4!,%P1$u֫`z])jl483P;phpsysinfo-3.4.4/templates/idash/htmlwarn.gif000066400000000000000000000001701467431054600213450ustar00rootroot00000000000000GIF89a_u!,%P1$u֫`z])jl483P;phpsysinfo-3.4.4/templates/jstyle_blue.css000066400000000000000000000051711467431054600207730ustar00rootroot00000000000000/* $Id: jstyle_blue.css 518 2011-10-28 08:09:07Z namiltd $ */ a { text-decoration: none; color: #c03000; } a:hover { text-decoration: underline; } * { margin: 0; padding: 0; } wbr { display: inline-block; } html { font-size: 100%; height: 100%; background-color: #f3f1e9; color: #666; } body { font-family: Verdana, "Bitstream Vera Sans"; font-size: .75em; position: relative; width: 940px; _width: 945px; /* ie6 */ min-height: 100%; overflow: auto; margin: 0 auto; padding: 20px 20px 0 20px; } p { padding: 4px 10px 2px 10px; line-height: 1.6; text-align: left; vertical-align: top; } h1 { margin: 0 10px; _margin: 0 15px 0 10px; /* ie6 */ padding: 10px 10px; text-align: center; color: #fff; font-family: Georgia, serif; font-weight: normal; font-size: 150%; line-height: 1.5em; color: #326ea1; } h2 { font-family: Georgia, serif; font-weight: bold; font-size: 130%; padding: 3px 10px; text-transform: uppercase; line-height: 1.5em; color: #326ea1; border-bottom: 2px solid #326ea1; } th, td, h3 { padding: 4px 10px 2px 10px; text-align: left; vertical-align: top; font-size: 100%; } table { width: 100%; } select { background-color: #fefefe; } #select { text-align: right; padding: 0 10px 0 10px; } #select select { width: 100px; } .fullsize, .halfsize { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; } .fullsize { width: 918px; } .halfsize { width: 453px; } #filesystemTable thead tr .header { cursor: pointer; } #filesystemTable thead tr th { cursor: pointer; } #footer { clear: both; color: #5c5c5c; margin: 12px; padding: 13px 25px; line-height: 18px; font-size: 80%; text-align: center; } .plugin { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; } .even { background: #ebe8da; } .bar { background-color: #326edf; } .barwarn { background-color: #df326e; } .barrest { background-color: #32c5df; } .right { text-align: right; padding-right: 20px; } .treeimg { display: table-cell; *float: left; /* ie6 ie7 */ vertical-align: top; } .treespan { display: table-cell; *float: left; /* ie6 ie7 */ } .treespanbold { font-weight: bold; display: table-cell; *float: left; /* ie6 ie7 */ } .tree tr td { cursor: auto; height: 100%; } .treediv { display: table; height: 100%; } .tablemain { width: 100%; height: 100%; } phpsysinfo-3.4.4/templates/jstyle_green.css000066400000000000000000000050141467431054600211400ustar00rootroot00000000000000/* $Id: jstyle_green.css 518 2011-10-28 08:09:07Z namiltd $ */ a { color: #c03000; text-decoration: none; } a:hover { text-decoration: underline; } * { margin: 0; padding: 0; } wbr { display: inline-block; } html { background-color: #f3f1e9; color: #666; font-size: 100%; height: 100%; } body { font-family: Verdana, "Bitstream Vera Sans"; font-size: .75em; margin: 0 auto; min-height: 100%; overflow: auto; padding: 20px 20px 0; position: relative; width: 940px; _width: 945px; /* ie6 */ } p { line-height: 1.6; padding: 4px 10px 2px; text-align: left; vertical-align: top; } h1 { color: #693; font-family: Georgia, serif; font-size: 150%; font-weight: 400; line-height: 1.5em; margin: 0 10px; _margin: 0 15px 0 10px; /* ie6 */ padding: 10px; text-align: center; } h2 { border-bottom: 2px solid #693; color: #693; font-family: Georgia, serif; font-size: 130%; font-weight: 700; line-height: 1.5em; padding: 3px 10px; text-transform: uppercase; } th, td, h3 { font-size: 100%; padding: 4px 10px 2px; text-align: left; vertical-align: top; } table { width: 100%; } select { background-color: #fefefe; } #select { text-align: right; padding: 0 10px 0 10px; } #select select { width: 100px; } .fullsize, .halfsize { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; } .fullsize { width: 918px; } .halfsize { width: 453px; } #filesystemTable thead tr th { cursor: pointer; } #footer { clear: both; color: #5C5C5C; font-size: 80%; line-height: 18px; margin: 12px; padding: 13px 25px; text-align: center; } .plugin { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; } .even { background: #ebe8da; } .bar { background-color: #c1dc70; } .barwarn { background-color: #dc8b70; } .barrest { background-color: #8bdc70; } .right { padding-right: 20px; text-align: right; } .treeimg { display: table-cell; *float: left; /* ie6 ie7 */ vertical-align: top; } .treespan { display: table-cell; *float: left; /* ie6 ie7 */ } .treespanbold { font-weight: bold; display: table-cell; *float: left; /* ie6 ie7 */ } .tree tr td { cursor: auto; height: 100%; } .treediv { display: table; height: 100%; } .tablemain { width: 100%; height: 100%; } phpsysinfo-3.4.4/templates/lingruby.css000066400000000000000000000045251467431054600203070ustar00rootroot00000000000000/* $Id: two.css 518 2011-10-28 08:09:07Z namiltd $ */ a { text-decoration: none; color: #cc0000; } a:hover { text-decoration: underline; } * { margin: 0; padding: 0; } wbr { display: inline-block; } html { font-size: 100%; height: 100%; color: #2b2828; background: url("lingruby/background.png") fixed center; } body { font-family: "Comic Sans MS", sans-serif; font-size: .85em; position: relative; width: 940px; _width: 945px; /* ie6 */ min-height: 100%; overflow: auto; margin: 0 auto; padding: 20px 20px 0 20px; } h1 { margin: 0 10px; _margin: 0 15px 0 10px; /* ie6 */ padding: 10px 10px; text-align: center; color: #fff; font-weight: normal; font-size: 170%; line-height: 1.5em; } h2 { font-weight: bold; font-size: 150%; line-height: 1.5em; color: #fff; border-bottom: 2px solid #fff; } th, td, h3 { padding: 4px 10px 2px 10px; text-align: left; vertical-align: top; font-size: 100%; } table { width: 100%; } select { background-color: #fefefe; } #select { color: #fff; text-align: right; padding: 0 10px 0 10px; margin-bottom: 10px; } #select select { width: 100px; } .fullsize, .halfsize { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; } .fullsize { width: 918px; } .halfsize { width: 453px; } #filesystemTable thead tr th { cursor: pointer; } #footer { clear: both; color: #000; margin: 12px; padding: 13px 25px; line-height: 18px; font-size: 90%; text-align: center; } .plugin { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; } .bar { background-color: #fff; } .barwarn { background-color: #bbb; } .barrest { background-color: #eaeaea; } .right { text-align: right; padding-right: 20px; } .treeimg { display: table-cell; *float: left; /* ie6 ie7 */ vertical-align: top; } .treespan { display: table-cell; *float: left; /* ie6 ie7 */ } .treespanbold { font-weight: normal; display: table-cell; *float: left; /* ie6 ie7 */ } .tree tr td { cursor: auto; height: 100%; } .treediv { display: table; height: 100%; } .tablemain { width: 100%; height: 100%; } phpsysinfo-3.4.4/templates/lingruby/000077500000000000000000000000001467431054600175675ustar00rootroot00000000000000phpsysinfo-3.4.4/templates/lingruby/background.png000066400000000000000000000552441467431054600224260ustar00rootroot00000000000000PNG  IHDRksgAMAaLA cHRMnti0m_s<R&bKGDYIDATx}8*oU|vӏ=KenRR[5s':R)X J} ǻE?lt?(_އ^,@(@HC[3#(x]"mW "AAU1&gA l\n)z]"6yпK}[Pg@r*A.\dceo@H/vq]z$\+[+(g/%tU!ֻ]0t#(g"("m QYHnf9&kna4,\seŪKAkZ;b\H;)v8sqUd2i,s W(SuB;u+Tv*5!(b_o:o!W9DKקjC`. 5":JJSwWW}0tSDއj~"a <$8%d"+ҏD¼Ь]_ xn 3]E=4`|z\ %pJEavI <|u=ᲴRDĀhb0r؈r3azMQ&kR_F4@֣mX ESgqg,OPxgAdqvu;2 Bu PɵHE2И"XlQCDX i*WPcmgQ E~4F3^8]e\E$ pxxh(!:H :zit7*ٜbL i@GW ,H)H`o5Էv)>>)0ʅAUT h5fV^%|]>j!0W-\47APA,xsR ;{*VH5f49!ԯلIA*!<caR|gx싃u@D;IW+"YYng"HY(F"&\dy v"S]K37{ء⑎30yʃ-/iC<+Ɉz>cq[h r 9E{$]oq=TwcTu'E;.@6 WwbYr\ݾ  L@O^)՛& Bņvҽ*iA S%0]PKbae\e(`!:UTDEVnDd/y{Xq>𳲆V9p6.5KKuLՍQEdx3aDÜn認m aԅe K]q].Z8۴)ηU@herYCe^;4&BD򢑅5e55ET`f(@N[+쩌(1Ήt iȼv4>r_owf82U@&q#p` u)RVsBHYK0{[Y '\ D폍 'lAuMEJS\lL3PG\$ӭ>uk+) ^sax}H,LCZ͊4QSǤ::Vy}*TD9iq(6(E1Csd֩^Y#A}ZD5CbK鷰aUU!HT,eZOmک^\-mh o+_9ECQx b{^̸+ҁvψ7/Ff$Q(Ԝd*|m/  :q5#bӛuub 9ZA1pHkTRfBdJ #{Y,HŲQL5ÆTݹ/,L1l8OAw:gy]qVpt갢%,>$[O@YG"2e[[F0##Zsn`bɉHDMLH}W,:滑3 zX BY~MZŊgK{ܪ =@)?D")j}mx ^ו 0&Ez֯A dҽ]2rܽ MU"mBbS:Vt:mĥ<:Mf)l:Sc0GFGZBE~$0f_> La6dtV\ȯ3_ 6(50H:YQcWpWN_pp 4(0U)\pJQ9*%Eϐ&M߁+}EbUut_xF _yt UDu-ӾSsPR.|!}IHiؚ2cm5tC.f6ذo&yTZ`" }@yjlj?:GKo%Z~}-H3U1P>iHMJ^tPw>5K=\®EDa~k]ӄ q "0 pNH!HiPk4n@{/ZD)g9T,Y `U %W斀41΃=@te =icBF+ Dn" #F1uƟM, V0jX=U9 ,\HY@!ZSj_T lBղZB嗡4֌OK "Q/%@b SY ARMY]۷o*"1c@ȗ^0X;QHY9;'(&2tŸGw߼̋;!V;]+d 4P cDk~df4XhGuQ2uT%!Gʌ-LW!6b#DVDgUC`SpQ 3ڸ:WA9VjdXI< x%`]`'g%V"DC#0ޡY} F 7wp2z-*XqJ}}t%ɚiCDІ~Mg.b]R;H]`.NZQ2 tAZ-shDĨ =5k}RYJeH\{;wB!%{͔M wh B?mzF!>i;tu"WN}PJ\];qG)\ثƉI}n)5-Ŕu>Z4 le17Kv:, E "b/ ձi>P)i2,tnCSӳ⦍PYNzܰɟS#Ki"HgtXq$`PeDżd]q(.jumAi$"fOfhlCYl~_ss8L4^7m}dGS+Mc]+T JLYTDXhc } VJ;_k*#iY*$y22\PفC"(O"@. D`ͦag/8BM{+_oTpny0MowTj eI\5݌$'fV'aGʟLHXHxlٽwJՔs)1F5P-->ECo B?@TM NUzrވH\b:VsvMz[BmwW"٘u 頔 $ tT`oȇ=~qN5dB _^q*C$f9Y{5*1WiyNW. (|U49.LvIse{5-5Hw {1Kx)?(L)tj8CҖJHNMuS=G4(ƶuLlV K|=$ t끸kC<"-y0d`q v݋|"-r̙TΘ%}mq%nO h=G IrQUoN?Eσ;$K2G63_T:]CiB\2{&PG]Qc/0ju4ItkNmS9R!igX֤isݠP[aA1^KсkE){1Pa@NŜÓh!@kDa.R0kS-|# ߾_/RE]R fsGbUS)x  &5hHꙙ8_%;B՗c{ޫ_G+X1E4m .ʖy0~d14 QXTko}1 C(oMGdҭ9k[U惈ykUXr S@Z`.|g"21$&CFr[%=_uhjPf%'LT:ڶˁӑY g( Ze=L"QE/o[ZJ*8[L Kt_gTeZy;ՁEx๗*5GAϸ O5=Ed1Q EMTUHNV?5iʣ?WIXeB8 ?}JsR;b&U\ :gN,DZcl @(ݮxw[sp?պ1`@]^NA\K?Lt(Nk(`]~A 2]eynlpЭn 6f燛&ubn-IqWpȤ[|$v uC H:v)>_*I>J\&fĦ^*V yPzfۥRDT0`2< }P2g Ww%r*pB5CjSg*3 09QzY& U5vaU uw3n|JTF !Ճ PR Q*͇ 4yO~( `N駄E$hYu&4mTάU"9h2# <ƫ+?hS`?jtKc%Djma" +H?LIr6E%9öcaC]2F,]3?L+X#cy/ƃ6 JsߺS.seOҲS$uHdBG%rCÚ1mTrdT Tdsn]ı_Ƹ -)(9n}%ȥoѳ[6FB$ o65RxwsVOhiM8z}Qu/zW07>&UVweLJ8o cJY_d8z qF1P"? :UR";+}\H^ n3Lgן&,y9s-M!ČyE]_e+q22Mŧ&"eP\}0mP?#D1'y_B Uߦ֍EiWM0zx>\a1;,8їžضVwh,#b7I&E ˪:,ڥq:q#7t̀^e׿1K=B'd46$ wlC=aXг64|fPCO'baO؋GŅ9>~y-<ZYyxw>>tB 0y)ٯj2_&y+崼7Qy aenr:a)#h+D[`9`%Ď27l:2 s܅]c=Ι?qc@os$0G wnm૫I1Wvrjեv2G^l)A\Zl˿~û0h꙼jy*V$D` ,QQ]N2r9j\CƄn+ 3 B]cN:_$Ab/,(@$iǙ,={lo,5u߭EO0&?'@[V6V}B5FJ`] .:UT)0*,$J!T;c.")1jRTVun`>_a9_:%pk,e82K2!̟pDpO+\Jq-+fR?":6Ǣm:J>j翚Ӑ_<5Gρe?Jh]nS[ҽRŽ#]' TQ qi+Rq SDMߗ,TMq'ī{h{>t0sec|O)97R `I$JKv1qn%(޳y 4_s}Dʹw's U=d8ueAug'W-c-g3y{A Inl`O=8bv h!zs.1_݅6UR<-IDj*Br|8fμǹa a`2-$_ZW! %v"BKLYw4\1C˜?tʧD@V juҰͦ^qu5DeȣҡG;j{_k6{T9wt/?衿[* CGqzeFs,ؾ~x]M!*ˢi5L] و*_j4906J\&OcܿWtVk>\Ղ䌥lY'W@cdaEµUMN-/h4#Q?x|/ ="flS:@?;yQlU + xk-73˂d %h^G0YzDJ9 #*Մ7 /YF¢(VjS 0OAb!‡ LtOq J>s9~-Ug4.aPFHrn\WP' u\߾"qIL)34}R%ϮP|K+#^uqͽ(1CL8Eb;LN3Q+ Hiw N #jT@ډu2`A[ ݬtqQssÔl1qK'6i㼰"%'K+WݏnRܩQJ\7(.,PNBK϶[)+=F#}&:r\WEC4ikc[9vVz=pƙwM_-M *KM:^7NP+׻DwBڍse$k"]ɢ uEm6ɵ%i7ś‡f>\rF0 Ӄfas*'1 <7It#w.Oz[;Cy 'w HY=6zD_SĻsQp5e$2}4A`2@Wq %B. :6]6=;IzGi} хn̲W>z[8{冗{Ƨ-q<Ng_"hB<`Q3CL%3+=۬lcmS_l+ŚǏoSuޜQ9 VxDM'o:(nikּ!X E%T‘%`\׵[5!n%xV H! F^Vd/)39ͱ8Y"h)^{32ݰR"t&m R?]6gF|9<ָG}e+^QLKTe| "#؊t;K%pL үC_ՄUUЉMلeqa˶SZ1"JS'3U_Ş!GvatHMm ”uo)A>>ջ ZX@󂓄h30YVyi8nף n-ߏQ罯e5݃>R)*[scLqe_+T'c"iV@ Q;Ryނ5.:JR;y^E'`nebΡ̯wX!xG<.$"R3:N\K1=tz^z.bف8A@8}x%ܙL?ÐK ^'0(wV5QYxcÑB|=G\ahp)HZh;۝` \QgLdN#`5+ ƕ F|Vh5 9y,Um3V-a è$2gWByt!#&j筨Ym@Udپ~"3Jp|6gmqG-0 "ĕ8G{8Yύ1@ [E]L!7Kh0Q2V?=+3F7~Yit8pq,gwqvZIbSs9!#}j5c)Z Ktg7Vo>r@m &Δu4F;jpb8XzNGkoBMQcBL}עJn. 'Q6:9l4E׭Y<FHS'!W%"IBDwD1gJk/zfZD?7)]jX!KU+P"d9>7x{= a2z!fj:oV^&’i,w+.]f3-[s{ƵwxśfJ`AJ0jq5R3&O#1Oͱ݅b!L>TN9=F+E@>{.uNU rG1ϥh8\ɛ1WBȕG[ /X0SJo .Y:;.z t}Xdk?lXYr8RQ:< )WveKgG#N}+G_{_X7Ϣ"y-k)H!kM\c{pn0rxCOy͚Ҙ)OqAZ~r3"ȈjD_Nj?ĸ] /aqj=xOgnvnp/ͿEAwG_]%-cR]!ҩو7GR=C2 O( % RYǝTk ܠɯf0ܹڽJ{C-^V(uq8hk|'ty1*S>rV ,Ҽd CF''+jAֈ YG ݿW˓U9JWb":2A1Jebc.ܠ4*0P5ߚ^smNhS|׼@]^'Az`bp:WJ(,&VW FpL^6:TBd뫢EGG2wR74eyc\΍emdR|E,\Tׂ'ltO֯L_- P fPv!CA14Vcִɑk(âoadݰQo]za?zI-4 b]VB闡#}?p‰/cǂ2llt3pm%̜>[YEܨҕ8V _ ׮eg܊Ô.db!oT~<'Lk.'9c8T<q~]{˾h媯/؅:|YND6yTR e=Sk ܙ"'Y|8wR/&v}^2_jJ=gQX69|: <~ʥe)?zD!9A*ҿ 47JRϛ 4NSW w͝:*Ki-:1p LK-Yc 0!L]OԤ˄@" *B3xD;ONԒB^˔&uHKdmO˽BZp+vCLJ#yںǕLFqEN8Hwk"b3f/{}DK閤tp?o:/:"]Re3cűRCGӥՊAЖV8`03 "N"ڧ鍕BO[Di7]qC^2r-W>o5\i[yIx;e7aWVfro9y˻yeu6"< V8W hK!JKUS??$.%%˂UZDmra.H( 0u\|sP@jͪ%^@#d;%Qə:58bY~r$.uEgOF9!.^L(,dzցʼny jncɣ#WEOc$63qgugng7!ͩs]7wqJ4H Y67;~SD*"1چ~Pµ=BY~ˠUϢ5;>oBu%PHjÍ )$$('* "r~$[Tjr ? ˺|?*@buS<1AuF0$߂jg#/1D*(22 +8|#7&ȸ9Ќ.{V,b~  ;ʘUjqnXhu~Ȗn!s:{0am#LǦ61F1ub[ _?rUu #`* z$s,g G;s/NcؗPMxe?vQO8[OS~\O޸c&GlۯJLH |` ل;q{Q觋NMz.Z{O:#u/0<䙋LpˀVYG,+TwgݫqifG_g BfG/D kNRW~e'k obLd&Hr-S _hG/~daqxԃFRjKܬ"ƒ_wu\w"~J+bfN;cACN쀚} yE_Ӣ}O F:i奛p_;?-/e1eոjVLp?֟kP. |@chhia[:3JfZޗ }e~Ǖ0=v8|)s@OB/Fӿډ,} D&lG#p.\Ʒc q%F>ݍ\ZVf![|P?xumXcR udQΕtu]6y)(?C֓:uGi#h <^g|Q[{LJʫ.3} j̾S4XӣLe+6 ƆJps:\umRg-ۇ Lܻ[W@cSy .ߥu,"ym"ulY<P;Pvk"āa)0ѡf2xFk o50U.z ",F-du4  /M |;=/\àqPG97#Qw;",359.iGU_֌ ?Ңtb |s+]᭢lZBڵЦpINB#H;[DR]NypOcVW]/^=1R_OӉ7</91o. W5M8!:EvTf{qSi{cH_DI #mYWП`T,,\>y>.G$@ K6jB Ov 8)]Ե),@ !R r1wmֿXuJz(o[]jb*˥ X+Q5"VS*:թNSFhB0`%J,Q ̑Ƿ*cMn:%c%`" ({jxs@=y9o+Έ:Ji@р;}69›qtaDr1i nܑܤL 0<`ϭԹfxX8 }.XީmL'ORv W+K ؇76 `h﮹TafIx79p4XGHԝ" 'jU1vms7T Y)mCIl,m%$:Ma]S6ͷ|hDSe߱aaQ[c:fc1ZՏǬ(F~^Hε֌FBB 9 , +@sTӃʮI;طG(9w̅E$)HR)*łt8>_hyE]FUV^2]բ . o@x 7][]7Ƣn>2E!Q%"nN]ARB2}#XŊگPePDB} K@NrУG.#ܾ_(~҅7G:5cmVf@_/ݽ_T\U+!ZO>MG E;ri MSx>nS 9)pY`7U8s/bzU q2Lq{oR2[pŜWIjwQ=xk@i1U|M5\P0Bx$u#QEdޮuPM8݃PMtW.^GGLj:̶^Ya b)/ˆ[ l02JsH:y@p,n2UQ`Bt*VbI1:7G#Pjkxn/fse2$ZOe37ԞFl`"4p]jD2fSe`gB2.qQInc {.ܐ.PHǹXEZ{iXRm-TV=ΐDsR'\B1 mmf%3 Y˯By2 WSti$F{QBEC3 f wωܐNY[gŌCfVEԗK%=E lBٜîMjbS7#tPO  :ҵֆ z >pqTܽ4+g@_ Sd]#ʉ bBۈ0 eEevJ8y/D8>}DA[._@]!ħY)-Z1Xо2g澰TPP$9T=ڽj& FĶYq{A,^V:,aHę{e25eל[kS}9چ m)fAlg@C7葔qOL'"m"RAO|LFep_ND|ȫ_ltJԨHe{+5k'1}ǫ)EH97$ j&-5GS*hR"=LsF (sW "] t$J>>@K vP͞mÌI@jÍK1uTF86Gӕ_ƥ9D+9uA3].ehkq:Sm55@fMZ3reEp6ak{xGܻǘs ?G/$exqb㤲j4F3d{d[w^8#ˢ-V)P 8w#jv svpwi{4*G0ޖB!4o&reڮx(5xigRCUݙh#S\MA$3ӾYFzv;rM$ړ5\jK%,7 7&t~0/CF[/ QtfVi#v;#` A"AiAbt#(F?ԔoB]zaTsubq&2-@_ m6=nsF,/IEQVEFY6-|ɻռDo3ɡ~P5 @| ސ6 5μލ4o^_)!S 4X.8:&i9yۘrɲE(ޟ>3Ay&3Bsa=c4-$pG)ɜ)g" rA~{mZҝyʔZ޶:o,&z!j+x(E;X:4ּ1 2!ôgFx Xt3[THIn6LYJAmuE_L{D]UfduN0 ſhI#jyjWjgǒ.43ѣݝw!#;g\t14kt{fG.qr}{U(+ﶄs*9lC[R,ҚJ=:/%R9dS`-HunlVUM ) m]/Ex51 DtU3)){4"cpޏDlkTFB,3TTu0)Z NqѐZ$4텕@D %X GC\3EtPoD,BMD0ҩUbLYA+K?b8tc)uyp66|lJ7˜[EAƻF8* Tl(Fk"=zbWMc&[\!؂0 ""/0cu;}VhrMW8Lt"-jt:.LzI~K +p{Ǹx؅}E*uTx"én6sGϣ; djmauH&FRx]Sz-ǎ2͂P~bijڮfQ~w]:E$#/EVTrD\P=y՗P:Ww0^4%aʾB:^4\>-8"wu|6+ԕMopa4iw%sQ$ Zjzx<>XX> Ӏ}\VWj;_j}}/8=l\*sW cʊ/xV&eъp@(Di?#wm 4C.b"`|MT+}`u,|8b l$l2J{r7<76ʡ).O?du݊QI6 $k3 69fd )1ZLZĴy%m*3,JE[ҁ~4mA}zcr./Jʿ٣r(O6LaQf˂2foIQt(5)rRJJ2v[3G,ng%~bwJceF*p^4&:`/]磺V#"r$t\:s;0l_~%93jZFLwȤlXM tR]T% y_8!6ySnB9hLJcw7R)TNN9*$d\1ɫs.dew|ȯܐ&3IfFV|`)lsQXa"*(2-Z, )v߄":qNa[nxBa'¤YW[.f?Ijg h,M+ %Xc4zRv'lw oeRɍbذ`PXb׀,xDI8cJY@q ="l ;}YVVfxt2Rs>Au"D%D !Dd"a)8A/[-m%ԗuʆ "j+9}(y Lq]GY#fLERZcXlRv&dk옝GLξM@L{&qQ`zXz %)+A bI^UE%xalUr{rϼL SvG̐!C*^=aΑ Ypw-s@Is8B8DT>uMeTZ u`k*U}.t< `=AN[t8gf6X&oaH#`&ӕ ih@Uufv?Vz9%rVEg8Fx0+8]*owYlhͲ!Lv-D8hgf?9j6 wVA-!ꓹr3+VIpERӚck +8t {MGLE*ISթвkl# ξ_@VbO#J|]c#grM.ͫKh9Ϭ@ة'/uXvϒ})S ѻ00Z67mvhXoE uEfZt{I:;T0ռn~cnN`$#Xgfdh!M- R+DeY̹?# Xz.21 {5~ fgW~ߞ[t>?'PE>D90ڀ%Y20]x>; lĄjX΁,p6Zk`CYT x*@ "]L) Ci%<<#JNbFڙ`2~:E#Cصh}c"GJkѺĠ]ӊ]QnoTz+r^7J( 1,i8qTboݍl4ШO p>%S`~Mڇn5p_]Yy醶q-GvPx|Lcg#5S ΖㅎD25xbwB `T܄#%PW_!GzqFiI/y !FV%tEXtdate:create2019-03-03T22:09:18+00:00;%tEXtdate:modify2019-03-03T22:09:18+00:00=IENDB`phpsysinfo-3.4.4/templates/misc/000077500000000000000000000000001467431054600166675ustar00rootroot00000000000000phpsysinfo-3.4.4/templates/misc/emptyfile.css000066400000000000000000000000001467431054600213650ustar00rootroot00000000000000phpsysinfo-3.4.4/templates/nextgen.css000066400000000000000000000055431467431054600201250ustar00rootroot00000000000000/* $Id: nextgen.css 518 2011-10-28 08:09:07Z namiltd $ */ a { text-decoration: none; color: #00a; } a:hover { text-decoration: underline; color: #7d9100; } * { margin: 0; padding: 0; } wbr { display: inline-block; } html { height: 100%; background: url("nextgen/nextgen_bg.png") repeat-x scroll center top #f3f1e9; } body { position: relative; width: 940px; _width: 945px; /* ie6 */ min-height: 100%; overflow: auto; margin: 0 auto; padding: 20px 20px 0 20px; font: 0.75em arial, tahoma, helvetica, sans-serif; color: #000; } div#output { margin: -20px -10px 0 -10px; padding: 116px 0 0 0; } p { padding: 4px 10px 2px 10px; line-height: 1.6; text-align: left; vertical-align: top; } h1 { position: absolute; top: 35px; left: 10px; margin: 0; padding: 0px 10px; font-size: 2em; font-weight: normal; color: #fff; } h2 { padding: 5px 10px; font-family: "trebuchet ms"; font-size: 1.2em; font-weight: bold; letter-spacing: 0.0em; text-transform: uppercase; color: #c9de55; /* #7d9100; */ background: #354242; } th, td, h3 { padding: 4px 10px 2px 10px; text-align: left; vertical-align: top; } h3 { font-size: 120%; } table { width: 100%; } select { background-color: #fefefe; } #select { position: absolute; top: 75px; color: #fff; right: 30px; width: 370px; text-align: right; padding: 0 10px 0 10px; } #select select { width: 100px; } .fullsize, .halfsize { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; border: 1px solid #354242; } .fullsize { width: 916px; } .halfsize { width: 451px; } #filesystemTable thead tr th { cursor: pointer; } #footer { color: #777; clear: both; margin: 12px; padding: 13px 25px; line-height: 18px; text-align: right; } .plugin { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; border: 1px solid #354242; } .even { background: #ddd; } .bar { background: #c1dc70 url("../gfx/html.gif"); } .barwarn { background: #dc8b70 url("../gfx/htmlwarn.gif"); } .barrest { background: #dcc170 url("../gfx/htmlrest.gif"); } .right { text-align: right; padding-right: 20px; } .dataTables_wrapper{ margin: 0 0 0 0 !important; border: 0px !important; } .treeimg { display: table-cell; *float: left; /* ie6 ie7 */ vertical-align: top; } .treespan { display: table-cell; *float: left; /* ie6 ie7 */ } .treespanbold { font-weight: bold; display: table-cell; *float: left; /* ie6 ie7 */ } .tree tr td { cursor: auto; height: 100%; } .treediv { display: table; height: 100%; } .tablemain { width: 100%; height: 100%; } phpsysinfo-3.4.4/templates/nextgen/000077500000000000000000000000001467431054600174045ustar00rootroot00000000000000phpsysinfo-3.4.4/templates/nextgen/nextgen_bg.png000066400000000000000000000011301467431054600222250ustar00rootroot00000000000000PNG  IHDRt cgAMA a cHRMz&u0`:pQ<BPLTE%..&//&00'11(22)33*44+55+66,77-88.99,88/::/;;0<<1==2>>3??3@@}j"pbKGD pHYs  ~tIME 3qIDAT(ϭ[ Dю/Ddk S]e L#IafX`ݴ Yp `e瀤vY$E 2Th*PtUhO5pGϝC~8wPNK0>57a "h)~){":&5 tEXtCreation Time11/10/10P{%tEXtdate:create2019-03-03T22:09:18+00:00;%tEXtdate:modify2019-03-03T22:09:18+00:00=tEXtSoftwareMacromedia Fireworks 8hxIENDB`phpsysinfo-3.4.4/templates/phpsysinfo.css000066400000000000000000000054311467431054600206530ustar00rootroot00000000000000/* $Id: phpsysinfo.css 589 2012-07-01 09:58:44Z namiltd $ */ a { text-decoration: none; color: #c03000; } a:hover { text-decoration: underline; } * { margin: 0; padding: 0; } wbr { display: inline-block; } html { height: 100%; background: url("../gfx/html.gif"); } body { position: relative; width: 940px; _width: 945px; /* ie6 */ min-height: 100%; overflow: auto; margin: 0 auto; padding: 20px 20px 0 20px; font: 0.75em arial, tahoma, helvetica, sans-serif; color: #000; background: #fff url("../gfx/body.gif") repeat-y; _bac\kground: #fff; /* ie6 only */ } p { padding: 4px 10px 2px 10px; line-height: 1.6; text-align: left; vertical-align: top; } h1 { margin: 0 10px; _margin: 0 15px 0 10px; /* ie6 */ padding: 10px 10px; border-top: 1px solid #8a6e5a; border-bottom: 1px solid #8a6e5a; font-size: 2em; font-weight: normal; color: #fff; background: #8a6e5a; } h2 { padding: 5px 10px; font-family: "trebuchet ms"; font-size: 1.2em; font-weight: bold; letter-spacing: 0.0em; text-transform: uppercase; color: #fff; background: #5a7e8a; } th, td, h3 { padding: 4px 10px 2px 10px; text-align: left; vertical-align: top; } h3 { font-size: 120%; } table { width: 100%; } select { background-color: #fefefe; } #select { text-align: right; padding: 10px 10px 0 10px; } #select select { width: 100px; } .fullsize, .halfsize { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; border: 1px solid #5a7e8a; } .fullsize { width: 916px; } .halfsize { width: 451px; } #filesystemTable thead tr th { cursor: pointer; } #footer { clear: both; color: #c9c9c9; margin: 12px; padding: 13px 25px; line-height: 18px; } .plugin { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; border: 1px solid #5a7e8a; } .even { background: #d6d6d6; } .bar { background: #c1dc70 url("../gfx/html.gif"); } .barwarn { background: #dc8b70 url("../gfx/htmlwarn.gif"); } .barrest { background: #dcc170 url("../gfx/htmlrest.gif"); } .right { text-align: right; padding-right: 20px; } .dataTables_wrapper{ margin: 0 0 0 0 !important; border: 0px !important; } .treeimg { display: table-cell; *float: left; /* ie6 ie7 */ vertical-align: top; } .treespan { display: table-cell; *float: left; /* ie6 ie7 */ } .treespanbold { font-weight: bold; display: table-cell; *float: left; /* ie6 ie7 */ } .tree tr td { cursor: auto; height: 100%; } .treediv { display: table; height: 100%; } .tablemain { width: 100%; height: 100%; } phpsysinfo-3.4.4/templates/phpsysinfo_bootstrap.css000066400000000000000000000064131467431054600227510ustar00rootroot00000000000000body { font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; font-size: 13px; padding-top: 80px; color: #333; background-color: #fff; } wbr { display: inline-block; } .table td.rightCell, .table th.rightCell { text-align: right; } .percent { text-align: center; } .card { border-color: #f2f2f2; } .navbar { background-color: #3b87c8; border-color: #2d6da3; } .navbar-brand, .navbar-brand:hover { color: #fff; margin-right: 0; } .treegrid-span { display: table-cell; } .treegrid-spanbold { font-weight: bold; display: table-cell; } .treegrid-indent { width: 16px; height: 16px; display: table-cell; } .treegrid-expander { width: 0px; height: 16px; display: table-cell; cursor: pointer; } .normalicon { width: 16px; height: 16px; position: relative; top: 1px; display: table-cell; font-style: normal; font-weight: normal; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .normalicon-right:before { content: "\25ba"; } .normalicon-down:before { content: "\25bc"; } table.sortable thead th { cursor: pointer; position: relative; top: 0; left: 0; } table.sortable thead th:hover { background-color: #ececec; } .sorttable_nosort { cursor: auto!important; } .table-hover > tbody > tr:hover { color: #333; background-color: #ececec; } .table-hover > tfoot > tr:hover { background-color: #ececec; } table.borderless td, table.borderless th, table.noborderattop tr:first-child td, table.noborderattop tr:first-child th { border: none!important; } .table { color: #333; background-color: #fff!important; margin: 0; border: 0; } .logo { cursor: pointer; width: 32px; } .select { color: #333; } select { background-color: #fefefe; } .template { cursor: pointer; color: #333; } .language { cursor: pointer; color: #333; } .card-header { background-color: #337ab7!important; border-color: #337ab7!important; color: #fff!important; } .progress { margin-bottom: 0; background-color: #f5f5f5; -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); } .progress-bar-success { background-color: #5cb85c; } .progress-bar-info { background-color: #5bc0de; } .progress-bar-warning { background-color: #f0ad4e; } .progress-bar-danger { background-color: #d9534f; } .modal-content { background-color: #fff; } .list-group { display: block; } .list-group-item { background-color: #fff; } .reload { background-image: url("../gfx/reload.gif"); float: right; cursor: pointer; width: 16px; height: 16px; } .container { padding:0; } .table thead th { border-top: none; } a, a:visited { color: #000; } a:hover { text-decoration: underline; color: #000; } .psihref, .psihref:visited { color: #fff; } .psihref:hover { text-decoration: underline; color: #fff; } .col-lg-6, .col-lg-12 { padding-bottom: 20px; } .badge { font-size: 12px; border-radius: 10px; padding: 3px 7px; float: right; } .table-nopadding > tbody > tr > td, .table-nopadding > tbody > tr > th { padding: 0; } phpsysinfo-3.4.4/templates/plugin/000077500000000000000000000000001467431054600172325ustar00rootroot00000000000000phpsysinfo-3.4.4/templates/plugin/jquery.dataTables.css000066400000000000000000000005521467431054600233300ustar00rootroot00000000000000/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DataTables sorting */ .sorting_asc { background: url('../../gfx/sort_asc.gif') no-repeat center right; } .sorting_desc { background: url('../../gfx/sort_desc.gif') no-repeat center right; } .sorting { background: url('../../gfx/sort_both.gif') no-repeat center right; }phpsysinfo-3.4.4/templates/plugin/jquery.jgrowl.css000066400000000000000000000100201467431054600225570ustar00rootroot00000000000000 div.jGrowl { padding: 10px; z-index: 9999; color: #fff; font-size: 12px; } /** Special IE6 Style Positioning **/ div.ie6 { position: absolute; } div.ie6.top-right { right: auto; bottom: auto; left: expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); } div.ie6.top-left { left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); } div.ie6.bottom-right { left: expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); top: expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); } div.ie6.bottom-left { left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); top: expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); } div.ie6.center { left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); width: 100%; } /** Normal Style Positions **/ div.jGrowl { position: absolute; } body > div.jGrowl { position: fixed; } div.jGrowl.top-left { left: 0px; top: 0px; } div.jGrowl.top-right { right: 0px; top: 0px; } div.jGrowl.bottom-left { left: 0px; bottom: 0px; } div.jGrowl.bottom-right { right: 0px; bottom: 0px; } div.jGrowl.center { top: 0px; width: 50%; left: 25%; } /** Cross Browser Styling **/ div.center div.jGrowl-notification, div.center div.jGrowl-closer { margin-left: auto; margin-right: auto; } div.jGrowl div.jGrowl-notification, div.jGrowl div.jGrowl-closer { background-color: #000; opacity: .85; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=85)"; filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=85); zoom: 1; width: 235px; padding: 10px; margin-top: 5px; margin-bottom: 5px; font-family: Tahoma, Arial, Helvetica, sans-serif; font-size: 1em; text-align: left; display: none; -moz-border-radius: 5px; -webkit-border-radius: 5px; } div.jGrowl div.jGrowl-notification { min-height: 40px; } div.jGrowl div.jGrowl-notification div.jGrowl-header { font-weight: bold; font-size: .85em; } div.jGrowl div.jGrowl-notification div.jGrowl-close { z-index: 99; float: right; font-weight: bold; font-size: 1em; cursor: pointer; } div.jGrowl div.jGrowl-closer { padding-top: 4px; padding-bottom: 4px; cursor: pointer; font-size: .9em; font-weight: bold; text-align: center; } /** Hide jGrowl when printing **/ @media print { div.jGrowl { display: none; } }phpsysinfo-3.4.4/templates/plugin/jquery.treeTable.css000066400000000000000000000011311467431054600231650ustar00rootroot00000000000000/* Copyright: Paul Hanlon Released under the MIT/BSD licence which means you can do anything you want with it, as long as you keep this copyright notice on the page */ .collapsed { display: none; } .tablemain { border-collapse: collapse; padding: 0px; text-align: left; } .tablemain td { margin-left: 3px; } .tree td { padding: 0px 2px 0px 0px; cursor: pointer; } .adeimg, .ttimage, .parimg, .preimg { border: none; margin: 0px; padding: 0px; vertical-align: bottom; width: 16px; height: 16px; } .adeimg, .parimg { cursor: pointer; } phpsysinfo-3.4.4/templates/plugin/nyroModal.full.css000066400000000000000000000054621467431054600226600ustar00rootroot00000000000000div#nyroModalFull { font-size: 12px; color: #777; } div#nyroModalFull div#nyroModalLoading { border: 4px solid #777; width: 150px; height: 150px; text-indent: -9999em; background: #fff url(../../gfx/ajaxLoader.gif) no-repeat; background-position: center; } div#nyroModalFull div#nyroModalLoading.error { border: 4px solid #f66; line-height: 20px; padding: 20px; width: 300px; height: 100px; text-indent: 0; background: #fff; } div#nyroModalFull div#nyroModalWrapper { background: #fff; border: 4px solid #777; } div#nyroModalFull div#nyroModalWrapper a#closeBut { position: absolute; display: block; top: -13px; right: -13px; width: 12px; height: 12px; background: url(../../gfx/close.gif) no-repeat; outline: 0; } div#nyroModalFull div#nyroModalWrapper h1#nyroModalTitle { margin: 0; padding: 0; position: absolute; top: -22px; left: 5px; font-size: 12px; color: #ddd; } div#nyroModalFull div#nyroModalWrapper div#nyroModalContent { overflow: auto; } div#nyroModalFull div#nyroModalWrapper div.wrapper div#nyroModalContent { padding: 5px; } div#nyroModalFull div#nyroModalWrapper div.wrapperImg div#nyroModalContent { position: relative; overflow: hidden; text-align: center; } div#nyroModalFull div#nyroModalWrapper div.wrapperImg div#nyroModalContent img { vertical-align: baseline; } div#nyroModalFull div#nyroModalWrapper div.wrapperImg div#nyroModalContent div { position: absolute; bottom: 0; left: 0; background: black; padding: 10px; margin: 10px; border: 1px white dotted; overflow: hidden; opacity: 0.2; filter: alpha(opacity=20); } div#nyroModalFull div#nyroModalWrapper div.wrapperImg div#nyroModalContent div:hover { opacity: 0.5; filter: alpha(opacity=50); cursor: help; } div#nyroModalFull div#nyroModalWrapper a.nyroModalPrev, div#nyroModalFull div#nyroModalWrapper a.nyroModalNext { z-index: 105; outline: none; position: absolute; top: 0; height: 100%; width: 40%; cursor: pointer; text-indent: -9999em; background: left 20% no-repeat; background-image: url(data:image/gif;base64,AAAA); /* Trick IE6 */ } div#nyroModalFull div#nyroModalWrapper div.wrapperSwf a.nyroModalPrev, div#nyroModalFull div#nyroModalWrapper div.wrapperSwf a.nyroModalNext, div#nyroModalFull div#nyroModalWrapper div.wrapper a.nyroModalPrev, div#nyroModalFull div#nyroModalWrapper div.wrapper a.nyroModalNext { height: 60%; width: 20%; } div#nyroModalFull div#nyroModalWrapper div#nyroModalContent a.nyroModalPrev { left: 0; } div#nyroModalFull div#nyroModalWrapper div#nyroModalContent a.nyroModalPrev:hover { background-image: url(../../gfx/prev.gif); } div#nyroModalFull div#nyroModalWrapper div#nyroModalContent a.nyroModalNext { right: 0; background-position: right 20%; } div#nyroModalFull div#nyroModalWrapper div#nyroModalContent a.nyroModalNext:hover { background-image: url(../../gfx/next.gif); }phpsysinfo-3.4.4/templates/schabau.css000066400000000000000000000050711467431054600200570ustar00rootroot00000000000000/* $Id: schabau.css 518 2011-10-28 08:09:07Z namiltd $ */ a { text-decoration: none; color: #c03000; } a:hover { text-decoration: underline; } * { margin: 0; padding: 0; } wbr { display: inline-block; } html { font-size: 100%; height: 100%; background-color: #f2f2df; color: #666; } body { font-family: Verdana, "Bitstream Vera Sans"; font-size: .75em; position: relative; width: 940px; _width: 945px; /* ie6 */ min-height: 100%; overflow: auto; margin: 0 auto; padding: 20px 20px 0 20px; } p { padding: 4px 10px 2px 10px; line-height: 1.6; text-align: left; vertical-align: top; } h1 { margin: 0 10px; _margin: 0 15px 0 10px; /* ie6 */ padding: 10px 10px; text-align: center; color: #fff; font-family: Georgia, serif; font-weight: normal; font-size: 150%; line-height: 1.5em; color: #326ea1; } h2 { font-family: Georgia, serif; font-weight: bold; font-size: 130%; padding: 3px 10px; text-transform: uppercase; line-height: 1.5em; color: #326ea1; border-bottom: 2px solid #326ea1; } th, td, h3 { padding: 4px 10px 2px 10px; text-align: left; vertical-align: top; font-size: 100%; } table { width: 100%; } select { background-color: #fefefe; } #select { text-align: right; padding: 0 10px 0 10px; } #select select { width: 100px; } .fullsize, .halfsize { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; } .fullsize { width: 918px; } .halfsize { width: 453px; } #filesystemTable thead tr th { cursor: pointer; } #footer { clear: both; color: #5c5c5c; margin: 12px; padding: 13px 25px; line-height: 18px; font-size: 80%; text-align: center; } .plugin { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; } .even { background: #ebe8da; } .bar { background-color: #326edf; } .barwarn { background-color: #fa5858; } .barrest { background-color: #32c5df; } .right { text-align: right; padding-right: 20px; } .treeimg { display: table-cell; *float: left; /* ie6 ie7 */ vertical-align: top; } .treespan { display: table-cell; *float: left; /* ie6 ie7 */ } .treespanbold { font-weight: bold; display: table-cell; *float: left; /* ie6 ie7 */ } .tree tr td { cursor: auto; height: 100%; } .treediv { display: table; height: 100%; } .tablemain { width: 100%; height: 100%; } phpsysinfo-3.4.4/templates/schabau_bootstrap.css000066400000000000000000000067051467431054600221610ustar00rootroot00000000000000/* $Id: schabau_bootstrap.css $ */ body { font-family: Verdana, "Bitstream Vera Sans"; font-size: 13px; padding-top: 80px; color: #666; background-color: #f2f2df; } wbr { display: inline-block; } .table td.rightCell, .table th.rightCell { text-align: right; } .percent { text-align: center; } .card { background-color: #f2f2df; border-color: #bcbbb1; } .navbar { font-family: Georgia, serif; background-color: #f2f2df; border-color: #bcbbb1; } .navbar-brand, .navbar-brand:hover { color: #666; margin-right: 0; } .treegrid-span { display: table-cell; } .treegrid-spanbold { font-weight: bold; display: table-cell; } .treegrid-indent { width: 16px; height: 16px; display: table-cell; } .treegrid-expander { width: 0px; height: 16px; display: table-cell; cursor: pointer; } .normalicon { width: 16px; height: 16px; position: relative; top: 1px; display: table-cell; font-style: normal; font-weight: normal; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .normalicon-right:before { content: "\25ba"; } .normalicon-down:before { content: "\25bc"; } table.sortable thead th { cursor: pointer; position: relative; top: 0; left: 0; } table.sortable thead th:hover { background-color: #ebe8da; } .sorttable_nosort { cursor: auto!important; } .table-hover > tbody > tr:hover { color: #666; background-color: #ebe8da; } .table-hover > tfoot > tr:hover { background-color: #ebe8da; } table.borderless td, table.borderless th, table.noborderattop tr:first-child td, table.noborderattop tr:first-child th { border: none!important; } .table { color: #666; background-color: #f2f2df!important; margin: 0; border: 0; } .logo { cursor: pointer; width: 32px; } .select { color: #666; } select { background-color: #f2f2df; } .template { cursor: pointer; color: #666; } .language { cursor: pointer; color: #666; } .card-header { font-family: Georgia, serif; font-weight: bold; font-size: 130%; background-color: #326ea1!important; border-color: #326ea1!important; color: #f2f2df!important; } .progress { margin-bottom: 0; background-color: #f2f2df; -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); } .progress-bar-success { background-color: #5cb85c; } .progress-bar-info { background-color: #326edf; } .progress-bar-warning { background-color: #E3CB93; } .progress-bar-danger { background-color: #fa5858; } .modal-content { background-color: #f2f2df; } .list-group { display: block; } .list-group-item { background-color: #f2f2df; } .reload { background-image: url("../gfx/reload.gif"); float: right; cursor: pointer; width: 16px; height: 16px; } .container { padding:0; } .table thead th { border-top: none; } a, a:visited { color: #666; } a:hover { text-decoration: underline; color: #666; } .psihref, .psihref:visited { color: #326ea1; } .psihref:hover { text-decoration: underline; color: #326ea1; } .col-lg-6, .col-lg-12 { padding-bottom: 20px; } .badge { font-size: 12px; border-radius: 10px; padding: 3px 7px; float: right; } .table-nopadding > tbody > tr > td, .table-nopadding > tbody > tr > th { padding: 0; } phpsysinfo-3.4.4/templates/two.css000066400000000000000000000045411467431054600172630ustar00rootroot00000000000000/* $Id: two.css 518 2011-10-28 08:09:07Z namiltd $ */ a { text-decoration: none; color: #c03000; } a:hover { text-decoration: underline; } * { margin: 0; padding: 0; } wbr { display: inline-block; } html { font-size: 100%; height: 100%; color: #2b2828; background: url("two/gradient.png") repeat-x #eef2fe; } body { font-family: Verdana, "Bitstream Vera Sans"; font-size: .75em; position: relative; width: 940px; _width: 945px; /* ie6 */ min-height: 100%; overflow: auto; margin: 0 auto; padding: 20px 20px 0 20px; } h1 { margin: 0 10px; _margin: 0 15px 0 10px; /* ie6 */ padding: 10px 10px; text-align: center; color: #fff; font-weight: normal; font-size: 170%; line-height: 1.5em; } h2 { font-weight: bold; font-size: 130%; line-height: 1.5em; color: #8b272a; border-bottom: 2px solid #8b272a; } th, td, h3 { padding: 4px 10px 2px 10px; text-align: left; vertical-align: top; font-size: 100%; } table { width: 100%; } select { background-color: #fefefe; } #select { color: #fff; text-align: right; padding: 0 10px 0 10px; margin-bottom: 45px; } #select select { width: 100px; } .fullsize, .halfsize { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; } .fullsize { width: 918px; } .halfsize { width: 453px; } #filesystemTable thead tr th { cursor: pointer; } #footer { clear: both; color: #5c5c5c; margin: 12px; padding: 13px 25px; line-height: 18px; font-size: 80%; text-align: center; } .plugin { float: left; margin: 10px 0 0 10px; _margin: 10px 5px 0 5px; /* ie6 */ padding: 1px; } .bar { background-color: #8b272a; } .barwarn { background-color: #88278b; } .barrest { background-color: #8b5627; } .right { text-align: right; padding-right: 20px; } .treeimg { display: table-cell; *float: left; /* ie6 ie7 */ vertical-align: top; } .treespan { display: table-cell; *float: left; /* ie6 ie7 */ } .treespanbold { font-weight: bold; display: table-cell; *float: left; /* ie6 ie7 */ } .tree tr td { cursor: auto; height: 100%; } .treediv { display: table; height: 100%; } .tablemain { width: 100%; height: 100%; } phpsysinfo-3.4.4/templates/two/000077500000000000000000000000001467431054600165455ustar00rootroot00000000000000phpsysinfo-3.4.4/templates/two/gradient.png000066400000000000000000000010151467431054600210450ustar00rootroot00000000000000PNG  IHDRanq5sBITO pHYs : :dW tEXtSoftwarewww.inkscape.org<PLTE+((/''dhkn q!t"x #{!%~"&#'%(&)'*(,)-+.,/-0.20314253658ˏCTIDATx @D 5Mm$I$I$I$I$I{$@ V0@ @ .PD0K`)L+@ Ni7@ @ V@[=%i%&@ M`@ ح`@ i@ s V@[@@ i7M8,j7|IENDB`phpsysinfo-3.4.4/templates/vendor/000077500000000000000000000000001467431054600172315ustar00rootroot00000000000000phpsysinfo-3.4.4/templates/vendor/bootstrap-chrome25.css000066400000000000000000000015131467431054600234020ustar00rootroot00000000000000.card-group .card, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .navbar-brand { float: left; } .modal-header .close { margin: -48px -16px -16px auto; } .progress-bar { height: 100%; } .card-header:first-child { border-radius: 3px 3px 0 0; } phpsysinfo-3.4.4/templates/vendor/bootstrap-chrome28.css000066400000000000000000000014201467431054600234020ustar00rootroot00000000000000.card-group .card, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .navbar-brand { float: left; } .modal-header .close { margin: -48px -16px -16px auto; } .progress-bar { height: 100%; } phpsysinfo-3.4.4/templates/vendor/bootstrap-firefox15.css000066400000000000000000000016011467431054600235640ustar00rootroot00000000000000.card-group .card, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .navbar-brand { float: left; } .modal-header .close { margin: -48px -16px -16px auto; } .progress-bar { height: 100%; } .card-header:first-child { border-radius: 3px 3px 0 0; } *, :after, :before { -moz-box-sizing: border-box; } phpsysinfo-3.4.4/templates/vendor/bootstrap-firefox20.css000066400000000000000000000015061467431054600235640ustar00rootroot00000000000000.card-group .card, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .navbar-brand { float: left; } .modal-header .close { margin: -48px -16px -16px auto; } .progress-bar { height: 100%; } *, :after, :before { -moz-box-sizing: border-box; } phpsysinfo-3.4.4/templates/vendor/bootstrap-firefox27.css000066400000000000000000000015371467431054600235770ustar00rootroot00000000000000.card-group .card, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .navbar-brand { float: left; } .row, .container-fluid, .container, section, footer, main, aside, .navbar-nav, .navbar-collapse { display: block; } *, :after, :before { -moz-box-sizing: border-box; } phpsysinfo-3.4.4/templates/vendor/bootstrap-firefox28.css000066400000000000000000000000661467431054600235740ustar00rootroot00000000000000*, :after, :before { -moz-box-sizing: border-box; } phpsysinfo-3.4.4/templates/vendor/bootstrap-ie8.css000066400000000000000000000161641467431054600224530ustar00rootroot00000000000000/* Bootstrap 4 for IE8 - v4.3.100 */ /* https://github.com/namiltd/bootstrap-ie */ .card-group .card, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .page-link, .navbar-brand { float: left; } .row, .container-fluid, .container, section, footer, main, aside, .navbar-nav, .navbar-collapse { display: block; } .modal.fade .modal-dialog { -ms-transform: translate(0, -25%); } .modal.show .modal-dialog { -ms-transform: translate(0, 0); } .custom-select { background-image: none; padding-right: .75rem; } .table-responsive { min-height: 0%; } /* see https://github.com/twbs/bootstrap/issues/14837 */ .progress { display: block; } .progress-bar { float: left; font-size: 12px; line-height: 20px; width: 0; text-align: center; height: 100%; } .d-flex, .d-sm-flex, .d-md-flex, .d-lg-flex, .d-xl-flex, .d-print-flex { display: block !important; } .d-inline-flex, .d-sm-inline-flex, .d-md-inline-flex, .d-lg-inline-flex, .d-xl-inline-flex, .d-print-inline-flex { display: inline-block !important; } .flex-row .div { display: inline-block; } .flex-row-reverse { text-align: right; } .flex-row-reverse .div { display: inline-block; float: right; } .justify-content-start div { display: inline-block; } .justify-content-end { text-align: right; } .justify-content-end div { display: inline-block; margin-right: 0; float: right; } .justify-content-center { text-align: center; } .justify-content-center div { display: inline-block; margin-right: auto; margin-left: auto; text-align: center; } .justify-content-between { text-justify: distribute-all-lines; } .justify-content-between div { display: inline-block; margin-right: auto; margin-left: auto; text-align: justify; } /* see https://stackoverflow.com/questions/6865194/fluid-width-with-equally-spaced-divs */ .justify-content-around { text-align: justify; text-justify: distribute-all-lines; } .justify-content-around div { display: inline-block; margin-right: auto; margin-left: auto; text-align: justify; } [class^="justify-content-"] div { display: inline-block; } /** Carousel - Hide indicators and controls as the carousel doesn't work **/ .carousel-indicators, .carousel-control-prev, .carousel-control-next { display: none; } .btn-link.disabled, .btn-link:disabled { text-decoration: none; } .close { cursor:pointer; } .close.disabled { cursor: auto; } .modal-header .close { margin: -48px -16px -16px auto; } .btn-group, .btn-group-vertical { display: inline; vertical-align: baseline; } .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group, .btn-group-vertical .btn + .btn, .btn-group-vertical .btn + .btn-group, .btn-group-vertical .btn-group + .btn, .btn-group-vertical .btn-group + .btn-group { margin-left: -5px; } .navbar-expand-sm .navbar-collapse, .navbar-expand-md .navbar-collapse, .navbar-expand-lg .navbar-collapse, .navbar-expand-xl .navbar-collapse, .navbar-expand .navbar-collapse { display: block !important; } .navbar > .container, .navbar > .container-fluid, .nav, .navbar { display: block; } .nav-link { padding: 0.5rem 1rem; float:none; } .navbar-expand-sm .nav-link, .navbar-expand-md .nav-link, .navbar-expand-lg .nav-link, .navbar-expand-xl .nav-link, .navbar-expand .nav-link { float: left; } .navbar-light .navbar-nav .nav-link, .navbar-light .navbar-nav .nav-link:focus { color: #777; } .navbar-light .navbar-nav .active .nav-link:hover { color: #000; } .navbar-light .navbar-nav .nav-link:hover { color: #333; } .navbar-dark .navbar-nav .nav-link, .navbar-dark .navbar-nav .nav-link:focus { color: #aaa; } .navbar-dark .navbar-nav .active .nav-link:hover { color: #fff; } .navbar-dark .navbar-nav .nav-link:hover { color: #ddd; } .row, .container-fluid, .container, section, footer, aside { clear: both; } .breadcrumb-item { display: inline-block; } body { font-size:16px; } .btn { cursor: pointer; } .btn-link.disabled { color: #6c757d; } .btn.disabled, .btn[disabled], fieldset[disabled] .btn { cursor: auto; } .modal-content { border:1px solid #ddd; } .modal-footer { text-align: right; } .list-group-item { border: 1px solid #ddd; } .custom-control-input { position: relative; } .collapse { display:none; } .collapse.show { display:block; } .col-1 { width: 8.333333%; } .col-2 { width: 16.666667%; } .col-3 { width: 25%; } .col-4 { width: 33.333333%; } .col-5 { width: 41.666667%; } .col-6 { width: 50%; } .col-7 { width: 58.333333%; } .col-8 { width: 66.666667%; } .col-9 { width: 75%; } .col-10 { width: 83.333333%; } .col-11 { width: 91.666667%; } .col-12 { width: 100%; } @media (min-width: 576px) { .col-sm-1 { width: 8.333333%; } .col-sm-2 { width: 16.666667%; } .col-sm-3 { width:25%; } .col-sm-4 { width: 33.333333%; } .col-sm-5 { width: 41.666667%; } .col-sm-6 { width: 50%; } .col-sm-7 { width: 58.333333%; } .col-sm-8 { width: 66.666667%; } .col-sm-9 { width: 75%; } .col-sm-10 { width: 83.333333%; } .col-sm-11 { width: 91.666667%; } .col-sm-12 { width: 100%; } } @media (min-width: 768px) { .col-md-1 { width: 8.333333%; } .col-md-2 { width: 16.666667%; } .col-md-3 { width: 25%; } .col-md-4 { width: 33.333333%; } .col-md-5 { width: 41.666667%; } .col-md-6 { width: 50%; } .col-md-7 { width: 58.333333%; } .col-md-8 { width: 66.666667%; } .col-md-9 { width: 75%; } .col-md-10 { width: 83.333333%; } .col-md-11 { width: 91.666667%; } .col-md-12 { width: 100%; } } @media (min-width: 992px) { .col-lg-1 { width: 8.333333%; } .col-lg-2 { width: 16.666667%; } .col-lg-3 { width: 25%; } .col-lg-4 { width: 33.333333%; } .col-lg-5 { width: 41.666667%; } .col-lg-6 { width: 50%; } .col-lg-7 { width: 58.333333%; } .col-lg-8 { width: 66.666667%; } .col-lg-9 { width:75%; } .col-lg-10 { width: 83.333333%; } .col-lg-11 { width: 91.666667%; } .col-lg-12 { width: 100%; } } @media (min-width: 1200px) { .col-xl-1 { width: 8.333333%; } .col-xl-2 { width: 16.666667%; } .col-xl-3 { width: 25%; } .col-xl-4 { width: 33.333333%; } .col-xl-5 { width: 41.666667%; } .col-xl-6 { width: 50%; } .col-xl-7 { width: 58.333333%; } .col-xl-8 { width: 66.666667%; } .col-xl-9 { width: 75%; } .col-xl-10 { width: 83.333333%; } .col-xl-11 { width: 91.666667%; } .col-xl-12 { width: 100%; } } phpsysinfo-3.4.4/templates/vendor/bootstrap-ie9.css000066400000000000000000000101551467431054600224460ustar00rootroot00000000000000/* Bootstrap 4 for IE9 - v4.3.100 */ /* https://github.com/namiltd/bootstrap-ie */ .card-group .card, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .page-link, .navbar-brand { float: left; } .row, .container-fluid, .container, section, footer, main, aside, .navbar-nav, .navbar-collapse { display: block; } .modal.fade .modal-dialog { -ms-transform: translate(0, -25%); } .modal.show .modal-dialog { -ms-transform: translate(0, 0); } .custom-select { background-image: none; padding-right: .75rem; } .table-responsive { min-height: 0%; } /* see https://github.com/twbs/bootstrap/issues/14837 */ .progress { display: block; } .progress-bar { float: left; font-size: 12px; line-height: 20px; width: 0; text-align: center; height: 100%; } .d-flex, .d-sm-flex, .d-md-flex, .d-lg-flex, .d-xl-flex, .d-print-flex { display: block !important; } .d-inline-flex, .d-sm-inline-flex, .d-md-inline-flex, .d-lg-inline-flex, .d-xl-inline-flex, .d-print-inline-flex { display: inline-block !important; } .flex-row .div { display: inline-block; } .flex-row-reverse { text-align: right; } .flex-row-reverse .div { display: inline-block; float: right; } .justify-content-start div { display: inline-block; } .justify-content-end { text-align: right; } .justify-content-end div { display: inline-block; margin-right: 0; float: right; } .justify-content-center { text-align: center; } .justify-content-center div { display: inline-block; margin-right: auto; margin-left: auto; text-align: center; } .justify-content-between { text-justify: distribute-all-lines; } .justify-content-between div { display: inline-block; margin-right: auto; margin-left: auto; text-align: justify; } /* see https://stackoverflow.com/questions/6865194/fluid-width-with-equally-spaced-divs */ .justify-content-around { text-align: justify; text-justify: distribute-all-lines; } .justify-content-around div { display: inline-block; margin-right: auto; margin-left: auto; text-align: justify; } [class^="justify-content-"] div { display: inline-block; } /** Carousel - Hide indicators and controls as the carousel doesn't work **/ .carousel-indicators, .carousel-control-prev, .carousel-control-next { display: none; } .btn-link.disabled, .btn-link:disabled { text-decoration: none; } .modal-header .close { margin: -48px -16px -16px auto; } .btn-group, .btn-group-vertical { display: inline; vertical-align: baseline; } .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group, .btn-group-vertical .btn + .btn, .btn-group-vertical .btn + .btn-group, .btn-group-vertical .btn-group + .btn, .btn-group-vertical .btn-group + .btn-group { margin-left: -5px; } .navbar-expand-sm .navbar-collapse, .navbar-expand-md .navbar-collapse, .navbar-expand-lg .navbar-collapse, .navbar-expand-xl .navbar-collapse, .navbar-expand .navbar-collapse { display: block !important; } .navbar > .container, .navbar > .container-fluid, .nav, .navbar { display: block; } .nav-link { padding: 0.5rem 1rem; float:none; } .navbar-expand-sm .nav-link, .navbar-expand-md .nav-link, .navbar-expand-lg .nav-link, .navbar-expand-xl .nav-link, .navbar-expand .nav-link { float: left; } .row, .container-fluid, .container, section, footer, aside { clear: both; } .breadcrumb-item { display: inline-block; } .modal-footer { text-align: right; } .img-fluid[src$=".svg"] { width: 100%; } .custom-switch .custom-control-input:checked ~ .custom-control-label:after { -ms-transform: translateX(0.75rem); } phpsysinfo-3.4.4/templates/vendor/bootstrap-midori04.css000066400000000000000000000015131467431054600234050ustar00rootroot00000000000000.card-group .card, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .navbar-brand { float: left; } .modal-header .close { margin: -48px -16px -16px auto; } .progress-bar { height: 100%; } .card-header:first-child { border-radius: 3px 3px 0 0; } phpsysinfo-3.4.4/templates/vendor/bootstrap-midori05.css000066400000000000000000000014201467431054600234030ustar00rootroot00000000000000.card-group .card, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .navbar-brand { float: left; } .modal-header .close { margin: -48px -16px -16px auto; } .progress-bar { height: 100%; } phpsysinfo-3.4.4/templates/vendor/bootstrap-opera11.css000066400000000000000000000014201467431054600232230ustar00rootroot00000000000000.card-group .card, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .navbar-brand { float: left; } .modal-header .close { margin: -48px -16px -16px auto; } .progress-bar { height: 100%; } phpsysinfo-3.4.4/templates/vendor/bootstrap-safari5.css000066400000000000000000000015131467431054600233100ustar00rootroot00000000000000.card-group .card, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .navbar-brand { float: left; } .modal-header .close { margin: -48px -16px -16px auto; } .progress-bar { height: 100%; } .card-header:first-child { border-radius: 3px 3px 0 0; } phpsysinfo-3.4.4/templates/vendor/bootstrap-safari8.css000066400000000000000000000014201467431054600233100ustar00rootroot00000000000000.card-group .card, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .navbar-brand { float: left; } .modal-header .close { margin: -48px -16px -16px auto; } .progress-bar { height: 100%; } phpsysinfo-3.4.4/templates/vendor/bootstrap-webapp.css000066400000000000000000000016511467431054600232370ustar00rootroot00000000000000@media (max-width: 575.98px) { .navbar, .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, .col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, .col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, .col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, .col-xl-auto { padding-left: 0; padding-right: 0; } .row { margin-left: 0; margin-right: 0; } }phpsysinfo-3.4.4/templates/vendor/bootstrap.min.css000066400000000000000000004601011467431054600225440ustar00rootroot00000000000000/*! * Bootstrap v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} phpsysinfo-3.4.4/tools/000077500000000000000000000000001467431054600150765ustar00rootroot00000000000000phpsysinfo-3.4.4/tools/README000066400000000000000000000004211467431054600157530ustar00rootroot00000000000000checkdistro.php - Tests detection of distribution distrotest.php - Generates a txt file for distribution testing cputest.php - Displays anonymized /proc/cpuinfo phptest.php - Displays information about PHP checkpng.php - Tests the display of distribution logos phpsysinfo-3.4.4/tools/checkdistro.php000066400000000000000000000157231467431054600201210ustar00rootroot00000000000000"; echo ""; echo ""; echo " "; echo ""; echo ""; define('PSI_APP_ROOT', dirname(__FILE__).'/..'); define('PSI_DEBUG', false); require_once PSI_APP_ROOT.'/includes/interface/class.PSI_Interface_OS.inc.php'; require_once PSI_APP_ROOT.'/includes/os/class.OS.inc.php'; require_once PSI_APP_ROOT.'/includes/to/class.System.inc.php'; require_once PSI_APP_ROOT.'/includes/os/class.Linux.inc.php'; $log_file = ""; $lsb = true; //enable detection lsb_release -a $lsbfile = true; //enable detection /etc/lsb-release $files = true; //enable detection files $osfile = true; //enable detection /etc/os-release $other = true; //enable other detection class PSI_Error { public static function singleton() { } } class CommonFunctions { private static function _parse_log_file($string) { global $log_file; if (file_exists($log_file)) { $contents = @file_get_contents($log_file); $contents = preg_replace("/\r\n/", "\n", $contents); if ($contents && preg_match("/^\-\-\-\-\-\-\-\-\-\-".preg_quote($string, '/')."\-\-\-\-\-\-\-\-\-\-\n/m", $contents, $matches, PREG_OFFSET_CAPTURE)) { $findIndex = $matches[0][1]; if (preg_match("/\n/m", $contents, $matches, PREG_OFFSET_CAPTURE, $findIndex)) { $startIndex = $matches[0][1]+1; if (preg_match("/^\-\-\-\-\-\-\-\-\-\-/m", $contents, $matches, PREG_OFFSET_CAPTURE, $startIndex)) { $stopIndex = $matches[0][1]; return substr($contents, $startIndex, $stopIndex-$startIndex); } else { return substr($contents, $startIndex); } } } } return false; } public static function rfts($strFileName, &$strRet, $intLines = 0, $intBytes = 4096, $booErrorRep = true) { global $lsbfile; global $files; global $osfile; global $other; if ($strFileName=="/etc/lsb-release") { $test = $lsbfile; } elseif ($strFileName=="/etc/os-release") { $test = $osfile; } elseif (($strFileName=="/etc/DISTRO_SPECS") || ($strFileName=="/etc/distro-release")|| ($strFileName=="/etc/system-release") || ($strFileName=="/etc/debian_version") || ($strFileName=="/etc/slackware-version") || ($strFileName=="/etc/config/uLinux.conf")) { $test = $other; } else { $test = $files; } if ($test) { $strRet=self::_parse_log_file($strFileName); if ($strRet && ($intLines == 1) && (strpos($strRet, "\n") !== false)) { $strRet=trim(substr($strRet, 0, strpos($strRet, "\n"))); } return $strRet; } else { return false; } } public static function executeProgram($strProgramname, $strArgs, &$strBuffer, $booErrorRep = true, $timeout = 30) { global $lsb; global $files; $strBuffer = ''; if ($strProgramname=='lsb_release') { return $lsb && ($strBuffer = self::_parse_log_file('lsb_release -a')); } else { return $files && ($strBuffer = self::_parse_log_file($strProgramname)); } } public static function fileexists($strFileName) { global $lsbfile; global $files; global $osfile; global $other; global $log_file; if ($strFileName=="/etc/lsb-release") { $test = $lsbfile; } elseif ($strFileName=="/etc/os-release") { $test = $osfile; } elseif (($strFileName=="/etc/DISTRO_SPECS") || ($strFileName=="/etc/distro-release") || ($strFileName=="/etc/system-release") || ($strFileName=="/etc/debian_version") || ($strFileName=="/etc/slackware-version") || ($strFileName=="/etc/config/uLinux.conf")) { $test = $other; } else { $test = $files; } return $test && file_exists($log_file) && ($contents = @file_get_contents($log_file)) && preg_match("/^\-\-\-\-\-\-\-\-\-\-".preg_quote($strFileName, '/')."\-\-\-\-\-\-\-\-\-\-\r?\n/m", $contents); } } class _Linux extends Linux { public function build() { parent::_distro(); } } function echodist($entry, $system, $_lsb, $_lsbfile, $_files, $_osfile, $_other) { global $lsb; global $lsbfile; global $files; global $osfile; global $other; $lsb = $_lsb; $lsbfile = $_lsbfile; $files = $_files; $osfile = $_osfile; $other = $_other; $sys = $system->getSys(); $distro=$sys->getDistribution(); $icon=$sys->getDistributionIcon(); if ($icon == '') $icon="unknown.png"; echo ""; if ($icon != $entry.'.png') echo ""; else echo ""; if ($distro !== 'Linux') { echo ""; echo $distro; } echo ""; $sys->setDistributionIcon(""); } $system = new _Linux('none'); $dirs = scandir(PSI_APP_ROOT.'/sample/distrotest'); if (($dirs !== false) && (count($dirs) > 0)) { $dirs = array_diff($dirs, array('.', '..')); if (($dirs !== false) && (count($dirs) > 0)) { natcasesort($dirs); echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; foreach ($dirs as $entry) { $files = scandir(PSI_APP_ROOT."/sample/distrotest/$entry"); if (($files !== false) && (count($files) > 0)) { $files = array_diff($files, array('.', '..')); if (($files !== false) && (count($files) > 0)) { natcasesort($files); foreach ($files as $sentry) { $log_file=PSI_APP_ROOT.'/sample/distrotest/'.$entry.'/'.$sentry; echo ""; echo ""; echodist($entry, $system, true, true, true, true, true); echodist($entry, $system, true, false, false, false, false); echodist($entry, $system, false, true, false, false, false); echodist($entry, $system, false, false, true, false, false); echodist($entry, $system, false, false, false, true, false); echodist($entry, $system, false, false, false, false, true); echo ""; } } } } echo "
    Distrotest sampleDistro NameDistro Name (lsb_release only)Distro Name (/etc/lsb-release only)Distro Name (files only)Distro Name (os-release only)Distro Name (other only)
    ".$entry.'/'.$sentry."
    "; } } echo ""; phpsysinfo-3.4.4/tools/checkpng.php000066400000000000000000000067401467431054600174000ustar00rootroot00000000000000"; echo ""; echo ""; echo " "; echo ""; echo ""; echo ""; $pngtable = glob('{../gfx/images/*.png,../plugins/*/gfx/*.png}', GLOB_BRACE); if (is_array($pngtable) && (($total = count($pngtable)) > 0)) { echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; for ($i = 0; $i < $total; $i++) { echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; } echo "
    PNG name16x1632x3216x1632x3216x1632x32
    ".$pngtable[$i].""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo "
    "; } echo ""; phpsysinfo-3.4.4/tools/cputest.php000066400000000000000000000005611467431054600173000ustar00rootroot000000000000000) { if (substr($contents, -1)!="\n") { $contents.="\n"; } $contents = preg_replace('/^(\s*serial\s*:\s*)(\S+)/im', '$1xxxxxxxxxxxxxxxx', $contents); echo $contents; } phpsysinfo-3.4.4/tools/distrotest.php000066400000000000000000000031071467431054600200140ustar00rootroot00000000000000/dev/null", "r"); if (is_resource($fp)) { $contents=""; $start=true; while (!feof($fp)) { $contents=fgets($fp, 4096); if ($start && (strlen($contents)>0)) { echo "----------lsb_release -a----------\n"; $start=false; } echo $contents; } if ((strlen($contents)>0)&&(substr($contents, -1)!="\n")) { echo "\n"; } pclose($fp); } foreach ($filemaskarray as $filemask) { $filenames = glob($filemask); if (is_array($filenames)) foreach ($filenames as $filename) { if (!is_dir($filename)) { echo "----------".$filename."----------\n"; echo $contents=file_get_contents($filename); if ((strlen($contents)>0)&&(substr($contents, -1)!="\n")) { echo "\n"; } } } } phpsysinfo-3.4.4/tools/phptest.php000066400000000000000000000040211467431054600172730ustar00rootroot00000000000000")) { echo " - PHP 5.1.3 or greater is required!!!"; } echo "\n"; echo "PHP EXTENSIONS:\n"; $arrReq = array('simplexml', 'pcre', 'xml', 'dom', 'mbstring', 'com_dotnet', 'json', 'xsl', 'snmp', 'pfsense'); $extensions = get_loaded_extensions(); $extarray = array(); foreach ($extensions as $extension) { $extarray[strtolower($extension)] = $extension; } $first = true; foreach ($arrReq as $extension) if (isset($extarray[$extension])) { if ($first) { echo " requred loaded:\n"; $first = false; } echoinfo($extarray[$extension]); } $first = true; foreach ($arrReq as $extension) if (!isset($extarray[$extension])) { if ($first) { echo " requred not loaded:\n"; $first = false; } echoinfo($extension); } $first = true; foreach ($extarray as $extlower=>$extension) if (!in_array($extlower, $arrReq, true)) { if ($first) { echo " others loaded:\n"; $first = false; } echoinfo($extension); } phpsysinfo-3.4.4/tools/speedfan/000077500000000000000000000000001467431054600166635ustar00rootroot00000000000000phpsysinfo-3.4.4/tools/speedfan/SpeedFanGet_bin.zip000066400000000000000000000051311467431054600223640ustar00rootroot00000000000000PK:Hʁ SpeedFanGet.exeX}lS61u66ByHDB)|88/!Y (gcOO<:m>zL*-@Tɉv lNCy; W9{0YBӄ ɿn ^-$nR5Zvc2]v#08;z\yArbҤ#~1ow藬P#J @AǸUJ3N@,3C"$?Om.{ K9Z v9LylDydT(O|>>cϡ=lƪf|/=խ]|H;SR蟓ԕ&)KM:XT1I ]f,#$R gQPQo_KC'%0әiHͷީƚא\ 5 *gE|x'OUv5p7a NlY}I"tp3V9N1Ŋ͊`TߒQoO%2Dm> .K2kTh&P4_`"C#|Pg &cRB1I1HL}A^c}<"`/1V'A O li ꤽ288*PD-PTU4F.? 1V*Xq#1 XlʩI m|혢Y $Dc> cOár^*1Ag^HX̼;FUÚz\s}J#%~RH,xy:ZD: #q=(#%stQdS){D MxxReԬVptaXYg,vji꯰;ؙo YJԞؙuV~@ɇ/Qp bg$1&/C"hEMԸI6._RSV.ؽ%5$Ma?lI[EnVRiq7ovaBMK)KX(˸g!jF!C ,}9jb= +FKIU]'? g2\HO_L j.!Of'y5LH`Tg6U{o$wsÝ@MHbY*"xS+=3zC&ۓN Y;]kUjФWw+@ҁw`2Dp^/WpQ~^5WxMk v97>:|GˠCx 1}0ҵr%&Wϋ7q 0ภ qukE[z>1 Dv(2cy<:oɣh42BGeF$ ȎEnfd#7iG%6pp& O#'C lV.]}pb;{ ۨ?sbLa=(E18fXll NꐷlČcČ_*GR⦶21K`,5*@tEs8n /EMj\SjxO4b8H4kbo*1Ev47>diz/#+g蜒L^  )]95,>c]Dr &kpCͥ^:Rb*^ mcۉzoPyiHSMI+5aqX֥]X-nM HkkaApx^$##S9G9dəoȑ9.GN#99y,G#y$GX$+| Q bE r#ZW?q~SZzs}\?mmG:83%~6vs))r,n-^sgvSay×gx97u3vhʚ^ؽbyqkUPVUXl 0`Nm誼_ucjj=΍ ֆ3N;`> zhoDQ^(uyNWn/e2pSEN<\-fƷyޯYWToٚ- |`=]AV,^tVuNfJ ԾX8o 6[7']n;#;Al y^8 t4uq5#q+*"[(Rۏyx G~]n .`xPzAMjmh/۲mZUxߣ^.^ymPK:Hʁ  SpeedFanGet.exePK= phpsysinfo-3.4.4/tools/speedfan/SpeedFanGet_src.zip000066400000000000000000000023321467431054600224030ustar00rootroot00000000000000PK:H@- Sn compile.cmdsHMWOK*H,PHK/I̳V p PJON.76R.HMMqKsO-K.(PGJH*.),.H,-RPKl:H4 SpeedFanGet.cppVo:Ĵ5P6=McV*E:MU8-#)&wRբJ >|>׎ars)0+R1t[LZ[n$LsHd׊Tf(iT[ES/mǕƪt5\VEvrOƂ?L0a1_E2{f7`$.q4p-gBqrxol(TkuZ ڸhnC2aapFXr(,)aJM.L f!<1_syd@1QSx"1}ׂ7@5U7OѮ >+qN|XiSfGH=3 +"D!dV̇c_bv\4Cb4E@H X5?y)Syf% XХ6fr%{p)&WnW'=a 1N˵b(JDq t08'b >@c>;5sq}9,@.e🊼 I;һ@[wd=/_D+#V7j@ӋbliՒWN9Dd.sUD+Ԉ U * @copyright 2009 phpSysInfo * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License version 2, or (at your option) any later version * @version SVN: $Id: xml.php 614 2012-07-28 09:02:59Z jacky672 $ * @link http://phpsysinfo.sourceforge.net */ header('Access-Control-Allow-Origin: *'); /** * application root path * * @var string */ define('PSI_APP_ROOT', dirname(__FILE__)); require_once PSI_APP_ROOT.'/includes/autoloader.inc.php'; if ((isset($_GET['json']) || isset($_GET['jsonp'])) && !extension_loaded("json")) { echo ''; } else { // check what xml part should be generated if (isset($_GET['plugin'])) { $output = new WebpageXML($_GET['plugin']); } else { $output = new WebpageXML(); } // generate output in proper type if (isset($_GET['json']) || isset($_GET['jsonp'])) { header('Cache-Control: no-cache, must-revalidate'); $json = $output->getJsonString(); if (isset($_GET['jsonp'])) { header('Content-Type: application/javascript'); echo !preg_match('/[^\w\?]/', $_GET['callback'])?$_GET['callback']:''; echo '('.$json.')'; } else { header('Content-Type: application/json'); echo $json; } } else { $output->run(); } }