83 lines
2.3 KiB
ReStructuredText
83 lines
2.3 KiB
ReStructuredText
.. only:: comment
|
|
|
|
© Crown-owned copyright 2025, Defence Science and Technology Laboratory UK
|
|
|
|
.. _WebServer:
|
|
|
|
WebServer
|
|
#########
|
|
|
|
Provides a Web Server simulation by extending the base Service class.
|
|
|
|
Key capabilities
|
|
================
|
|
|
|
- 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
|
|
=====
|
|
|
|
- Install on a Node via the ``SoftwareManager`` to start the `WebServer`.
|
|
- Service runs on HTTP port 80 by default. (TODO: HTTPS)
|
|
- 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``
|
|
|
|
Implementation
|
|
==============
|
|
|
|
- HTTP request uses a ``HttpRequestPacket`` object
|
|
- HTTP response uses a ``HttpResponsePacket`` object
|
|
- Extends Service class for integration with ``SoftwareManager``.
|
|
|
|
|
|
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
|
|
server = Server(
|
|
hostname="server",
|
|
ip_address="192.168.2.2",
|
|
subnet_mask="255.255.255.0",
|
|
default_gateway="192.168.1.1",
|
|
start_up_duration=0,
|
|
)
|
|
server.power_on()
|
|
|
|
# Install WebServer on server
|
|
server.software_manager.install(WebServer)
|
|
web_server: WebServer = server.software_manager.software.get("WebServer")
|
|
web_server.start()
|
|
|
|
Via Configuration
|
|
"""""""""""""""""
|
|
|
|
.. code-block:: yaml
|
|
|
|
simulation:
|
|
network:
|
|
nodes:
|
|
- ref: example_server
|
|
hostname: example_server
|
|
type: server
|
|
...
|
|
services:
|
|
- ref: web_server
|
|
type: WebServer
|
|
|
|
|
|
``Common Attributes``
|
|
^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
See :ref:`Common Configuration`
|