6. Risultati ottenuti

Al termine del periodo di sviluppo, il software ha soddisfatto tutti i requisiti prefissati.

In particolare:

  • tutte le funzionalità desiderate sono state sviluppate, raggiungendo la feature parity con JupyterHub;

    • il software ha ampio spazio per eventuali estensioni grazie alle numerosi classi astratte sviluppate;

    • l'isolamento tra notebook e l'autenticazione all'accesso è stata realizzata, garantendo la sicurezza dei dati;

    • l'interfaccia web è sufficientemente intuitiva per permetterne un utilizzo e apprendimento autonomo;

    • è possibile personalizzare i dettagli del software con il brand della propria istituzione;

    • più utenti possono collaborare simultaneamente all'interno dello stesso notebook;

    • il software è stato pubblicato su GitHub come progetto open source;

    • da dispositivi mobili, l'interfaccia grafica di Sophon risulta interamente utilizzabile, raggiungendo il requisito di responsività, anche se la modifica di notebook computazionali con JupyterLab potrebbe risultare difficile su schermi con risoluzione molto ridotta;

    • l'interfaccia web soddisfa i requisiti di accessibilità fissati;

  • il software è sufficientemente stabile per l'utilizzo in produzione, permettendone il suo utilizzo all'interno dell'Università;

  • le istruzioni per l'installazione sono state scritte, permettendo ad altri interessati di installare Sophon.

6.1. Stato finale del modulo backend

Il modulo backend terminato espone una web API all'indirizzo api.BASE_DOMAIN con i seguenti endpoints.

POST /api/auth/token/

Effettua l'accesso in cambio di un token di autenticazione.

JSON Parameters
  • username (string) -- Username dell'utente.

  • password (string) -- Password dell'utente.

Status Codes
POST /api/auth/session/

Effettua l'accesso, salvando i dati di autenticazione nei cookie.

JSON Parameters
  • username (string) -- Username dell'utente.

  • password (string) -- Password dell'utente.

Status Codes
ANY /api/core/groups/

Accede ai gruppi di ricerca, permettendone la visualizzazione (GET), la creazione (POST), la modifica (PUT) e l'eliminazione (DELETE), a condizione che si sia autorizzati ad effettuare l'operazione.

JSON Parameters
  • slug (string) -- Slug del gruppo di ricerca.

  • name (string) -- Nome del gruppo di ricerca.

  • description (string) -- Descrizione del gruppo di ricerca.

  • access (string) -- Modalità di accesso al gruppo.

  • owner (integer) -- ID del creatore del gruppo.

  • members (integer[]) -- Elenco dei membri degli ID dei membri del gruppo.

Status Codes
GET /api/core/users/by-id/

Accede agli utenti dell'istanza Sophon usando il loro ID come chiave, permettendone la visualizzazione.

JSON Parameters
  • id (integer) -- ID dell'utente.

  • username (string) -- Username dell'utente.

  • first_name (string) -- Nome dell'utente (non utilizzato se non specificato manualmente nell'interfaccia di amministrazione).

  • last_name (string) -- Cognome dell'utente (non utilizzato se non specificato manualmente nell'interfaccia di amministrazione).

  • email (string) -- Email dell'utente (non utilizzata se non specificata manualmente nell'interfaccia di amministrazione).

Status Codes
  • 200 OK -- Operazione effettuata.

GET /api/core/users/by-username/

Accede agli utenti dell'istanza Sophon usando il loro username come chiave, permettendone la visualizzazione.

JSON Parameters
  • id (string) -- ID dell'utente.

  • username (string) -- Username dell'utente.

  • first_name (string) -- Nome dell'utente (non utilizzato se non specificato manualmente nell'interfaccia di amministrazione).

  • last_name (string) -- Cognome dell'utente (non utilizzato se non specificato manualmente nell'interfaccia di amministrazione).

  • email (string) -- Email dell'utente (non utilizzata se non specificata manualmente nell'interfaccia di amministrazione).

Status Codes
  • 200 OK -- Operazione effettuata.

ANY /api/projects/by-slug/

Accede a tutti i progetti di ricerca dell'istanza Sophon, permettendone la visualizzazione (GET), la creazione (POST), la modifica (PUT) e l'eliminazione (DELETE), a condizione che si sia autorizzati ad effettuare l'operazione.

JSON Parameters
  • slug (string) -- Slug del progetto.

  • name (string) -- Nome del progetto.

  • description (string) -- Descrizione del progetto.

  • visibility (string) -- Visibilità del progetto.

  • group (string) -- Slug del gruppo a cui appartiene il progetto.

Status Codes
ANY /api/projects/by-group/(str: group_slug)/

