Commit cd7a1478 authored by Dimitrios J. Vergados's avatar Dimitrios J. Vergados
Browse files

Seems complete

parent b0be55b0
Loading
Loading
Loading
Loading
+109 −18
Original line number Diff line number Diff line
@@ -111,7 +111,7 @@ client, χρησιμοποιώντας REST API, το οποίο θα οριστ

  ```json
  {
    "input_numbers": [ 1, 4, 6, 10, 20]
    "input_numbers": [ 4, 6, 10, 20]
  }
  ```

@@ -123,9 +123,6 @@ client, χρησιμοποιώντας REST API, το οποίο θα οριστ
  {
    "result": [
      {
        "input_number": 1,
        "prime_factors": []
      },{
        "input_number": 4,
        "prime_factors": [2, 2]
      },{
@@ -533,27 +530,121 @@ async def primes(request_object: RequestObjet) -> ResponseObject:

![Hard-coded απάντηση από το server \label{fig:hard_coded}](Screenshot 2025-01-22 at 08-48-00 FastAPI - Swagger UI.png)

### Υλοποίηση συνάρτησης πρώτων 
### Υλοποίηση συνάρτησης υπολογισμού πρώτων παραγόντων

Μια συνάρτηση υπολογισμού πρώτων παραγόντων είναι η παρακάτω:

```python
def prime_factors(number: int):
    result = []
    i = 2
    while i <= number:
        if number % i == 0:
            result += [i]
            number //= i
        else:
            i+=1
    return result
```

Καλούμε τη συνάρτηση από τη συνάρτηση `primes`:

```python
@app.post("/primes/")
async def primes(request_object: RequestObjet) -> ResponseObject:
    return ResponseObject(
        result=[
            ResponseItem(
                input_number=number,
                prime_factors=prime_factors(number)
            )
            for number in request_object.input_numbers
        ]
    )
```

Τώρα αν ξαναστείλου το request πρέπει να πάρουμε τη σωστή απάντηση (Εικόνα&nbsp;\ref{fig:correct})

![Παράδεγμα ορθής απάντησης από το server \label{fig:correct}](Screenshot 2025-01-22 at 09-19-27 FastAPI - Swagger UI.png)

## Δημιουργία του client

Δημιουργούμε ένα νέο python αρχείο με όνομα `client.py`, με τα ακόλουθα
περιεχόμενα:

```python
import requests
import json
import sys

api_url = "http://localhost:8000/primes"

obj = {'input_numbers': [int(n) for n in sys.argv[1:]]}

response = requests.post(api_url, json=obj)
result = response.json()

## Δημιουργία του web client
print(json.dumps(result, indent=2))
```

Ενώ ο server τρέχει, εκετελούμε το αρχείο με την ακόλουθη εντολή:

```bash
python client.py 4 50 24 95
```

Θα πρέπει να δούμε αποτέλεσμα όπως το παρακάτω:

```json
$ python client.py 4 50 24 95
{
  "result": [
    {
      "input_number": 4,
      "prime_factors": [
        2,
        2
      ]
    },
    {
      "input_number": 50,
      "prime_factors": [
        2,
        5,
        5
      ]
    },
    {
      "input_number": 24,
      "prime_factors": [
        2,
        2,
        2,
        3
      ]
    },
    {
      "input_number": 95,
      "prime_factors": [
        5,
        19
      ]
    }
  ]
}
```

# Υποβολή εργασίας

Το τελικό παραδοτέο της εργασίας είναι ένα `zip` αρχείο, που περιλαμβάνει
τουλάχιστον:

1. Τον κώδικα του σεναρίου που εκτελέστηκε
2. Τα trace files που δημιουργήθηκαν από την προσομοίωση.
3. Ένα σύντομο report που να περιγράφει το σενάριο της προσομοίωσης και να
   παρουσιάζει εν συντομία τα αποτελέσματα με διαγράμματα.
1. Τον κώδικα του σεναρίου που εκτελέστηκε (χωρίς τον υποκατάλογο `venv`)
2. Ένα σύντομο report που να περιγράφει τη διαδικασία που εκτελέσατε για
   την υλοποίηση της άσκησης, με παραδείγματα κώδικα και screenshots

## Bonus points

1. Μελέτη της επίδρασης περισσότερων παραμέτρων στην επίδοση συστήματος
2. Υποστήριξη πρωτοκόλλου QUIC <https://github.com/signetlabdei/quic-ns-3>
3. Τροποποίηση του σεναρίου για διαφορετικές τοπολογίες
4. Βελτιστοποίηση του αλγορίθμου προσαρμογής (adaptation algorithm) για τις
   συνθήκες 5G ή και QUIC.

# Βιβλιογραφία
1. Ενσωμάτωση documentation strings στο UI
2. Επαλήθευση της ορθής δομής των request και  response από το client
3. Υλοποίηση μηχανισμού authentication για το API
+64.3 KiB
Loading image diff...
+41.5 KiB (588 KiB)

File changed.

No diff preview for this file type.