diff options
-rw-r--r-- | net-misc/gns3-server/Manifest | 1 | ||||
-rw-r--r-- | net-misc/gns3-server/files/gns3-server-rmraven.patch | 194 | ||||
-rw-r--r-- | net-misc/gns3-server/gns3-server-2.2.8.ebuild | 71 | ||||
-rw-r--r-- | net-misc/gns3-server/metadata.xml | 8 |
4 files changed, 268 insertions, 6 deletions
diff --git a/net-misc/gns3-server/Manifest b/net-misc/gns3-server/Manifest index cd72eb35b74d..0ce776a9a169 100644 --- a/net-misc/gns3-server/Manifest +++ b/net-misc/gns3-server/Manifest @@ -1 +1,2 @@ DIST gns3-server-2.1.21.tar.gz 1713993 BLAKE2B 719306e05fd86b22b7413a60eb6fccc0d16a25cc3a34850344124433d0871bce5e85b195386615c1eaebf083295775de4031eee93c477bb8bd07078b839b2ee1 SHA512 3aeb7609f0fad3cf239a4de24affb124b5bed4a3af78c6a6e287a1b771e206c476849a04cf4ab731ce4923ca072d66928068fec5720bc0eb81d6819ed63f71c8 +DIST gns3-server-2.2.8.tar.gz 11248484 BLAKE2B 14843a86c0348b92e9c54af5c966f46249f72ef9aa74fc8cda27f3209d00d2e129df98c75f301d8fe2046fb1c04f3e24e163adbead787fed2c1d364c50228902 SHA512 3394d368c986ce8378739bdbc15359c46bdf787a38e18bae9035653dd6dc6683973bf1b7952137189f57fd83074f3d5ea6040f5d7a1d0503f6cf21d2835cd693 diff --git a/net-misc/gns3-server/files/gns3-server-rmraven.patch b/net-misc/gns3-server/files/gns3-server-rmraven.patch new file mode 100644 index 000000000000..612a16aecaee --- /dev/null +++ b/net-misc/gns3-server/files/gns3-server-rmraven.patch @@ -0,0 +1,194 @@ +From c63aad8eca00bca2ec48fcb667bbdfd80a22a7ab Mon Sep 17 00:00:00 2001 +From: grossmj <grossmj@gns3.net> +Date: Tue, 19 May 2020 15:48:53 +0930 +Subject: [PATCH] Replace Raven by Sentry SDK. Fixes + https://github.com/GNS3/gns3-server/issues/1758 + +--- + gns3server/crash_report.py | 93 ++++++++++++++++++++------------------ + gns3server/web/route.py | 2 +- + requirements.txt | 3 +- + 3 files changed, 53 insertions(+), 45 deletions(-) + +diff --git a/gns3server/crash_report.py b/gns3server/crash_report.py +index 87e22a213..7f92d38e6 100644 +--- a/gns3server/crash_report.py ++++ b/gns3server/crash_report.py +@@ -15,22 +15,21 @@ + # You should have received a copy of the GNU General Public License + # along with this program. If not, see <http://www.gnu.org/licenses/>. + ++try: ++ import sentry_sdk ++ from sentry_sdk.integrations.aiohttp import AioHttpIntegration ++ SENTRY_SDK_AVAILABLE = True ++except ImportError: ++ # Sentry SDK is not installed with deb package in order to simplify packaging ++ SENTRY_SDK_AVAILABLE = False ++ + import os + import sys + import struct +-import aiohttp + import platform + import locale + import distro + +-try: +- import raven +- from raven.transport.http import HTTPTransport +- RAVEN_AVAILABLE = True +-except ImportError: +- # raven is not installed with deb package in order to simplify packaging +- RAVEN_AVAILABLE = False +- + from .version import __version__, __version_info__ + from .config import Config + from .utils.get_resource import get_resource +@@ -59,48 +58,45 @@ class CrashReport: + """ + + DSN = "https://dbfb677c73304b1286aef33dfbb749c6:93b9a937d4884426a1b15f37536fcd94@o19455.ingest.sentry.io/38482" +- if hasattr(sys, "frozen"): +- cacert = get_resource("cacert.pem") +- if cacert is not None and os.path.isfile(cacert): +- DSN += "?ca_certs={}".format(cacert) +- else: +- log.warning("The SSL certificate bundle file '{}' could not be found".format(cacert)) + _instance = None + + def __init__(self): +- self._client = None + +- # We don't want sentry making noise if an error is catched when you don't have internet ++ # We don't want sentry making noise if an error is caught when you don't have internet + sentry_errors = logging.getLogger('sentry.errors') + sentry_errors.disabled = True + + sentry_uncaught = logging.getLogger('sentry.errors.uncaught') + sentry_uncaught.disabled = True + +- def capture_exception(self, request=None): +- if not RAVEN_AVAILABLE: +- return +- if os.path.exists(".git"): +- log.warning("A .git directory exist crash report is turn off for developers") +- return +- server_config = Config.instance().get_section_config("Server") +- if server_config.getboolean("report_errors"): +- if self._client is None: +- self._client = raven.Client(CrashReport.DSN, release=__version__, raise_send_errors=True, transport=HTTPTransport) +- if request is not None: +- self._client.http_context({ +- "method": request.method, +- "url": request.path, +- "data": request.json, +- }) +- +- context = { ++ if SENTRY_SDK_AVAILABLE: ++ cacert = None ++ if hasattr(sys, "frozen"): ++ cacert_resource = get_resource("cacert.pem") ++ if cacert_resource is not None and os.path.isfile(cacert_resource): ++ cacert = cacert_resource ++ else: ++ log.error("The SSL certificate bundle file '{}' could not be found".format(cacert_resource)) ++ ++ sentry_sdk.init(dsn=CrashReport.DSN, ++ release=__version__, ++ ca_certs=cacert, ++ integrations=[AioHttpIntegration()]) ++ ++ tags = { + "os:name": platform.system(), + "os:release": platform.release(), + "os:win_32": " ".join(platform.win32_ver()), + "os:mac": "{} {}".format(platform.mac_ver()[0], platform.mac_ver()[2]), + "os:linux": " ".join(distro.linux_distribution()), +- "aiohttp:version": aiohttp.__version__, ++ ++ } ++ ++ with sentry_sdk.configure_scope() as scope: ++ for key, value in tags.items(): ++ scope.set_tag(key, value) ++ ++ extra_context = { + "python:version": "{}.{}.{}".format(sys.version_info[0], + sys.version_info[1], + sys.version_info[2]), +@@ -113,8 +109,8 @@ def capture_exception(self, request=None): + # add locale information + try: + language, encoding = locale.getlocale() +- context["locale:language"] = language +- context["locale:encoding"] = encoding ++ extra_context["locale:language"] = language ++ extra_context["locale:encoding"] = encoding + except ValueError: + pass + +@@ -124,17 +120,28 @@ def capture_exception(self, request=None): + if os.path.isfile(gns3vm_version): + try: + with open(gns3vm_version) as fd: +- context["gns3vm:version"] = fd.readline().strip() ++ extra_context["gns3vm:version"] = fd.readline().strip() + except OSError: + pass + +- self._client.tags_context(context) ++ with sentry_sdk.configure_scope() as scope: ++ for key, value in extra_context.items(): ++ scope.set_extra(key, value) ++ ++ def capture_exception(self): ++ if not SENTRY_SDK_AVAILABLE: ++ return ++ if os.path.exists(".git"): ++ log.warning(".git directory detected, crash reporting is turned off for developers.") ++ return ++ server_config = Config.instance().get_section_config("Server") ++ if server_config.getboolean("report_errors"): ++ + try: +- report = self._client.captureException() ++ sentry_sdk.capture_exception() ++ log.info("Crash report sent with event ID: {}".format(sentry_sdk.last_event_id())) + except Exception as e: + log.error("Can't send crash report to Sentry: {}".format(e)) +- return +- log.info("Crash report sent with event ID: {}".format(self._client.get_ident(report))) + + @classmethod + def instance(cls): +diff --git a/gns3server/web/route.py b/gns3server/web/route.py +index d1275250d..c70dbbc3a 100644 +--- a/gns3server/web/route.py ++++ b/gns3server/web/route.py +@@ -242,7 +242,7 @@ async def control_schema(request): + log.error("Uncaught exception detected: {type}".format(type=type(e)), exc_info=1) + response = Response(request=request, route=route) + response.set_status(500) +- CrashReport.instance().capture_exception(request) ++ CrashReport.instance().capture_exception() + exc_type, exc_value, exc_tb = sys.exc_info() + lines = traceback.format_exception(exc_type, exc_value, exc_tb) + if api_version is not None: +diff --git a/requirements.txt b/requirements.txt +index 57fbb7938..0af9e0d68 100644 +--- a/requirements.txt ++++ b/requirements.txt +@@ -4,9 +4,10 @@ jsonschema==2.6.0; python_version < '3.8' # pyup: ignore + aiohttp==3.6.2 + aiohttp-cors==0.7.0 + aiofiles==0.4.0 ++aiocontextvars==0.2.2 + async_generator>=1.10 + Jinja2>=2.7.3 +-raven>=5.23.0 ++sentry-sdk>=0.14.4 + psutil==5.6.6 + async-timeout==3.0.1 + distro>=1.3.0 diff --git a/net-misc/gns3-server/gns3-server-2.2.8.ebuild b/net-misc/gns3-server/gns3-server-2.2.8.ebuild new file mode 100644 index 000000000000..ed01d69a2653 --- /dev/null +++ b/net-misc/gns3-server/gns3-server-2.2.8.ebuild @@ -0,0 +1,71 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 +PYTHON_COMPAT=( python3_{7,8} ) + +inherit distutils-r1 + +DESCRIPTION="GNS3 server to asynchronously manage emulators" +HOMEPAGE="https://www.gns3.net/" +SRC_URI="https://github.com/GNS3/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz" + +LICENSE="GPL-3+" +SLOT="0" +KEYWORDS="~amd64 ~x86" + +RDEPEND=" + >=app-emulation/dynamips-0.2.18 + >=dev-python/aiofiles-0.4.0[${PYTHON_USEDEP}] + >=dev-python/aiohttp-3.6.2[${PYTHON_USEDEP}] + >=dev-python/aiohttp-cors-0.7.0-r1[${PYTHON_USEDEP}] + >=dev-python/async_generator-1.10[${PYTHON_USEDEP}] + >=dev-python/async_timeout-3.0.1[${PYTHON_USEDEP}] + >=dev-python/jinja-2.7.3[${PYTHON_USEDEP}] + $(python_gen_cond_dep '>=dev-python/jsonschema-3.2.0:=[${PYTHON_USEDEP}]' 'python3_8') + $(python_gen_cond_dep '<=dev-python/jsonschema-2.6.0:=[${PYTHON_USEDEP}]' 'python3_7') + >=dev-python/psutil-5.7.0[${PYTHON_USEDEP}] + dev-python/py-cpuinfo[${PYTHON_USEDEP}] + >=dev-python/sentry-sdk-0.14.4[${PYTHON_USEDEP}] + >=dev-python/yarl-1.4.2[${PYTHON_USEDEP}] + >=net-misc/ubridge-0.9.14 +" +DEPEND="dev-python/setuptools[${PYTHON_USEDEP}]" + +PATCHES=( "${FILESDIR}/gns3-server-rmraven.patch" ) + +src_prepare() { + default + + # newer psutils is fine + sed -i -e '/psutil==5.6.6/d' requirements.txt || die "fixing requirements failed" + + # We don't support <py3.7 + sed -i -e '/aiocontextvars==0.2.2/d' requirements.txt || die "fixing requirements failed" + sed -i -e '/yarl==1.3.0/d' requirements.txt || die "fixing requirements failed 2" + + #Remove Pre-built busybox binary + rm gns3server/compute/docker/resources/bin/busybox || die + + # Package installs 'tests' package which is forbidden + rm -rf tests || die + eapply_user +} + +python_install() { + distutils-r1_python_install + + mkdir -p "${D}$(python_get_sitedir)/gns3server/compute/docker/resources/bin" || die + ln -s /bin/busybox "${D}$(python_get_sitedir)/gns3server/compute/docker/resources/bin/busybox" || die +} + +pkg_postinst() { + elog "net-misc/gns3-server has several optional packages that must be merged manually for additional functionality." + elog "" + elog "The following is a list of packages that can be added:" + elog "app-emulation/qemu, app-emulation/virtualbox" + elog "app-emulation/docker and net-analyzer/wireshark" + elog "" + elog "The following packages are currently unsupported:" + elog "iouyap and vpcs" +} diff --git a/net-misc/gns3-server/metadata.xml b/net-misc/gns3-server/metadata.xml index e4aa7df0de5a..09439c8762b5 100644 --- a/net-misc/gns3-server/metadata.xml +++ b/net-misc/gns3-server/metadata.xml @@ -2,12 +2,8 @@ <!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> <pkgmetadata> <maintainer type="person"> - <email>onigino@protonmail.com</email> - <name>Gino McCarty</name> - </maintainer> - <maintainer type="project"> - <email>proxy-maint@gentoo.org</email> - <name>Proxy Maintainers</name> + <email>bman@gentoo.org</email> + <name>Aaron Bauman</name> </maintainer> <upstream> <remote-id type="sourceforge">gns-3</remote-id> |