mirror of
https://github.com/GNS3/gns3-server
synced 2024-11-28 11:18:11 +00:00
Merge branch '2.2' into 3.0
# Conflicts: # gns3server/controller/node.py # gns3server/handlers/api/compute/server_handler.py # gns3server/version.py
This commit is contained in:
commit
541a906f49
10
CHANGELOG
10
CHANGELOG
@ -1,5 +1,15 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
|
## 2.2.25 14/09/2021
|
||||||
|
|
||||||
|
* Release web UI 2.2.25
|
||||||
|
* Fix issue preventing to use custom nested symbols. Fixes #1969
|
||||||
|
* Updated affinity symbols
|
||||||
|
* Fix qemu-img rebase code to support Qemu 6.1. Ref https://github.com/GNS3/gns3-server/pull/1962
|
||||||
|
* Reinstate qemu-img rebase
|
||||||
|
* Return disk usage for partition that contains the default project directory. Fixes #1947
|
||||||
|
* Explicitly require setuptools, utils/get_resource.py imports pkg_resources
|
||||||
|
|
||||||
## 2.2.24 25/08/2021
|
## 2.2.24 25/08/2021
|
||||||
|
|
||||||
* Release web UI 2.2.24
|
* Release web UI 2.2.24
|
||||||
|
46
gns3server/appliances/nokia-vsim.gns3a
Normal file
46
gns3server/appliances/nokia-vsim.gns3a
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"name": "Nokia vSIM",
|
||||||
|
"category": "router",
|
||||||
|
"description": "The Nokia Virtualized 7750 SR and 7950 XRS Simulator (vSIM) is a Virtualized Network Function (VNF) that simulates the control, management, and forwarding functions of a 7750 SR or 7950 XRS router. The vSIM runs the same Service Router Operating System (SR OS) as 7750 SR and 7950 XRS hardware-based routers and, therefore, has the same feature set and operational behavior as those platforms.",
|
||||||
|
"vendor_name": "Nokia",
|
||||||
|
"vendor_url": "https://www.nokia.com/networks/",
|
||||||
|
"documentation_url": "https://documentation.nokia.com/",
|
||||||
|
"product_name": "Nokia vSIM",
|
||||||
|
"product_url": "https://www.nokia.com/networks/products/virtualized-service-router/",
|
||||||
|
"registry_version": 4,
|
||||||
|
"status": "experimental",
|
||||||
|
"maintainer": "Vinicius Rocha",
|
||||||
|
"maintainer_email": "viniciusatr@gmail.com",
|
||||||
|
"usage": "Login is admin and password is admin. \n\nWe are using one IOM with one MDA 12x100G (w/ breakout).\n\nYou must add your license: file vi cf3:license.txt",
|
||||||
|
"first_port_name": "A/1",
|
||||||
|
"port_name_format": "1/1/{port1}",
|
||||||
|
"qemu": {
|
||||||
|
"adapter_type": "virtio-net-pci",
|
||||||
|
"adapters": 13,
|
||||||
|
"ram": 4096,
|
||||||
|
"cpus": 2,
|
||||||
|
"hda_disk_interface": "virtio",
|
||||||
|
"arch": "x86_64",
|
||||||
|
"console_type": "telnet",
|
||||||
|
"kvm": "require",
|
||||||
|
"options": "-nographic -smbios type=1,product=TIMOS:license-file=cf3:license.txt\\ slot=A\\ chassis=SR-1\\ card=cpm-1\\ mda/1=me12-100gb-qsfp28"
|
||||||
|
},
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "sros-vsr-21.7.R1.qcow2",
|
||||||
|
"version": "21.7.R1",
|
||||||
|
"md5sum": "7eed38c01350ebaf9c6105e26ce5307e",
|
||||||
|
"filesize": 568655872,
|
||||||
|
"download_url": "https://customer.nokia.com/support/s/",
|
||||||
|
"compression": "zip"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "21.7.R1",
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "sros-vsr-21.7.R1.qcow2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -7,7 +7,7 @@
|
|||||||
"documentation_url": "hhttps://docs.openmediavault.org",
|
"documentation_url": "hhttps://docs.openmediavault.org",
|
||||||
"product_name": "OpenMediaVault",
|
"product_name": "OpenMediaVault",
|
||||||
"product_url": "https://www.openmediavault.org/",
|
"product_url": "https://www.openmediavault.org/",
|
||||||
"registry_version": 3,
|
"registry_version": 4,
|
||||||
"status": "stable",
|
"status": "stable",
|
||||||
"maintainer": "Savio D'souza",
|
"maintainer": "Savio D'souza",
|
||||||
"maintainer_email": "savio2002@yahoo.in",
|
"maintainer_email": "savio2002@yahoo.in",
|
||||||
@ -17,21 +17,29 @@
|
|||||||
"adapter_type": "e1000",
|
"adapter_type": "e1000",
|
||||||
"adapters": 1,
|
"adapters": 1,
|
||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hda_disk_interface": "ide",
|
"hda_disk_interface": "sata",
|
||||||
"hdb_disk_interface": "ide",
|
"hdb_disk_interface": "sata",
|
||||||
"arch": "x86_64",
|
"arch": "x86_64",
|
||||||
"console_type": "vnc",
|
"console_type": "vnc",
|
||||||
"boot_priority": "dc",
|
"boot_priority": "dc",
|
||||||
"kvm": "require"
|
"kvm": "require"
|
||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "openmediavault_5.6.13-amd64.iso",
|
||||||
|
"version": "5.6.13",
|
||||||
|
"md5sum": "f08b41a5111fffca0355d53e26ec47ab",
|
||||||
|
"filesize": 652214272,
|
||||||
|
"download_url": "https://www.openmediavault.org/download.html",
|
||||||
|
"direct_download_url": "https://sourceforge.net/projects/openmediavault/files/5.6.13/openmediavault_5.6.13-amd64.iso/download"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "openmediavault_5.5.11-amd64.iso",
|
"filename": "openmediavault_5.5.11-amd64.iso",
|
||||||
"version": "5.5.11",
|
"version": "5.5.11",
|
||||||
"md5sum": "76baad8e13dd49bee9b4b4a6936b7296",
|
"md5sum": "76baad8e13dd49bee9b4b4a6936b7296",
|
||||||
"filesize": 608174080,
|
"filesize": 608174080,
|
||||||
"download_url": "https://www.openmediavault.org/download.html",
|
"download_url": "https://www.openmediavault.org/download.html",
|
||||||
"direct_download_url": "https://sourceforge.net/projects/openmediavault/files/latest/download"
|
"direct_download_url": "https://sourceforge.net/projects/openmediavault/files/5.5.11/openmediavault_5.5.11-amd64.iso/download"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "empty30G.qcow2",
|
"filename": "empty30G.qcow2",
|
||||||
@ -44,12 +52,20 @@
|
|||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
{
|
{
|
||||||
"name": "5.5.11",
|
"name": "5.6.13",
|
||||||
"images": {
|
"images": {
|
||||||
"hda_disk_image": "empty30G.qcow2",
|
"hda_disk_image": "empty30G.qcow2",
|
||||||
"hdb_disk_image": "empty30G.qcow2",
|
"hdb_disk_image": "empty30G.qcow2",
|
||||||
"cdrom_image": "openmediavault_5.5.11-amd64.iso"
|
"cdrom_image": "openmediavault_5.6.13-amd64.iso"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "5.5.11",
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "empty30G.qcow2",
|
||||||
|
"hdb_disk_image": "empty30G.qcow2",
|
||||||
|
"cdrom_image": "openmediavault_5.5.11-amd64.iso"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,24 @@
|
|||||||
"kvm": "allow"
|
"kvm": "allow"
|
||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
|
{
|
||||||
|
"filename": "openwrt-21.02.0-x86-64-generic-ext4-combined.img",
|
||||||
|
"version": "21.02.0",
|
||||||
|
"md5sum": "1ba2a5c5c05e592c36a469a8ecd3bcf5",
|
||||||
|
"filesize": 126353408,
|
||||||
|
"download_url": "https://downloads.openwrt.org/releases/21.02.0/targets/x86/64/",
|
||||||
|
"direct_download_url": "https://downloads.openwrt.org/releases/21.02.0/targets/x86/64/openwrt-21.02.0-x86-64-generic-ext4-combined.img.gz",
|
||||||
|
"compression": "gzip"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "openwrt-19.07.8-x86-64-combined-ext4.img",
|
||||||
|
"version": "19.07.8",
|
||||||
|
"md5sum": "a9d9776a96968a2042484330f285cae3",
|
||||||
|
"filesize": 285736960,
|
||||||
|
"download_url": "https://downloads.openwrt.org/releases/19.07.8/targets/x86/64/",
|
||||||
|
"direct_download_url": "https://downloads.openwrt.org/releases/19.07.8/targets/x86/64/openwrt-19.07.8-x86-64-combined-ext4.img",
|
||||||
|
"compression": "gzip"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"filename": "openwrt-19.07.7-x86-64-combined-ext4.img",
|
"filename": "openwrt-19.07.7-x86-64-combined-ext4.img",
|
||||||
"version": "19.07.7",
|
"version": "19.07.7",
|
||||||
@ -168,6 +186,18 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
|
{
|
||||||
|
"name": "21.02.0",
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "openwrt-21.02.0-x86-64-generic-ext4-combined.img"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "19.07.8",
|
||||||
|
"images": {
|
||||||
|
"hda_disk_image": "openwrt-19.07.8-x86-64-combined-ext4.img"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "19.07.7",
|
"name": "19.07.7",
|
||||||
"images": {
|
"images": {
|
||||||
|
@ -1,24 +1,27 @@
|
|||||||
{
|
{
|
||||||
"name": "Ostinato",
|
"name": "Ostinato",
|
||||||
"category": "guest",
|
"category": "guest",
|
||||||
"description": "Ostinato is an open-source, cross-platform network packet crafter/traffic generator and analyzer with a friendly GUI. Craft and send packets of several streams with different protocols at different rates.",
|
"description": "Packet crafter and traffic generator for network engineers",
|
||||||
"vendor_name": "Ostinato",
|
"vendor_name": "Ostinato",
|
||||||
"vendor_url": "http://ostinato.org/",
|
"vendor_url": "https://ostinato.org/",
|
||||||
"documentation_url": "http://ostinato.org/docs.html",
|
"documentation_url": "https://ostinato.org/docs",
|
||||||
"product_name": "Ostinato",
|
"product_name": "Ostinato",
|
||||||
"product_url": "http://ostinato.org/",
|
"product_url": "https://ostinato.org/",
|
||||||
"registry_version": 3,
|
"registry_version": 4,
|
||||||
"status": "experimental",
|
"status": "stable",
|
||||||
"maintainer": "Bernhard Ehlers",
|
"availability": "service-contract",
|
||||||
"maintainer_email": "be@bernhard-ehlers.de",
|
"maintainer": "Srivats P",
|
||||||
"usage": "Use interfaces starting with eth1 as traffic interfaces, eth0 is only for the (optional) management of the server/drone.",
|
"maintainer_email": "support@ostinato.org",
|
||||||
"symbol": "ostinato-3d-icon.svg",
|
"symbol": ":/symbols/affinity/circle/gray/cog.svg",
|
||||||
"port_name_format": "eth{0}",
|
"first_port_name": "eth0/mgmt",
|
||||||
|
"port_name_format": "eth{port1}",
|
||||||
|
"linked_clone": true,
|
||||||
"qemu": {
|
"qemu": {
|
||||||
"adapter_type": "e1000",
|
"adapter_type": "e1000",
|
||||||
"adapters": 4,
|
"adapters": 4,
|
||||||
"ram": 256,
|
"ram": 256,
|
||||||
"hda_disk_interface": "ide",
|
"cpus": 2,
|
||||||
|
"hda_disk_interface": "sata",
|
||||||
"arch": "i386",
|
"arch": "i386",
|
||||||
"console_type": "vnc",
|
"console_type": "vnc",
|
||||||
"kvm": "allow",
|
"kvm": "allow",
|
||||||
@ -26,33 +29,18 @@
|
|||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
{
|
{
|
||||||
"filename": "ostinato-0.9-1.qcow2",
|
"version": "1.1",
|
||||||
"version": "0.9",
|
"filename": "ostinatostd-1.1-1.qcow2",
|
||||||
"md5sum": "00b4856ec9fffbcbcab7a8f757355d69",
|
"filesize": 134217728,
|
||||||
"filesize": 101646336,
|
"md5sum": "aa027e83cefea1c38d0102eb2f28956e",
|
||||||
"download_url": "http://www.bernhard-ehlers.de/projects/ostinato4gns3/index.html",
|
"download_url": "https://ostinato.org/pricing/gns3"
|
||||||
"direct_download_url": "http://www.bernhard-ehlers.de/projects/ostinato4gns3/ostinato-0.9-1.qcow2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"filename": "ostinato-0.8-1.qcow2",
|
|
||||||
"version": "0.8",
|
|
||||||
"md5sum": "12e990ba695103cfac82f8771b8015d4",
|
|
||||||
"filesize": 57344000,
|
|
||||||
"download_url": "http://www.bernhard-ehlers.de/projects/ostinato4gns3/index.html",
|
|
||||||
"direct_download_url": "http://www.bernhard-ehlers.de/projects/ostinato4gns3/ostinato-0.8-1.qcow2"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
{
|
{
|
||||||
"name": "0.9",
|
"name": "1.1",
|
||||||
"images": {
|
"images": {
|
||||||
"hda_disk_image": "ostinato-0.9-1.qcow2"
|
"hda_disk_image": "ostinatostd-1.1-1.qcow2"
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "0.8",
|
|
||||||
"images": {
|
|
||||||
"hda_disk_image": "ostinato-0.8-1.qcow2"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
"status": "stable",
|
"status": "stable",
|
||||||
"maintainer": "GNS3 Team",
|
"maintainer": "GNS3 Team",
|
||||||
"maintainer_email": "developers@gns3.net",
|
"maintainer_email": "developers@gns3.net",
|
||||||
"usage": "Default username/password is vyos/vyos.\n\nAt first boot of versions 1.1.x/1.2.x the router will start from the cdrom. Login and then type \"install image\" and follow the instructions.",
|
"usage": "Default username/password is vyos/vyos.\n\nAt first boot the router will start from the cdrom. Login and then type \"install image\" and follow the instructions.",
|
||||||
"symbol": "vyos.svg",
|
"symbol": "vyos.svg",
|
||||||
"port_name_format": "eth{0}",
|
"port_name_format": "eth{0}",
|
||||||
"qemu": {
|
"qemu": {
|
||||||
@ -26,11 +26,12 @@
|
|||||||
},
|
},
|
||||||
"images": [
|
"images": [
|
||||||
{
|
{
|
||||||
"filename": "vyos-1.3.0-rc5-amd64.qcow2",
|
"filename": "vyos-1.3.0-rc6-amd64.iso",
|
||||||
"version": "1.3.0-rc5",
|
"version": "1.3.0-rc6",
|
||||||
"md5sum": "dd704f59afc0fccdf601cc750bf2c438",
|
"md5sum": "b3939f82a35b23d428ee0ad4ac8be087",
|
||||||
"filesize": 361955328,
|
"filesize": 331350016,
|
||||||
"direct_download_url": "https://www.mediafire.com/file/taspgxh4vj0a4j1/vyos-1.3.0-rc5-amd64.qcow2/file"
|
"download_url": "https://vyos.net/get/snapshots/",
|
||||||
|
"direct_download_url": "https://s3.amazonaws.com/s3-us.vyos.io/snapshot/vyos-1.3.0-rc6/vyos-1.3.0-rc6-amd64.iso"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"filename": "vyos-1.2.8-amd64.iso",
|
"filename": "vyos-1.2.8-amd64.iso",
|
||||||
@ -65,9 +66,10 @@
|
|||||||
],
|
],
|
||||||
"versions": [
|
"versions": [
|
||||||
{
|
{
|
||||||
"name": "1.3.0-rc5",
|
"name": "1.3.0-rc6",
|
||||||
"images": {
|
"images": {
|
||||||
"hda_disk_image": "vyos-1.3.0-rc5-amd64.qcow2"
|
"hda_disk_image": "empty8G.qcow2",
|
||||||
|
"cdrom_image": "vyos-1.3.0-rc6-amd64.iso"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -59,7 +59,7 @@ class CrashReport:
|
|||||||
Report crash to a third party service
|
Report crash to a third party service
|
||||||
"""
|
"""
|
||||||
|
|
||||||
DSN = "https://95f189bae52543e38be226cc1de2c8f3:e06825958e234a3e9ae5a81eaa21993d@o19455.ingest.sentry.io/38482"
|
DSN = "https://54d3363bab36489fb0f7cbbdda6ca7c5:9f1012f8aa1547f683e00c0aac9b99f6@o19455.ingest.sentry.io/38482"
|
||||||
_instance = None
|
_instance = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
135
gns3server/handlers/api/compute/server_handler.py
Normal file
135
gns3server/handlers/api/compute/server_handler.py
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# Copyright (C) 2015 GNS3 Technologies Inc.
|
||||||
|
#
|
||||||
|
# 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import psutil
|
||||||
|
import platform
|
||||||
|
|
||||||
|
from gns3server.web.route import Route
|
||||||
|
from gns3server.config import Config
|
||||||
|
from gns3server.schemas.version import VERSION_SCHEMA
|
||||||
|
from gns3server.schemas.server_statistics import SERVER_STATISTICS_SCHEMA
|
||||||
|
from gns3server.compute.port_manager import PortManager
|
||||||
|
from gns3server.utils.cpu_percent import CpuPercent
|
||||||
|
from gns3server.utils.path import get_default_project_directory
|
||||||
|
from gns3server.version import __version__
|
||||||
|
from aiohttp.web import HTTPConflict
|
||||||
|
|
||||||
|
|
||||||
|
class ServerHandler:
|
||||||
|
|
||||||
|
@Route.get(
|
||||||
|
r"/version",
|
||||||
|
description="Retrieve the server version number",
|
||||||
|
output=VERSION_SCHEMA)
|
||||||
|
def version(request, response):
|
||||||
|
|
||||||
|
config = Config.instance()
|
||||||
|
local_server = config.get_section_config("Server").getboolean("local", False)
|
||||||
|
response.json({"version": __version__, "local": local_server})
|
||||||
|
|
||||||
|
@Route.get(
|
||||||
|
r"/statistics",
|
||||||
|
description="Retrieve server statistics",
|
||||||
|
output=SERVER_STATISTICS_SCHEMA,
|
||||||
|
status_codes={
|
||||||
|
200: "Statistics information returned",
|
||||||
|
409: "Conflict"
|
||||||
|
})
|
||||||
|
def statistics(request, response):
|
||||||
|
|
||||||
|
try:
|
||||||
|
memory_total = psutil.virtual_memory().total
|
||||||
|
memory_free = psutil.virtual_memory().available
|
||||||
|
memory_used = memory_total - memory_free # actual memory usage in a cross platform fashion
|
||||||
|
swap_total = psutil.swap_memory().total
|
||||||
|
swap_free = psutil.swap_memory().free
|
||||||
|
swap_used = psutil.swap_memory().used
|
||||||
|
cpu_percent = int(CpuPercent.get())
|
||||||
|
load_average_percent = [int(x / psutil.cpu_count() * 100) for x in psutil.getloadavg()]
|
||||||
|
memory_percent = int(psutil.virtual_memory().percent)
|
||||||
|
swap_percent = int(psutil.swap_memory().percent)
|
||||||
|
disk_usage_percent = int(psutil.disk_usage(get_default_project_directory()).percent)
|
||||||
|
except psutil.Error as e:
|
||||||
|
raise HTTPConflict(text="Psutil error detected: {}".format(e))
|
||||||
|
response.json({"memory_total": memory_total,
|
||||||
|
"memory_free": memory_free,
|
||||||
|
"memory_used": memory_used,
|
||||||
|
"swap_total": swap_total,
|
||||||
|
"swap_free": swap_free,
|
||||||
|
"swap_used": swap_used,
|
||||||
|
"cpu_usage_percent": cpu_percent,
|
||||||
|
"memory_usage_percent": memory_percent,
|
||||||
|
"swap_usage_percent": swap_percent,
|
||||||
|
"disk_usage_percent": disk_usage_percent,
|
||||||
|
"load_average_percent": load_average_percent})
|
||||||
|
|
||||||
|
@Route.get(
|
||||||
|
r"/debug",
|
||||||
|
description="Return debug information about the compute",
|
||||||
|
status_codes={
|
||||||
|
201: "Written"
|
||||||
|
})
|
||||||
|
def debug(request, response):
|
||||||
|
response.content_type = "text/plain"
|
||||||
|
response.text = ServerHandler._getDebugData()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _getDebugData():
|
||||||
|
try:
|
||||||
|
addrs = ["* {}: {}".format(key, val) for key, val in psutil.net_if_addrs().items()]
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
addrs = ["INVALID ADDR WITH UNICODE CHARACTERS"]
|
||||||
|
|
||||||
|
data = """Version: {version}
|
||||||
|
OS: {os}
|
||||||
|
Python: {python}
|
||||||
|
CPU: {cpu}
|
||||||
|
Memory: {memory}
|
||||||
|
|
||||||
|
Networks:
|
||||||
|
{addrs}
|
||||||
|
""".format(
|
||||||
|
version=__version__,
|
||||||
|
os=platform.platform(),
|
||||||
|
python=platform.python_version(),
|
||||||
|
memory=psutil.virtual_memory(),
|
||||||
|
cpu=psutil.cpu_times(),
|
||||||
|
addrs="\n".join(addrs)
|
||||||
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
connections = psutil.net_connections()
|
||||||
|
# You need to be root for OSX
|
||||||
|
except psutil.AccessDenied:
|
||||||
|
connections = None
|
||||||
|
|
||||||
|
if connections:
|
||||||
|
data += "\n\nConnections:\n"
|
||||||
|
for port in PortManager.instance().tcp_ports:
|
||||||
|
found = False
|
||||||
|
for open_port in connections:
|
||||||
|
if open_port.laddr[1] == port:
|
||||||
|
found = True
|
||||||
|
data += "TCP {}: {}\n".format(port, found)
|
||||||
|
for port in PortManager.instance().udp_ports:
|
||||||
|
found = False
|
||||||
|
for open_port in connections:
|
||||||
|
if open_port.laddr[1] == port:
|
||||||
|
found = True
|
||||||
|
data += "UDP {}: {}\n".format(port, found)
|
||||||
|
return data
|
File diff suppressed because one or more lines are too long
@ -2575,7 +2575,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
|
|
||||||
spark-md5
|
spark-md5
|
||||||
WTFPL
|
(WTFPL OR MIT)
|
||||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||||
Version 2, December 2004
|
Version 2, December 2004
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
gns3server/static/web-ui/main.99bd505aa7e5588a7375.js
Normal file
1
gns3server/static/web-ui/main.99bd505aa7e5588a7375.js
Normal file
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
!function(){"use strict";var e,v={},g={};function n(e){var u=g[e];if(void 0!==u)return u.exports;var t=g[e]={id:e,loaded:!1,exports:{}};return v[e](t,t.exports,n),t.loaded=!0,t.exports}n.m=v,e=[],n.O=function(u,t,a,o){if(!t){var r=1/0;for(i=0;i<e.length;i++){t=e[i][0],a=e[i][1],o=e[i][2];for(var l=!0,f=0;f<t.length;f++)(!1&o||r>=o)&&Object.keys(n.O).every(function(b){return n.O[b](t[f])})?t.splice(f--,1):(l=!1,o<r&&(r=o));if(l){e.splice(i--,1);var s=a();void 0!==s&&(u=s)}}return u}o=o||0;for(var i=e.length;i>0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[t,a,o]},n.n=function(e){var u=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(u,{a:u}),u},n.d=function(e,u){for(var t in u)n.o(u,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:u[t]})},n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce(function(u,t){return n.f[t](e,u),u},[]))},n.u=function(e){return e+".b66762bd9b75f566201f.js"},n.miniCssF=function(e){return"styles.f77f6cd675ecc98f0177.css"},n.hmd=function(e){return(e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:function(){throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e},n.o=function(e,u){return Object.prototype.hasOwnProperty.call(e,u)},function(){var e={},u="gns3-web-ui:";n.l=function(t,a,o,i){if(e[t])e[t].push(a);else{var r,l;if(void 0!==o)for(var f=document.getElementsByTagName("script"),s=0;s<f.length;s++){var c=f[s];if(c.getAttribute("src")==t||c.getAttribute("data-webpack")==u+o){r=c;break}}r||(l=!0,(r=document.createElement("script")).charset="utf-8",r.timeout=120,n.nc&&r.setAttribute("nonce",n.nc),r.setAttribute("data-webpack",u+o),r.src=n.tu(t)),e[t]=[a];var d=function(h,b){r.onerror=r.onload=null,clearTimeout(p);var _=e[t];if(delete e[t],r.parentNode&&r.parentNode.removeChild(r),_&&_.forEach(function(m){return m(b)}),h)return h(b)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=d.bind(null,r.onerror),r.onload=d.bind(null,r.onload),l&&document.head.appendChild(r)}}}(),n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},function(){var e;n.tu=function(u){return void 0===e&&(e={createScriptURL:function(t){return t}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e.createScriptURL(u)}}(),n.p="",function(){var e={666:0};n.f.j=function(a,o){var i=n.o(e,a)?e[a]:void 0;if(0!==i)if(i)o.push(i[2]);else if(666!=a){var r=new Promise(function(c,d){i=e[a]=[c,d]});o.push(i[2]=r);var l=n.p+n.u(a),f=new Error;n.l(l,function(c){if(n.o(e,a)&&(0!==(i=e[a])&&(e[a]=void 0),i)){var d=c&&("load"===c.type?"missing":c.type),p=c&&c.target&&c.target.src;f.message="Loading chunk "+a+" failed.\n("+d+": "+p+")",f.name="ChunkLoadError",f.type=d,f.request=p,i[1](f)}},"chunk-"+a,a)}else e[a]=0},n.O.j=function(a){return 0===e[a]};var u=function(a,o){var f,s,i=o[0],r=o[1],l=o[2],c=0;for(f in r)n.o(r,f)&&(n.m[f]=r[f]);if(l)var d=l(n);for(a&&a(o);c<i.length;c++)n.o(e,s=i[c])&&e[s]&&e[s][0](),e[i[c]]=0;return n.O(d)},t=self.webpackChunkgns3_web_ui=self.webpackChunkgns3_web_ui||[];t.forEach(u.bind(null,0)),t.push=u.bind(null,t.push.bind(t))}()}();
|
!function(){"use strict";var e,v={},g={};function n(e){var u=g[e];if(void 0!==u)return u.exports;var t=g[e]={id:e,loaded:!1,exports:{}};return v[e](t,t.exports,n),t.loaded=!0,t.exports}n.m=v,e=[],n.O=function(u,t,a,o){if(!t){var r=1/0;for(i=0;i<e.length;i++){t=e[i][0],a=e[i][1],o=e[i][2];for(var l=!0,f=0;f<t.length;f++)(!1&o||r>=o)&&Object.keys(n.O).every(function(b){return n.O[b](t[f])})?t.splice(f--,1):(l=!1,o<r&&(r=o));if(l){e.splice(i--,1);var s=a();void 0!==s&&(u=s)}}return u}o=o||0;for(var i=e.length;i>0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[t,a,o]},n.n=function(e){var u=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(u,{a:u}),u},n.d=function(e,u){for(var t in u)n.o(u,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:u[t]})},n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce(function(u,t){return n.f[t](e,u),u},[]))},n.u=function(e){return e+".30249f0e3aeb3f791226.js"},n.miniCssF=function(e){return"styles.bc7659e2cee2695de64b.css"},n.hmd=function(e){return(e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:function(){throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e},n.o=function(e,u){return Object.prototype.hasOwnProperty.call(e,u)},function(){var e={},u="gns3-web-ui:";n.l=function(t,a,o,i){if(e[t])e[t].push(a);else{var r,l;if(void 0!==o)for(var f=document.getElementsByTagName("script"),s=0;s<f.length;s++){var c=f[s];if(c.getAttribute("src")==t||c.getAttribute("data-webpack")==u+o){r=c;break}}r||(l=!0,(r=document.createElement("script")).charset="utf-8",r.timeout=120,n.nc&&r.setAttribute("nonce",n.nc),r.setAttribute("data-webpack",u+o),r.src=n.tu(t)),e[t]=[a];var d=function(h,b){r.onerror=r.onload=null,clearTimeout(p);var _=e[t];if(delete e[t],r.parentNode&&r.parentNode.removeChild(r),_&&_.forEach(function(m){return m(b)}),h)return h(b)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=d.bind(null,r.onerror),r.onload=d.bind(null,r.onload),l&&document.head.appendChild(r)}}}(),n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},function(){var e;n.tu=function(u){return void 0===e&&(e={createScriptURL:function(t){return t}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e.createScriptURL(u)}}(),n.p="",function(){var e={666:0};n.f.j=function(a,o){var i=n.o(e,a)?e[a]:void 0;if(0!==i)if(i)o.push(i[2]);else if(666!=a){var r=new Promise(function(c,d){i=e[a]=[c,d]});o.push(i[2]=r);var l=n.p+n.u(a),f=new Error;n.l(l,function(c){if(n.o(e,a)&&(0!==(i=e[a])&&(e[a]=void 0),i)){var d=c&&("load"===c.type?"missing":c.type),p=c&&c.target&&c.target.src;f.message="Loading chunk "+a+" failed.\n("+d+": "+p+")",f.name="ChunkLoadError",f.type=d,f.request=p,i[1](f)}},"chunk-"+a,a)}else e[a]=0},n.O.j=function(a){return 0===e[a]};var u=function(a,o){var f,s,i=o[0],r=o[1],l=o[2],c=0;for(f in r)n.o(r,f)&&(n.m[f]=r[f]);if(l)var d=l(n);for(a&&a(o);c<i.length;c++)n.o(e,s=i[c])&&e[s]&&e[s][0](),e[i[c]]=0;return n.O(d)},t=self.webpackChunkgns3_web_ui=self.webpackChunkgns3_web_ui||[];t.forEach(u.bind(null,0)),t.push=u.bind(null,t.push.bind(t))}()}();
|
11
gns3server/static/web-ui/styles.bc7659e2cee2695de64b.css
Normal file
11
gns3server/static/web-ui/styles.bc7659e2cee2695de64b.css
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user