method-development-visualizer-backend

ubuntu-cmake-compile - Odpowiada na pytanie czy projekt się kompiluje

ubuntu-cmake-compile-and-test - Odpowiada na pytanie czy projekt przechodzi testy

codecov - Pokazuje % pokrycia testami kodów źródłowych w /src

Opis projektu

Projektem jest aplikacja pozwalająca na tworzenie grafu obrazującego rozwój algorytmów sztucznej inteligencji. Aplikacja umożliwia dodawanie/usuwanie ręczne elementów grafu oraz oferuje sposób na dodawania elementów automatycznie na podstawie ich nazwy np. ilSHADE jest być podłączany do węzła SHADE. Interfejs aplikacji jest graficzny (przeglądarkowy) a logika operacji na grafie jest zaimplementowana w C++.

Instalacja manualna

Zależności

  • Boost 1.71+, wraz z skompilowanymi:
    • Boost.Python
    • Boost.Test
  • CMake
  • python3 wraz z:
    • python3-dev
    • pip3
    • pipenv
    • Django (instalowane później w pipenv)

Instalacja wszystkich zależności:

sudo apt-get install libboost-all-dev # Boost
sudo apt-get install cmake # cmake
sudo apt-get install python3-dev # python3-dev
sudo apt-get install python3-pip # pip3
pip3 install pipenv # pipenv

Uwaga, na dzień dzisiejszy libboost-all-dev zainstaluje Boost 1.71 jedynie na ubuntu 20.04 z aktualnym apt-get.

Sposob kompilacji części C++

Przy pomocy cmake:

cd methodDevelopment ; mkdir build ; cd build ; cmake .. ; make

Alternatywnie w celu wygenerowania testów

cd methodDevelopment ; mkdir build ; cd build ; cmake -D TEST:BOOL=TRUE .. ; make
# uruchomienie testów
ctest

Istnieje jeszcze trzecia opcja generująca dodatkowo pliki coverage, wymaga ona: cmake -D TEST:BOOL=TRUE -D ENABLE_COVERAGE:BOOL=TRUE ..

Przygotowanie wirtualnego środowiska Pythona

W katalogu projektu:

cd web
pipenv install --dev
pipenv shell
# następnie wewnąrz wirtualnej powłoki:
python3 manage.py runserver

Po wykonaniu powyższych kroków, poniższy adres powinien zwrócić przykładową strukturę (GET):

Powinien on zwrócić dane w formacie:

{
    "nodes": [
        {
            "name": "DE",
            "description": "Opis algorytmu DE",
            "parent": "",
            "aliases": [
                "de",
                "De",
                "De."
            ]
        },
        {
            "name": "SHADE",
            "description": "Opis algorytmu SHADE",
            "parent": "DE",
            "aliases": [
                "Shade",
                "SHA-DE"
            ]
        }
    ]
}

Lista wszystkich endpointów:

  • api/graph/ (GET) - zwraca strukturę grafu aktualnie znajdującej się w bazie danych w formacie JSON.
  • api/node/<str:name>/
    • GET - zwraca informacje o podanym węźle w formacie JSON.
    • DELETE - zwraca informacje o podanym węźle w formacie JSON.
  • api/add/manual/ (POST) - Dodaję węzeł do struktury grafu.
  • api/add/auto/ (POST) - Dodaję węzeł do struktury grafu automatycznie dedukując rodzica na podstawie nazwy.

Reqesty do endpointów w api/add/ wymagają ustawionych nagłówków X-CSRFToken i Cookie.

Format body dla reqestów do endpointów w api/add/

{
    "name": "JADE",
    "description": "Opis algorytmu JADE",
    "parent": "DE",
    "aliases": ["jade", "ja-de"]
}

Uwaga, część kodu źródłowego części Python została wygenerowana przez Django. Wykorzystane zostały komendy:

django-admin startproject web_config .
python3 manage.py startapp web_api

Intalacja przy użyciu Docker

W razie problemów z instalacją manualną gotową aplikację można zainstalować za pomocą obrazu ianczyko/method-development-visualizer-backend.

docker run -i -p 8000:8000/tcp -t --entrypoint /bin/bash ianczyko/method-development-visualizer-backend

# następnie wewnątrz powłoki kontenera (uruchomienie serwera Django)
cd web
pipenv run python3 manage.py runserver

Frontend

Po skonfigurowaniu backendu, można uruchomić przeglądarkowy interfejs aplikacji, który pobiera dane z endpointów wyżej opisanego bacendu i wyświetla je z pomocą biblioteki cytoscape.js. Po naciśnięciu na węzeł wyświetlają się jego szczegółowe informacje.

Uruchomienie interfejsu wymaga otworzenia client/index.html w przeglądarce.