diff --git a/.drone.yml b/.drone.yml index 47daeb8..8ac0dcd 100644 --- a/.drone.yml +++ b/.drone.yml @@ -30,6 +30,32 @@ steps: - docker push "$DOCKER_USERNAME/consumer-scheduler" - docker push "$DOCKER_USERNAME/consumer-scheduler:$DRONE_BUILD_NUMBER" +- name: make_docs + image: python:3.8 + commands: + - pip3 install Sphinx sphinx_rtd_theme + - pip3 install -r requirements.txt + - cd docs + - make html + +- name: build_docs + image: docker:stable-dind + volumes: + - name: dockersock + path: /var/run + environment: + DOCKER_USERNAME: + from_secret: DOCKER_USERNAME + DOCKER_PASSWORD: + from_secret: DOCKER_PASSWORD + commands: + - cd docs + - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin + - docker build -t="$DOCKER_USERNAME/consumer-scheduler-docs" . + - docker build -t="$DOCKER_USERNAME/consumer-scheduler-docs:$DRONE_BUILD_NUMBER" . + - docker push "$DOCKER_USERNAME/consumer-scheduler-docs" + - docker push "$DOCKER_USERNAME/consumer-scheduler-docs:$DRONE_BUILD_NUMBER" + - name: slack image: plugins/slack settings: diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..31ce0f0 --- /dev/null +++ b/README.rst @@ -0,0 +1,7 @@ +====================== +P2P Consumer Scheduler +====================== + +Repository for the consumer's scheduler + +Functionality: updates the database of the available consumers periodically diff --git a/app.py b/app.py index ce3a7ff..3162c61 100644 --- a/app.py +++ b/app.py @@ -21,19 +21,24 @@ sentry_sdk.init("https://0a106e104e114bc9a3fa47f9cb0db2f4@sentry.kmlabz.com/10") def main(): + + # set logging preferences logging.basicConfig(filename = '', level = logging.DEBUG) + # connect to redis r = redis.Redis(host = 'localhost', port = 6379, db = 0) + # set initial consumer addresses ip_list = os.environ['INITIAL_SERVERS'].split(',') logging.debug('Get consumer list from environ at first: Done') + # get the dictionary of the currently available consumers consumer_list_redis = json.loads((r.get('consumer_list') or b'{}').decode('utf-8')) logging.debug('Get consumer list from redis at first: Done') temp_dict = { } for ip in ip_list: - try: + # request synchronization response = requests.post(f"http://{ip}/sync", json = { 'uuid': os.environ['LOCAL_UUID'] }) except requests.exceptions.ConnectionError: continue @@ -46,11 +51,13 @@ def main(): logging.debug('Update redis consumers ip list from first answers: Done') while True: logging.debug('Infinite Cycle start : Done') + # get the dictionary of the currently available consumers consumer_list_redis = json.loads((r.get('consumer_list') or b'{}').decode('utf-8')) logging.debug('Get consumer list from redis: Done') for uuid, info in consumer_list_redis.items(): ip = info['ip'] try: + # request synchronization response = requests.post(f"http://{ip}/sync", json = { 'uuid': os.environ['LOCAL_UUID'] }) except requests.exceptions.ConnectionError: continue @@ -58,11 +65,14 @@ def main(): if response.status_code == 200: temp_dict[response.json()['uuid']] = { 'ip': ip } + + # update the dictionary of the currently available consumers consumer_list_redis.update(temp_dict) r.set('consumer_list', json.dumps(consumer_list_redis).encode('utf-8')) logging.debug('Update redis consumer ip list from answers: Done') logging.debug('Waiting for next turn') + # wait for the next update time time.sleep(30) diff --git a/docs/Dockerfile b/docs/Dockerfile new file mode 100644 index 0000000..691c92e --- /dev/null +++ b/docs/Dockerfile @@ -0,0 +1,3 @@ +FROM nginx:latest + +COPY _build/html/ /usr/share/nginx/html \ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..d4bb2cb --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..1e0445d --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,55 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'Consumer Scheduler' +copyright = '2020, GoldenPogacsa Inc.' +author = 'GoldenPogacsa Inc.' + +# The full version, including alpha/beta/rc tags +release = '0.1.0' + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = [] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = [] \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..10efaa5 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,23 @@ +.. Consumer Scheduler documentation master file, created by + sphinx-quickstart on Wed Apr 8 21:57:33 2020. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to Consumer Scheduler's documentation! +============================================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + readme + source/modules + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` +* `Git repository `_ \ No newline at end of file diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000..2119f51 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/readme.rst b/docs/readme.rst new file mode 100644 index 0000000..6b2b3ec --- /dev/null +++ b/docs/readme.rst @@ -0,0 +1 @@ +.. include:: ../README.rst \ No newline at end of file diff --git a/docs/source/app.rst b/docs/source/app.rst new file mode 100644 index 0000000..ceb7f40 --- /dev/null +++ b/docs/source/app.rst @@ -0,0 +1,7 @@ +app module +========== + +.. automodule:: app + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/modules.rst b/docs/source/modules.rst new file mode 100644 index 0000000..7abee4e --- /dev/null +++ b/docs/source/modules.rst @@ -0,0 +1,7 @@ +consumer-scheduler +================== + +.. toctree:: + :maxdepth: 4 + + app