{"id":15442827,"url":"https://github.com/amadeusitgroup/graphdash","last_synced_at":"2025-04-06T04:09:18.957Z","repository":{"id":50222833,"uuid":"62041059","full_name":"AmadeusITGroup/GraphDash","owner":"AmadeusITGroup","description":"A web-based dashboard built on graphs and their metadata.","archived":false,"fork":false,"pushed_at":"2022-07-01T10:33:10.000Z","size":1993,"stargazers_count":282,"open_issues_count":0,"forks_count":18,"subscribers_count":18,"default_branch":"master","last_synced_at":"2024-10-18T13:16:01.224Z","etag":null,"topics":["dashboard","graphs","python","web"],"latest_commit_sha":null,"homepage":"https://amadeusitgroup.github.io/GraphDash/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AmadeusITGroup.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-06-27T08:59:25.000Z","updated_at":"2024-09-26T12:36:46.000Z","dependencies_parsed_at":"2022-08-27T18:50:29.810Z","dependency_job_id":null,"html_url":"https://github.com/AmadeusITGroup/GraphDash","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmadeusITGroup%2FGraphDash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmadeusITGroup%2FGraphDash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmadeusITGroup%2FGraphDash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmadeusITGroup%2FGraphDash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AmadeusITGroup","download_url":"https://codeload.github.com/AmadeusITGroup/GraphDash/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247430869,"owners_count":20937874,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dashboard","graphs","python","web"],"created_at":"2024-10-01T19:30:33.377Z","updated_at":"2025-04-06T04:09:18.938Z","avatar_url":"https://github.com/AmadeusITGroup.png","language":"Python","readme":"GraphDash\n=========\n\n``GraphDash`` is a web-based dashboard built on graphs and their\nmetadata. For example, if you have two graphs in a directory:\n\n.. code:: bash\n\n    $ cd default_graph_dir\n    $ ls\n    graph.svg graph2.svg\n\nThen you can create two metadata files using YAML format, where you can\nconfigure how the graphs will be displayed:\n\n.. code:: bash\n\n    $ cat graph.yaml\n    name: graph.svg\n    family: 'Category 1'\n    title: '*Real serious* graph'\n    text: |\n        The description\n\n    $ cat graph2.yaml\n    name: graph2.svg\n    family: 'Category 2'\n    title: 'Another important graph'\n\nYou may then start the graph dashboard. You will get a nice web\ninterface displaying your graphs, and a search box with autocompletion.\nYou can easily navigate and share your graphs.\n\n.. code:: bash\n\n    $ GraphDash --root .\n    * Running on http://0.0.0.0:5555/ (Press CTRL+C to quit)\n\n.. figure:: https://raw.githubusercontent.com/AmadeusITGroup/GraphDash/master/docs/example.gif\n   :alt: \n\nInstallation\n------------\n\nClone and install (in user space):\n\n.. code:: bash\n\n    git clone https://github.com/AmadeusITGroup/graphdash.git\n    cd graphdash\n    pip install --user .\n\nOr use the Python package:\n\n.. code:: bash\n\n    pip install --user graphdash\n\nLaunch the webapp\n-----------------\n\nFor user-space installation, make sure your ``$PATH`` includes\n``~/.local/bin``.\n\n.. code:: bash\n\n    $ GraphDash -r default_graph_dir\n    * Running on http://0.0.0.0:5555/ (Press CTRL+C to quit)\n\nThe dashboard can be configured with a YAML config file and the\n``-c/--conf`` option:\n\n.. code:: bash\n\n    $ cat docs/graphdash.yaml\n    root: ../default_graph_dir\n    title: \"Example of title ;)\"\n    subtitle: \"Example of subtitle\"\n\n    $ GraphDash -c docs/graphdash.yaml\n    * Running on http://0.0.0.0:5555/ (Press CTRL+C to quit)\n\nYou can generate a template of configuration file:\n\n.. code:: bash\n\n    $ GraphDash -C template.yaml\n\nServe with Gunicorn\n-------------------\n\nIf not already installed on your machine, install ``Gunicorn``:\n\n.. code:: bash\n\n    pip install --user gunicorn setproctitle  # on Fedora you may need to install libffi-devel before\n\nSince you can import the webapp through ``graphdash:app``, you can serve\nit with ``Gunicorn``:\n\n.. code:: bash\n\n    gunicorn -b 0.0.0.0:8888 --pid server.pid graphdash:app\n\nThe configuration file of the webapp can be set with the ``CONF``\nenvironment variable. With ``Gunicorn``, you can pass environment\nvariables to the workers with ``--env``:\n\n.. code:: bash\n\n    gunicorn -b 0.0.0.0:8888 --pid server.pid --env CONF=docs/graphdash.yaml graphdash:app\n\nBut you should *not* use these commands yourself, that is what\n``GraphDashManage`` is for!\n\nGraphDashManage\n---------------\n\n``GraphDashManage`` is used to ``start``, ``stop``, ``restart`` the\ninstances of ``Gunicorn`` serving ``graphdash:app``. It needs a\nconfiguration file in the current directory:\n\n.. code:: bash\n\n    $ cat settings.sh\n    ALL_MODES=(\n       ['prod']=\"docs/graphdash.yaml\"\n       ['test']=\"docs/graphdash.yaml\"\n    )\n    ALL_PORTS=(\n       ['prod']=1234\n       ['test']=5678\n    )\n    WORKERS=3\n\nThen you can manage multiple instances of ``GraphDash`` using\n``Gunicorn`` with:\n\n.. code:: bash\n\n    $ GraphDashManage start prod\n    [INFO] Listening at: http://0.0.0.0:1234\n    [INFO] Booting worker with pid: 30403\n    [INFO] Booting worker with pid: 30404\n    [INFO] Booting worker with pid: 30405\n\n    $ GraphDashManage start test\n    [INFO] Listening at: http://0.0.0.0:5678\n    ...\n\nYou can generate a template of settings:\n\n.. code:: bash\n\n    $ GraphDashManage template \u003e template.sh # to be moved to settings.sh\n\nWebapp configuration file\n-------------------------\n\nPossible entries (everything is optional):\n\n-  ``root``: the root directory of the graphs\n-  ``families``: path to the families metadata file (optional)\n-  ``title``: the title of the webapp\n-  ``subtitle``: the subtitle of the webapp\n-  ``placeholder``: the default text in the search field\n-  ``header``: an optional message at the top (markdown syntax)\n-  ``footer``: an optional message at the bottom (markdown syntax)\n-  ``showfamilynumbers``: a boolean to toggle family numbering (default\n   is true)\n-  ``showgraphnumbers``: a boolean to toggle graph numbering (default is\n   true)\n-  ``theme``: change css theme (default is dark)\n-  ``keep``: the proportion of common words kept for autocompletion\n-  ``logfile``: change default log file of the webapp\n-  ``raw``: when loading, look for all graphs and ignore metadata\n-  ``verbose``: a boolean indicating verbosity when loading application\n-  ``debug``: debug mode (enable Grunt livereload, enable Flask debug\n   mode)\n-  ``headless``: headless mode (only search is available, no page is\n   rendered)\n-  ``port``: when launched with Flask development server only, port\n\nGraph metadata\n--------------\n\nSeveral attributes are supported:\n\n-  ``name``: the path to the graph\n-  ``title``: title of the graph, recommended for display purposes\n   (markdown syntax)\n-  ``family``: the subsection in which the graph is\n-  ``index``: an optional list of keywords describing the graph (useful\n   for search feature)\n-  ``text``: an optional description of the graph (markdown syntax)\n-  ``pretext``: an optional message appearing before the graph (markdown\n   syntax)\n-  ``file``: optional path to the raw data\n-  ``export``: optional path to the exportable graph (for example, a PNG\n   file)\n-  ``rank``: integer, optional value used to change graphs order\n   (default uses titles)\n-  ``showtitle``: a boolean to toggle title display for the graph\n   (default is false)\n-  ``labels``: a list of labels (like ``'new'``) which will be rendered\n   in the UI as colored circles\n-  ``other``: other metadata not used by ``GraphDash``, but may be\n   needed by other things reading the metadata\n\nNote that if the ``name`` attribute is missing, the graph will not be\nshown and the text will be displayed anyway, like a blog entry.\n\nFamily metadata\n---------------\n\nYou may put a ``.FAMILIES.yaml`` file at the root of the graph\ndirectory. This file may contain metadata for families. It should be a\nYAML list:\n\n.. code:: yaml\n\n    - family: chairs\n      rank : 0\n    - family: tables\n      rank : 1\n      text: This is a description\n      alias: This text will appear instead of \"tables\"\n      labels: new\n\nEach element of the list should be a dict containing:\n\n-  ``family``: the family considered\n-  ``rank``: integer, optional value used to change families order\n   (default uses family name)\n-  ``text``: an optional description of the family (markdown syntax)\n-  ``alias``: an optional name who may be longer than the one in the url\n   (useful to build nice urls)\n-  ``labels``: a list of labels (like ``new``) which will be rendered in\n   the UI as colored circles\n\nAvailable labels are ``new``, ``update``, ``bugfix``, ``warning``,\n``error``, ``ongoing``, ``obsolete``. You may give other labels which\nwill be rendered with defaults colors. For customization, you may\nspecify your own labels with a dict syntax:\n\n.. code:: yaml\n\n    labels:\n    - name: newlabel\n      color: white\n      text_color: black\n      text: \"NEW LABEL\"\n      tooltip: null\n\nDevelopment\n-----------\n\nIf you wish to contribute, you need ``Grunt`` to generate new css/js\nfiles from sass/coffee source files.\n\n.. code:: bash\n\n    npm install --no-bin-links # may need to repeat\n    grunt\n\nDebugging can be made with source map files for browser supporting them\nin their debugging tools. If not, the ``Gruntfile.js`` enables an option\nto generate non-minified assets.\n\n.. code:: bash\n\n    grunt --dev\n\nWith the ``debug`` mode enabled, Grunt will use the livereload mechanism\nto reload the browser if any file has changed (and Flask debug mode will\nreload the server as well).\n\n.. code:: bash\n\n    GraphDash --debug \u0026 # or python -m graphdash\n    grunt watch\n\nIf you used ``Gunicorn`` with a PID file, Grunt will automatically\nreload it if any Python files change.\n\n.. code:: bash\n\n    gunicorn -b 0.0.0.0:8888 --pid server.pid graphdash:app \u0026\n    grunt watch\n\nYou can use ``tox`` build packages and run tests.\n\n.. code:: bash\n\n    tox\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famadeusitgroup%2Fgraphdash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famadeusitgroup%2Fgraphdash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famadeusitgroup%2Fgraphdash/lists"}