68 Commits

Author SHA1 Message Date
YueGuobin
c709d74826
fix: compute notification stream silently died on uncaught exceptions
Two exception paths could permanently kill the compute notification
chain (no more compute.updated events, no reconnection until a server
restart):

- connect() only caught ComputeError, but _run_http_query translates
  HTTP status errors (401/403/404/...) into sibling ControllerError
  subclasses (and a raw fastapi HTTPException for unexpected statuses).
  Those escaped the fire-and-forget connect() task started at controller
  startup and died silently. Now they notify clients, schedule an
  exponential-backoff retry, and still re-raise for explicit callers.
  The dead web.HTTP* except branches (never reached since
  _run_http_query converts HTTP errors itself) are removed.

- _connect_notification() only caught aiohttp.ClientError. A malformed
  frame (e.g. missing 'action') or any error raised while dispatching a
  compute event (e.g. a pydantic ValidationError in
  node.parse_node_response) escaped the task, skipped the reconnect
  scheduling placed after the try block, and killed the stream forever.
  Now any exception is logged with its traceback (the gather() future
  holding it was never retrieved, so nothing was ever printed) and the
  reconnect scheduling + final compute.updated emit live in the finally
  block so every exit path recovers.

Also moves the usage-stats reset before the disconnect log line so the
emitted compute.updated snapshot is consistent.
2026-08-22 00:36:24 +08:00
YueGuobin
cbb21e8e40
feat: Node file streaming, recursive listing, file type detection, and file delete
- Stream file GET/POST through controller without buffering in memory
- Add recursive and subdirectory filtering to node file listing
- Replace file extension with magic-based file type detection
- Add DELETE endpoint for node and project files
- Include directories in listing response
- Add params and stream support to http_query
- Fix lambda closures, streamer exception scope, and delete error codes
2026-06-09 22:52:50 +08:00
grossmj
9492fd0671
Fix tests 2024-12-22 22:34:23 +07:00
grossmj
0037f31553
Merge branch '2.2' into 3.0
# Conflicts:
#	CHANGELOG
#	docs/api/notifications/link.updated.json
#	docs/api/notifications/log.warning.json
#	docs/api/v2/compute/ethernet_switch/projectsprojectidethernetswitchnodes.rst
#	docs/api/v2/compute/ethernet_switch/projectsprojectidethernetswitchnodesnodeid.rst
#	docs/api/v2/compute/iou/projectsprojectidiounodes.rst
#	docs/api/v2/compute/project/projects.rst
#	docs/api/v2/compute/qemu/projectsprojectidqemunodes.rst
#	docs/api/v2/compute/qemu/projectsprojectidqemunodesnodeid.rst
#	docs/api/v2/compute/qemu/projectsprojectidqemunodesnodeidstart.rst
#	docs/api/v2/controller/link/projectsprojectidlinks.rst
#	docs/api/v2/controller/link/projectsprojectidlinkslinkid.rst
#	docs/api/v2/controller/link/projectsprojectidlinkslinkidstartcapture.rst
#	docs/api/v2/controller/project/projects.rst
#	docs/api/v2/controller/project/projectsprojectidduplicate.rst
#	docs/controller_notifications.rst
#	docs/curl.rst
#	docs/gns3_file.json
#	docs/project_notifications.rst
#	gns3server/compute/qemu/qemu_vm.py
#	gns3server/controller/project.py
#	gns3server/crash_report.py
#	gns3server/schemas/ethernet_hub.py
#	gns3server/schemas/ethernet_switch.py
#	gns3server/static/web-ui/3rdpartylicenses.txt
#	gns3server/static/web-ui/index.html
#	gns3server/utils/asyncio/telnet_server.py
#	gns3server/version.py
#	gns3server/web/web_server.py
#	requirements.txt
#	tests/controller/test_project.py
#	tests/controller/test_topology.py
#	tests/handlers/api/controller/test_project.py
2024-01-28 12:30:43 +11:00
grossmj
e3493870b2
Add project.created, project.opened and project.deleted controller notification stream.
Move project.updated and project.closed from project notification to controller notification stream.
2024-01-28 12:13:09 +11:00
grossmj
7d49b80e6b Add controller endpoints to get VirtualBox VMs, VMware VMs and Docker images 2022-06-07 00:38:59 +08:00
grossmj
fda2a37b98 Handle creating Qemu disk images and resizing 2022-04-07 16:21:47 +08:00
grossmj
cefab8d362 Rename __json__() to asdict() 2021-04-17 23:34:28 +09:30
grossmj
30ebae207f Use Pydantic to validate the server config file. 2021-04-12 17:02:23 +09:30
grossmj
359f9a7384 Move to version 3 of the REST API.
Rename packet capture endpoints.
2020-11-02 12:05:32 +10:30
grossmj
eb3cb8a41f Migration to FastAPI 2020-10-02 16:07:50 +09:30
grossmj
3dc4ea46d6 Add total RAM, CPUs and disk size to servers summary as well as disk usage in percent. Fixes https://github.com/GNS3/gns3-server/issues/1532 2020-07-19 14:16:07 +09:30
grossmj
d3ea67da24 Refactor tests
* Use pytest-aiohttp
* Use the async def / await syntax.
* Fix tests to run with Python 3.8
2020-06-16 13:59:03 +09:30
grossmj
dd11d38338 Fix tests. 2020-04-27 22:48:42 +09:30
grossmj
03401a477e Fix issue when images are not uploaded from appliance wizard. Ref https://github.com/GNS3/gns3-gui/issues/2738 2019-03-18 15:33:37 +07:00
grossmj
af80b0bb6e Use aiofiles where relevant. 2019-03-06 23:00:01 +07:00
grossmj
ab8dc52ece Fix tests to work with new version of aiohttp (>= 3.0) 2018-10-17 17:32:10 +07:00
grossmj
76af98404a Drop Python 3.4 and switch to async / await syntax for asyncio. Fixes #1425 2018-10-15 17:05:49 +07:00
grossmj
33e8710495 Merge branch '2.1' into 2.2
# Conflicts:
#	gns3server/compute/docker/docker_vm.py
#	gns3server/controller/compute.py
#	gns3server/controller/gns3vm/__init__.py
#	gns3server/controller/link.py
#	gns3server/controller/project.py
#	gns3server/handlers/api/controller/project_handler.py
#	gns3server/handlers/api/controller/server_handler.py
#	gns3server/utils/asyncio/__init__.py
#	gns3server/utils/asyncio/telnet_server.py
#	gns3server/version.py
#	gns3server/web/web_server.py
#	tests/compute/qemu/test_qemu_vm.py
2018-08-29 15:57:54 +07:00
grossmj
089d25c79d Forbid controller and compute servers to be different versions.
Report last compute server error to clients and display in the server summary.
2018-08-22 16:54:43 +07:00
grossmj
7f72b90b0e The server has now 2 notification streams
* A new one for controller related events (compute, appliance templates etc.)
* The existing one for project related events (links, nodes etc.)
2018-08-16 21:31:57 +07:00
grossmj
45edc40948 Timeout for stream file. 2018-06-10 21:18:16 +07:00
grossmj
6caf38206c Fix tests. 2018-06-07 22:37:29 +07:00
ziajka
b654d78ea6 Endpoint for obtaining direct action on compute 2017-10-13 11:03:56 +02:00
Julien Duponchelle
a4245fcf44
Aiohttp 2.0
Ref #1000
2017-05-17 18:42:17 +02:00
Julien Duponchelle
bfee08459d
Test image sorting
Ref https://github.com/GNS3/gns3-gui/issues/2030
2017-05-05 20:09:51 +02:00
Julien Duponchelle
e06be6729a
Fix streaming test 2017-01-17 09:05:05 +01:00
Julien Duponchelle
81a9b63dbc
Trust user for host binding of link adress 2016-12-13 17:34:41 +01:00
Julien Duponchelle
49315adf79
Do not recurse scan for images in standard image directory
Fix https://github.com/GNS3/gns3-gui/issues/1680
2016-11-28 19:49:50 +01:00
Julien Duponchelle
57e2fd9943
If we can found a common subnet we return the host binding for link
creation