Accede ai progetti di ricerca appartenenti a un certo gruppo, permettendone la visualizzazione (GET), la creazione (POST), la modifica (PUT) e l'eliminazione (DELETE), a condizione che si sia autorizzati ad effettuare l'operazione.

Parameters
  • group_slug -- Slug del gruppo di cui si vogliono ottenere i progetti.

JSON Parameters
  • slug (string) -- Slug del progetto.

  • name (string) -- Nome del progetto.

  • description (string) -- Descrizione del progetto.

  • visibility (string) -- Visibilità del progetto.

  • group (string) -- Slug del gruppo a cui appartiene il progetto.

Status Codes
ANY /api/notebooks/by-slug/

Accede a tutti i notebook dell'istanza Sophon, permettendone la visualizzazione (GET), la creazione (POST), la modifica (PUT) e l'eliminazione (DELETE), a condizione che si sia autorizzati ad effettuare l'operazione.

Nota

Questo endpoint non restituisce i dettagli di connessione al notebook; a tale scopo, è necessario utilizzare ANY /api/notebooks/by-project/(str:project_slug)/.

JSON Parameters
  • slug (string) -- Slug del notebook.

  • name (string) -- Nome del notebook.

  • is_running (boolean) -- Se il notebook è avviato oppure no.

  • locked_by (integer) -- ID dell'utente che ha bloccato il notebook.

  • container_image (string) -- Il nome dell'immagine del notebook.

  • project (string) -- Slug del progetto a cui appartiene il notebook.

Status Codes
ANY /api/notebooks/by-project/(str: project_slug)/

Accede ai notebook appartenenti a un certo progetto, permettendone la visualizzazione (GET), la creazione (POST), la modifica (PUT) e l'eliminazione (DELETE), a condizione che si sia autorizzati ad effettuare l'operazione.

JSON Parameters
  • slug (string) -- Slug del notebook.

  • name (string) -- Nome del notebook.

  • is_running (boolean) -- Se il notebook è avviato oppure no.

  • locked_by (integer) -- ID dell'utente che ha bloccato il notebook.

  • container_image (string) -- Il nome dell'immagine del notebook.

  • project (string) -- Slug del progetto a cui appartiene il notebook.

  • jupyter_token (string) -- Token per l'autenticazione sul modulo Jupyter.

  • legacy_notebook_url (string) -- URL per la connessione all'interfaccia legacy "Jupyter Notebook" del notebook.

  • lab_url (string) -- URL per la connessione all'interfaccia JupyterLab del notebook.

Status Codes

Pagina di amministrazione esposta

In aggiunta alla web API, Sophon espone la pagina di amministrazione Django al seguente URL.

GET /admin/

La pagina di amministrazione Django, personalizzata per Sophon.

Status Codes

La prima pagina richiede l'accesso con credenziali di un superutente.

../../_images/admin_login.png

Figura 6.1.1 Schermata di login della pagina di amministrazione.

Una volta effettuato l'accesso, all'interno della pagina è possibile modificare ogni genere di entità presente nell'istanza.

../../_images/admin_resources.png

Figura 6.1.2 Elenco delle entità presenti all'interno dell'istanza.

../../_images/admin_list.png

Figura 6.1.3 Elenco dei notebook presenti all'interno dell'istanza di dimostrazione.

../../_images/admin_edit.png

Figura 6.1.4 Pagina di modifica di uno dei notebook dell'istanza di dimostrazione.

../../_images/admin_details.png

Figura 6.1.5 Pagina di modifica dei dettagli dell'istanza Sophon.

6.2. Stato finale del modulo frontend

Il modulo frontend terminato espone una SPA all'indirizzo BASE_DOMAIN.

../../_images/frontend_instance.png

Figura 6.2.1 Pagina di selezione istanza.

../../_images/frontend_login.png

Figura 6.2.2 Pagina di login all'istanza Sophon di dimostrazione, che utilizza il tema "Royal Blue".

../../_images/frontend_group.png

Figura 6.2.3 Pagina di selezione e creazione gruppi di ricerca.

../../_images/frontend_project.png

Figura 6.2.4 Pagina di selezione e creazione progetti di ricerca.

../../_images/frontend_notebook.png

Figura 6.2.5 Pagina di selezione, creazione e avvio notebook.

../../_images/frontend_nbdetails.png

Figura 6.2.6 Pagina di dettagli di un notebook, che permette l'accesso al modulo Jupyter.

6.3. Stato finale del modulo Jupyter

Il modulo Jupyter terminato espone un'istanza collaborativa di JupyterLab all'indirizzo NOTEBOOK_SLUG.BASE_DOMAIN.

../../_images/jupyter_collab.png

6.4. Stato finale del modulo proxy

Il modulo proxy terminato effettua correttamente proxying tra gli altri moduli.