2024-02-23 08:55:32 +00:00
.. only :: comment
2025-01-02 15:05:06 +00:00
© Crown-owned copyright 2025, Defence Science and Technology Laboratory UK
2024-02-23 08:55:32 +00:00
2024-02-23 16:49:01 +00:00
.. _WebServer:
2024-02-23 08:55:32 +00:00
WebServer
2024-02-23 16:49:01 +00:00
#########
2024-02-23 08:55:32 +00:00
Provides a Web Server simulation by extending the base Service class.
Key capabilities
2024-02-23 16:49:01 +00:00
================
2024-02-23 08:55:32 +00:00
- Simulates a web server with the capability to also request data from a database
- Allows the emulation of HTTP requests between client (e.g. a web browser) and server
- GET request sends a get all users request to the database server and returns an HTTP 200 status if the database is responsive
- Leverages the Service base class for install/uninstall, status tracking, etc.
Usage
2024-02-23 16:49:01 +00:00
=====
2024-02-23 08:55:32 +00:00
- Install on a Node via the `` SoftwareManager `` to start the `WebServer` .
2025-03-12 14:04:46 +00:00
- Service runs on HTTP port 80 by default.
2024-02-23 16:49:01 +00:00
- A :ref: `DatabaseClient` must be installed and configured on the same node as the `` WebServer `` if it is intended to send a users request i.e.
in the case that the :ref: `WebBrowser` sends a request with users in its request path, the `` WebServer `` will utilise the `` DatabaseClient `` to send a request to the `` DatabaseService ``
2024-02-23 08:55:32 +00:00
Implementation
2024-02-23 16:49:01 +00:00
==============
2024-02-23 08:55:32 +00:00
- HTTP request uses a `` HttpRequestPacket `` object
- HTTP response uses a `` HttpResponsePacket `` object
- Extends Service class for integration with `` SoftwareManager `` .
2024-02-23 16:49:01 +00:00
Examples
========
Python
""""""
.. code-block :: python
from primaite.simulator.network.hardware.nodes.host.server import Server
from primaite.simulator.system.services.web_server.web_server import WebServer
# Create Server
2025-02-27 18:16:45 +00:00
server = Server(config = {
"hostname":"server",
"ip_address":"192.168.2.2",
"subnet_mask":"255.255.255.0",
"default_gateway":"192.168.1.1",
"start_up_duration":0,
}
2024-02-23 16:49:01 +00:00
)
server.power_on()
# Install WebServer on server
server.software_manager.install(WebServer)
2025-02-10 14:39:28 +00:00
web_server: WebServer = server.software_manager.software.get("web-server")
2024-02-23 16:49:01 +00:00
web_server.start()
Via Configuration
"""""""""""""""""
.. code-block :: yaml
simulation:
2025-03-13 11:36:24 +00:00
network:
nodes:
- hostname: example_server
type: server
...
services:
- type: web-server
2024-02-23 16:49:01 +00:00
2024-09-04 20:46:35 +01:00
`` Common Attributes ``
2024-09-05 11:23:52 +01:00
^^^^^^^^^^^^^^^^^^^^^
2024-02-23 16:49:01 +00:00
2024-09-04 20:46:35 +01:00
See :ref: `Common Configuration`