Fix #773
2016-11-10 22:39:16 +01:00
Julien Duponchelle
ca6f014207
Do not connect GNS3 to remote server via 169.254.X.X 2016-11-10 14:46:25 +01:00
Julien Duponchelle
3c5cbebfb4
Fix timeout issues when starting VMware or VBox
Fix https://github.com/GNS3/gns3-gui/issues/1632
2016-11-07 17:34:51 +01:00
Julien Duponchelle
ea1c525181
Fix computes tests 2016-10-27 16:54:05 +02:00
Julien Duponchelle
9799dabb98
Improve timeout management
Fix #741
2016-10-25 14:41:33 +02:00
Julien Duponchelle
106915f419
Return md5sum and filesize in the list of images
Ref https://github.com/GNS3/gns3-gui/issues/1590
2016-10-20 17:24:05 +02:00
Julien Duponchelle
a8ffaa9cb5
If listen on all interface do not return localhost as console
Fix https://github.com/GNS3/gns3-gui/issues/1574
2016-10-17 18:20:29 +02:00
Julien Duponchelle
b9b0feed62
Fix IPV6 server support
Fix #717
2016-10-17 14:10:25 +02:00
Julien Duponchelle
4bbd8938ab
Manage error when GNS3VM failed to start
Fix https://github.com/GNS3/gns3-gui/issues/1446
2016-09-01 15:36:41 +02:00
Julien Duponchelle
edae834e0e
Monitor status of the compute 2016-08-29 17:36:24 +02:00
Julien Duponchelle
bbc1505274
Return what is supported by a compute node
Ref https://github.com/GNS3/gns3-gui/issues/1448
2016-08-29 15:53:10 +02:00
Julien Duponchelle
134fed8fc5
Smart choice of host for UDP link 2016-08-25 19:14:29 +02:00
Julien Duponchelle
bfabf3ddc8
Fix tests about local compute node 2016-08-23 22:40:26 +02:00
Julien Duponchelle
94a262cd46
When importing a project fix the GNS3 version 2016-07-22 11:52:59 +02:00
Julien Duponchelle
9b499dc51e
Export project with the GNS3VM 2016-07-21 20:17:36 +02:00
Julien Duponchelle
7c4c03cf17
If the connection between the controller and compute is closed reopen it 2016-07-20 12:43:23 +02:00
Julien Duponchelle
91ec61b88d
Check topology schema when loading/saving it
Fix #583
2016-07-11 15:36:52 +02:00
Julien Duponchelle
9bf4c22a50
Fix HTTP errors not forwarded from compute to client
Fix #615
2016-07-11 09:33:55 +02:00
Julien Duponchelle
543b423e03
Send compute usage via in the compute.updated notification
Ref https://github.com/GNS3/gns3-gui/issues/1261
2016-06-30 09:55:59 +02:00
Julien Duponchelle
aa5988788d
Strip user from compute in topology and return project filename 2016-06-15 18:22:11 +02:00
Julien Duponchelle
6d36429870
Reload a topology work 2016-06-15 16:26:16 +02:00