├── .babelrc ├── .dockerignore ├── .gitignore ├── .nojekyll ├── AUTHORS.md ├── CONTRIBUTING.md ├── DEVELOPMENT.md ├── Dockerfile ├── ISSUE_TEMPLATE.md ├── LICENSE.md ├── MANIFEST.in ├── PULL_REQUEST_TEMPLATE.md ├── README.md ├── TERMS.md ├── __init__.py ├── application.py ├── deployment ├── gunicorn.conf ├── logging.conf └── supervisord.conf ├── docs ├── .buildinfo ├── .doctrees │ ├── developer-guide.doctree │ ├── developers.doctree │ ├── environment.pickle │ ├── faq.doctree │ ├── index.doctree │ ├── installation.doctree │ ├── page-1.doctree │ ├── pymethod.doctree │ ├── rest-api.doctree │ ├── table-with-code.doctree │ └── user-guide.doctree ├── .nojekyll ├── CNAME ├── _modules │ ├── elastichq │ │ ├── api │ │ │ ├── clusters.html │ │ │ └── status.html │ │ ├── common │ │ │ ├── api_response.html │ │ │ └── exceptions.html │ │ ├── model │ │ │ └── ClusterModel.html │ │ └── service │ │ │ └── ClusterService.html │ └── index.html ├── _sources │ ├── developer-guide.txt │ ├── developers.txt │ ├── faq.txt │ ├── index.txt │ ├── installation.txt │ ├── page-1.txt │ ├── pymethod.txt │ ├── rest-api.txt │ ├── table-with-code.txt │ └── user-guide.txt ├── _static │ ├── ajax-loader.gif │ ├── basic.css │ ├── comment-bright.png │ ├── comment-close.png │ ├── comment.png │ ├── css │ │ ├── bootstrap-theme.min.css │ │ └── bootstrap.min.css │ ├── doctools.js │ ├── down-pressed.png │ ├── down.png │ ├── empty.file │ ├── file.png │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ ├── open-sans │ │ │ ├── fonts │ │ │ │ ├── OpenSans-Bold-webfont.eot │ │ │ │ ├── OpenSans-Bold-webfont.svg │ │ │ │ ├── OpenSans-Bold-webfont.ttf │ │ │ │ ├── OpenSans-Bold-webfont.woff │ │ │ │ ├── OpenSans-BoldItalic-webfont.eot │ │ │ │ ├── OpenSans-BoldItalic-webfont.svg │ │ │ │ ├── OpenSans-BoldItalic-webfont.ttf │ │ │ │ ├── OpenSans-BoldItalic-webfont.woff │ │ │ │ ├── OpenSans-ExtraBold-webfont.eot │ │ │ │ ├── OpenSans-ExtraBold-webfont.svg │ │ │ │ ├── OpenSans-ExtraBold-webfont.ttf │ │ │ │ ├── OpenSans-ExtraBold-webfont.woff │ │ │ │ ├── OpenSans-ExtraBoldItalic-webfont.eot │ │ │ │ ├── OpenSans-ExtraBoldItalic-webfont.svg │ │ │ │ ├── OpenSans-ExtraBoldItalic-webfont.ttf │ │ │ │ ├── OpenSans-ExtraBoldItalic-webfont.woff │ │ │ │ ├── OpenSans-Italic-webfont.eot │ │ │ │ ├── OpenSans-Italic-webfont.svg │ │ │ │ ├── OpenSans-Italic-webfont.ttf │ │ │ │ ├── OpenSans-Italic-webfont.woff │ │ │ │ ├── OpenSans-Light-webfont.eot │ │ │ │ ├── OpenSans-Light-webfont.svg │ │ │ │ ├── OpenSans-Light-webfont.ttf │ │ │ │ ├── OpenSans-Light-webfont.woff │ │ │ │ ├── OpenSans-LightItalic-webfont.eot │ │ │ │ ├── OpenSans-LightItalic-webfont.svg │ │ │ │ ├── OpenSans-LightItalic-webfont.ttf │ │ │ │ ├── OpenSans-LightItalic-webfont.woff │ │ │ │ ├── OpenSans-Regular-webfont.eot │ │ │ │ ├── OpenSans-Regular-webfont.svg │ │ │ │ ├── OpenSans-Regular-webfont.ttf │ │ │ │ ├── OpenSans-Regular-webfont.woff │ │ │ │ ├── OpenSans-Semibold-webfont.eot │ │ │ │ ├── OpenSans-Semibold-webfont.svg │ │ │ │ ├── OpenSans-Semibold-webfont.ttf │ │ │ │ ├── OpenSans-Semibold-webfont.woff │ │ │ │ ├── OpenSans-SemiboldItalic-webfont.eot │ │ │ │ ├── OpenSans-SemiboldItalic-webfont.svg │ │ │ │ ├── OpenSans-SemiboldItalic-webfont.ttf │ │ │ │ └── OpenSans-SemiboldItalic-webfont.woff │ │ │ └── stylesheet.css │ │ └── source-serif-pro │ │ │ ├── EOT │ │ │ ├── SourceSerifPro-Black.eot │ │ │ ├── SourceSerifPro-Bold.eot │ │ │ ├── SourceSerifPro-ExtraLight.eot │ │ │ ├── SourceSerifPro-Light.eot │ │ │ ├── SourceSerifPro-Regular.eot │ │ │ └── SourceSerifPro-Semibold.eot │ │ │ ├── LICENSE.txt │ │ │ ├── OTF │ │ │ ├── SourceSerifPro-Black.otf │ │ │ ├── SourceSerifPro-Bold.otf │ │ │ ├── SourceSerifPro-ExtraLight.otf │ │ │ ├── SourceSerifPro-Light.otf │ │ │ ├── SourceSerifPro-Regular.otf │ │ │ └── SourceSerifPro-Semibold.otf │ │ │ ├── README.md │ │ │ ├── ReadMe.html │ │ │ ├── SourceSerifProReadMe.html │ │ │ ├── TTF │ │ │ ├── SourceSerifPro-Black.ttf │ │ │ ├── SourceSerifPro-Bold.ttf │ │ │ ├── SourceSerifPro-ExtraLight.ttf │ │ │ ├── SourceSerifPro-Light.ttf │ │ │ ├── SourceSerifPro-Regular.ttf │ │ │ └── SourceSerifPro-Semibold.ttf │ │ │ ├── WOFF │ │ │ ├── OTF │ │ │ │ ├── SourceSerifPro-Black.otf.woff │ │ │ │ ├── SourceSerifPro-Bold.otf.woff │ │ │ │ ├── SourceSerifPro-ExtraLight.otf.woff │ │ │ │ ├── SourceSerifPro-Light.otf.woff │ │ │ │ ├── SourceSerifPro-Regular.otf.woff │ │ │ │ └── SourceSerifPro-Semibold.otf.woff │ │ │ └── TTF │ │ │ │ ├── SourceSerifPro-Black.ttf.woff │ │ │ │ ├── SourceSerifPro-Bold.ttf.woff │ │ │ │ ├── SourceSerifPro-ExtraLight.ttf.woff │ │ │ │ ├── SourceSerifPro-Light.ttf.woff │ │ │ │ ├── SourceSerifPro-Regular.ttf.woff │ │ │ │ └── SourceSerifPro-Semibold.ttf.woff │ │ │ ├── bower.json │ │ │ └── source-serif-pro.css │ ├── guzzle.css │ ├── img │ │ ├── footer_version_1.png │ │ ├── footer_version_2.png │ │ ├── login.png │ │ ├── main_dashboard.png │ │ └── screenie.png │ ├── jquery-1.11.1.js │ ├── jquery.js │ ├── jquery.min.map │ ├── js │ │ ├── bootstrap.js │ │ └── bootstrap.min.js │ ├── minus.png │ ├── plus.png │ ├── pygments.css │ ├── searchtools.js │ ├── underscore-1.3.1.js │ ├── underscore-1.3.1.js~HEAD │ ├── underscore-1.3.1.js~develop │ ├── underscore.js │ ├── up-pressed.png │ ├── up.png │ └── websupport.js ├── developer-guide.html ├── developers.html ├── faq.html ├── genindex.html ├── http-routingtable.html ├── index.html ├── installation.html ├── objects.inv ├── page-1.html ├── py-modindex.html ├── pymethod.html ├── rest-api.html ├── search.html ├── searchindex.js ├── source │ ├── _templates │ │ └── globaltoc.html │ ├── conf.py │ ├── developer-guide.rst │ ├── faq.rst │ ├── index.rst │ ├── installation.rst │ ├── rest-api.rst │ ├── rest-api.rst.old │ └── static │ │ └── empty.file ├── table-with-code.html └── user-guide.html ├── elastichq ├── __init__.py ├── api │ ├── __init__.py │ ├── clusters.py │ ├── diagnostics.py │ ├── endpoints.py │ ├── hq.py │ ├── indices.py │ ├── nodes.py │ ├── query.py │ ├── rest.py │ ├── snapshot.py │ ├── socket.py │ └── status.py ├── common │ ├── JobPool.py │ ├── TaskPool.py │ ├── __init__.py │ ├── api_response.py │ ├── exceptions.py │ ├── status_codes.py │ └── utils.py ├── config │ ├── __init__.py │ ├── logger.json │ ├── logger_debug.json │ └── settings.py ├── globals.py ├── model │ ├── ClusterModel.py │ ├── Task.py │ └── __init__.py ├── service │ ├── ClusterService.py │ ├── ConnectionService.py │ ├── DiagnosticsRules.py │ ├── DiagnosticsService.py │ ├── HQService.py │ ├── IndicesService.py │ ├── NodeService.py │ ├── QueryService.py │ ├── SnapshotService.py │ ├── __init__.py │ └── persistence │ │ ├── ClusterDBService.py │ │ └── __init__.py ├── static │ ├── app.bundle.css │ ├── commons.0c5d691bc33f1cc1a9c6.js │ ├── commons.0c5d691bc33f1cc1a9c6.js.map │ ├── images │ │ └── foo.gif │ ├── main.0c5d691bc33f1cc1a9c6.js │ └── main.0c5d691bc33f1cc1a9c6.js.map ├── templates │ └── index.html ├── utils.py └── vendor │ ├── __init__.py │ ├── elasticsearch │ ├── AUTHORS │ ├── LICENSE │ ├── README │ ├── __init__.py │ ├── client │ │ ├── __init__.py │ │ ├── cat.py │ │ ├── cluster.py │ │ ├── indices.py │ │ ├── ingest.py │ │ ├── nodes.py │ │ ├── remote.py │ │ ├── snapshot.py │ │ ├── tasks.py │ │ └── utils.py │ ├── compat.py │ ├── connection │ │ ├── __init__.py │ │ ├── base.py │ │ ├── http_requests.py │ │ ├── http_urllib3.py │ │ └── pooling.py │ ├── connection_pool.py │ ├── connections.py │ ├── exceptions.py │ ├── helpers │ │ ├── __init__.py │ │ └── test.py │ ├── serializer.py │ └── transport.py │ └── elasticsearch_dsl │ ├── __init__.py │ ├── v2 │ ├── AUTHORS │ ├── CONTRIBUTING.md │ ├── LICENSE │ ├── README │ ├── README.rst │ ├── __init__.py │ └── elasticsearch_dsl │ │ ├── __init__.py │ │ ├── aggs.py │ │ ├── analysis.py │ │ ├── connections.py │ │ ├── document.py │ │ ├── exceptions.py │ │ ├── faceted_search.py │ │ ├── field.py │ │ ├── function.py │ │ ├── index.py │ │ ├── mapping.py │ │ ├── query.py │ │ ├── result.py │ │ ├── search.py │ │ ├── serializer.py │ │ └── utils.py │ ├── v5 │ ├── AUTHORS │ ├── LICENSE │ ├── README │ ├── __init__.py │ └── elasticsearch_dsl │ │ ├── __init__.py │ │ ├── aggs.py │ │ ├── analysis.py │ │ ├── connections.py │ │ ├── document.py │ │ ├── exceptions.py │ │ ├── faceted_search.py │ │ ├── field.py │ │ ├── function.py │ │ ├── index.py │ │ ├── mapping.py │ │ ├── query.py │ │ ├── response │ │ ├── __init__.py │ │ ├── aggs.py │ │ └── hit.py │ │ ├── search.py │ │ ├── serializer.py │ │ └── utils.py │ └── v6 │ ├── AUTHORS │ ├── LICENSE │ ├── README │ ├── __init__.py │ └── elasticsearch_dsl │ ├── __init__.py │ ├── aggs.py │ ├── analysis.py │ ├── connections.py │ ├── document.py │ ├── exceptions.py │ ├── faceted_search.py │ ├── field.py │ ├── function.py │ ├── index.py │ ├── mapping.py │ ├── query.py │ ├── response │ ├── __init__.py │ ├── aggs.py │ └── hit.py │ ├── search.py │ ├── serializer.py │ └── utils.py ├── example ├── docker-compose-local-dev.yml ├── docker-compose.yml └── nginx_es_5.conf ├── index.html ├── main_dashboard.png ├── manage.py ├── migrations ├── README ├── alembic.ini ├── env.py ├── script.py.mako └── versions │ └── e0e2a6da6956_.py ├── openshift ├── README.md ├── elastic-hq-template.yaml └── proxy │ └── nginx.conf ├── package-lock.json ├── package.json ├── requirements.txt ├── run-tests.sh ├── scripts └── elastichq ├── setup.py ├── sphinx-requirements.txt ├── tests ├── .gitignore ├── README.md ├── __init__.py ├── combined │ ├── __init__.py │ ├── test_connections.py │ └── test_nodes.py ├── conftest.py ├── data │ ├── dataset_cars.json │ ├── indices_list.json │ └── mapping_cars.json ├── es_versions │ ├── __init__.py │ ├── test_clusters.py │ ├── test_indices.py │ └── test_nodes.py ├── hq_docker-compose.yml ├── index.html ├── local │ ├── README.md │ ├── kill_es_versions.sh │ ├── run_es_versions.sh │ ├── v2 │ │ ├── .env │ │ └── docker-compose.yml │ ├── v5 │ │ ├── .env │ │ └── docker-compose.yml │ ├── v6 │ │ ├── .env │ │ └── docker-compose.yml │ └── v7 │ │ ├── .env │ │ └── docker-compose.yml ├── pytest.ini ├── test_fixture.py ├── v2_docker-compose.yml ├── v5_docker-compose.yml ├── v6_docker-compose.yml └── v7_docker-compose.yml ├── ui ├── build_scripts │ ├── make_component.js │ ├── make_container.js │ ├── make_filter.js │ ├── make_service.js │ └── make_test.js ├── index.ejs └── src │ ├── app.config.js │ ├── app.module.js │ ├── components │ ├── README.md │ ├── api-endpoints │ │ ├── api-endpoints.component.js │ │ ├── api-endpoints.controller.js │ │ ├── api-endpoints.js │ │ ├── api-endpoints.spec.js │ │ ├── api-endpoints.style.scss │ │ └── api-endpoints.template.html │ ├── cluster-navigation │ │ ├── cluster-navigation.component.js │ │ ├── cluster-navigation.controller.js │ │ ├── cluster-navigation.js │ │ ├── cluster-navigation.spec.js │ │ ├── cluster-navigation.style.css │ │ ├── cluster-navigation.style.css.map │ │ ├── cluster-navigation.style.scss │ │ └── cluster-navigation.template.html │ ├── cluster-nodes-line-graph │ │ ├── cluster-nodes-line-graph.component.js │ │ ├── cluster-nodes-line-graph.controller.js │ │ ├── cluster-nodes-line-graph.js │ │ ├── cluster-nodes-line-graph.spec.js │ │ ├── cluster-nodes-line-graph.style.scss │ │ └── cluster-nodes-line-graph.template.html │ ├── cluster-summary │ │ ├── cluster-summary.component.js │ │ ├── cluster-summary.controller.js │ │ ├── cluster-summary.js │ │ ├── cluster-summary.spec.js │ │ ├── cluster-summary.style.css │ │ ├── cluster-summary.style.css.map │ │ ├── cluster-summary.style.scss │ │ └── cluster-summary.template.html │ ├── clusters-button │ │ ├── clusters-button.component.js │ │ ├── clusters-button.controller.js │ │ ├── clusters-button.js │ │ ├── clusters-button.spec.js │ │ ├── clusters-button.style.scss │ │ └── clusters-button.template.html │ ├── clusters │ │ ├── add-cluster-modal.html │ │ ├── clusters.component.js │ │ ├── clusters.controller.js │ │ ├── clusters.js │ │ ├── clusters.spec.js │ │ ├── clusters.style.scss │ │ ├── clusters.template.html │ │ └── edit-cluster-modal.html │ ├── common-components.js │ ├── footer │ │ ├── footer.component.js │ │ ├── footer.controller.js │ │ ├── footer.js │ │ ├── footer.spec.js │ │ ├── footer.style.scss │ │ └── footer.template.html │ ├── index-administration-tab-content │ │ ├── index-administration-tab-content.component.js │ │ ├── index-administration-tab-content.controller.js │ │ ├── index-administration-tab-content.js │ │ ├── index-administration-tab-content.spec.js │ │ ├── index-administration-tab-content.style.css │ │ ├── index-administration-tab-content.style.css.map │ │ ├── index-administration-tab-content.style.scss │ │ └── index-administration-tab-content.template.html │ ├── index-aliases-tab-content │ │ ├── create-alias-modal.html │ │ ├── index-aliases-tab-content.component.js │ │ ├── index-aliases-tab-content.controller.js │ │ ├── index-aliases-tab-content.js │ │ ├── index-aliases-tab-content.spec.js │ │ ├── index-aliases-tab-content.style.scss │ │ └── index-aliases-tab-content.template.html │ ├── index-mappings-tab-content │ │ ├── index-mappings-tab-content.component.js │ │ ├── index-mappings-tab-content.controller.js │ │ ├── index-mappings-tab-content.js │ │ ├── index-mappings-tab-content.spec.js │ │ ├── index-mappings-tab-content.style.scss │ │ └── index-mappings-tab-content.template.html │ ├── index-metric-docs │ │ ├── index-metric-docs.component.js │ │ ├── index-metric-docs.controller.js │ │ ├── index-metric-docs.js │ │ ├── index-metric-docs.spec.js │ │ ├── index-metric-docs.style.css │ │ ├── index-metric-docs.style.css.map │ │ ├── index-metric-docs.style.scss │ │ └── index-metric-docs.template.html │ ├── index-metric-get │ │ ├── index-metric-get.component.js │ │ ├── index-metric-get.controller.js │ │ ├── index-metric-get.js │ │ ├── index-metric-get.spec.js │ │ ├── index-metric-get.style.css │ │ ├── index-metric-get.style.css.map │ │ ├── index-metric-get.style.scss │ │ └── index-metric-get.template.html │ ├── index-metric-health │ │ ├── index-metric-health.component.js │ │ ├── index-metric-health.controller.js │ │ ├── index-metric-health.js │ │ ├── index-metric-health.spec.js │ │ ├── index-metric-health.style.css │ │ ├── index-metric-health.style.css.map │ │ ├── index-metric-health.style.scss │ │ └── index-metric-health.template.html │ ├── index-metric-index │ │ ├── index-metric-index.component.js │ │ ├── index-metric-index.controller.js │ │ ├── index-metric-index.js │ │ ├── index-metric-index.spec.js │ │ ├── index-metric-index.style.css │ │ ├── index-metric-index.style.css.map │ │ ├── index-metric-index.style.scss │ │ └── index-metric-index.template.html │ ├── index-metric-ops │ │ ├── index-metric-ops.component.js │ │ ├── index-metric-ops.controller.js │ │ ├── index-metric-ops.js │ │ ├── index-metric-ops.spec.js │ │ ├── index-metric-ops.style.css │ │ ├── index-metric-ops.style.css.map │ │ ├── index-metric-ops.style.scss │ │ └── index-metric-ops.template.html │ ├── index-metric-querycache │ │ ├── index-metric-querycache.component.js │ │ ├── index-metric-querycache.controller.js │ │ ├── index-metric-querycache.js │ │ ├── index-metric-querycache.spec.js │ │ ├── index-metric-querycache.style.css │ │ ├── index-metric-querycache.style.css.map │ │ ├── index-metric-querycache.style.scss │ │ └── index-metric-querycache.template.html │ ├── index-metric-search │ │ ├── index-metric-search.component.js │ │ ├── index-metric-search.controller.js │ │ ├── index-metric-search.js │ │ ├── index-metric-search.spec.js │ │ ├── index-metric-search.style.css │ │ ├── index-metric-search.style.css.map │ │ ├── index-metric-search.style.scss │ │ └── index-metric-search.template.html │ ├── index-metrics-tab-content │ │ ├── index-metrics-tab-content.component.js │ │ ├── index-metrics-tab-content.controller.js │ │ ├── index-metrics-tab-content.js │ │ ├── index-metrics-tab-content.spec.js │ │ ├── index-metrics-tab-content.style.css │ │ ├── index-metrics-tab-content.style.css.map │ │ ├── index-metrics-tab-content.style.scss │ │ └── index-metrics-tab-content.template.html │ ├── index-shards-tab-content │ │ ├── index-shards-tab-content.component.js │ │ ├── index-shards-tab-content.controller.js │ │ ├── index-shards-tab-content.js │ │ ├── index-shards-tab-content.spec.js │ │ ├── index-shards-tab-content.style.css │ │ ├── index-shards-tab-content.style.css.map │ │ ├── index-shards-tab-content.style.scss │ │ └── index-shards-tab-content.template.html │ ├── indices-table │ │ ├── indices-table.component.js │ │ ├── indices-table.controller.js │ │ ├── indices-table.js │ │ ├── indices-table.spec.js │ │ ├── indices-table.style.css │ │ ├── indices-table.style.css.map │ │ ├── indices-table.style.scss │ │ └── indices-table.template.html │ ├── indicie-card │ │ ├── indicie-card.style.css │ │ └── indicie-card.style.css.map │ ├── node-diagnostics-wrapper │ │ ├── node-diagnostics-wrapper.component.js │ │ ├── node-diagnostics-wrapper.controller.js │ │ ├── node-diagnostics-wrapper.js │ │ ├── node-diagnostics-wrapper.spec.js │ │ ├── node-diagnostics-wrapper.style.scss │ │ └── node-diagnostics-wrapper.template.html │ ├── node-fs-info-table │ │ ├── node-fs-info-table.component.js │ │ ├── node-fs-info-table.controller.js │ │ ├── node-fs-info-table.js │ │ ├── node-fs-info-table.spec.js │ │ ├── node-fs-info-table.style.scss │ │ └── node-fs-info-table.template.html │ ├── node-jvm-stats-table │ │ ├── node-jvm-stats-table.component.js │ │ ├── node-jvm-stats-table.controller.js │ │ ├── node-jvm-stats-table.js │ │ ├── node-jvm-stats-table.spec.js │ │ ├── node-jvm-stats-table.style.scss │ │ └── node-jvm-stats-table.template.html │ ├── node-os-info-table │ │ ├── node-os-info-table.component.js │ │ ├── node-os-info-table.controller.js │ │ ├── node-os-info-table.js │ │ ├── node-os-info-table.spec.js │ │ ├── node-os-info-table.style.scss │ │ └── node-os-info-table.template.html │ ├── node-plugins-table │ │ ├── node-plugins-table.component.js │ │ ├── node-plugins-table.controller.js │ │ ├── node-plugins-table.js │ │ ├── node-plugins-table.spec.js │ │ ├── node-plugins-table.style.scss │ │ └── node-plugins-table.template.html │ ├── node-process-table │ │ ├── node-process-table.component.js │ │ ├── node-process-table.controller.js │ │ ├── node-process-table.js │ │ ├── node-process-table.spec.js │ │ ├── node-process-table.style.scss │ │ └── node-process-table.template.html │ ├── node-summary-info-table │ │ ├── node-summary-info-table.component.js │ │ ├── node-summary-info-table.controller.js │ │ ├── node-summary-info-table.js │ │ ├── node-summary-info-table.spec.js │ │ ├── node-summary-info-table.style.scss │ │ └── node-summary-info-table.template.html │ ├── repositories-table │ │ ├── repositories-table.component.js │ │ ├── repositories-table.controller.js │ │ ├── repositories-table.js │ │ ├── repositories-table.spec.js │ │ ├── repositories-table.style.scss │ │ └── repositories-table.template.html │ └── top-nav │ │ ├── top-nav.component.js │ │ ├── top-nav.controller.js │ │ ├── top-nav.js │ │ ├── top-nav.spec.js │ │ ├── top-nav.style.css │ │ ├── top-nav.style.css.map │ │ ├── top-nav.style.scss │ │ └── top-nav.template.html │ ├── containers │ ├── cluster-aliases │ │ ├── cluster-aliases.controller.js │ │ ├── cluster-aliases.spec.js │ │ ├── cluster-aliases.style.scss │ │ └── cluster-aliases.view.html │ ├── cluster-details │ │ ├── cluster-details.controller.js │ │ ├── cluster-details.spec.js │ │ ├── cluster-details.style.css │ │ ├── cluster-details.style.css.map │ │ ├── cluster-details.style.scss │ │ └── cluster-details.view.html │ ├── cluster-index-query │ │ ├── cluster-index-query.controller.js │ │ ├── cluster-index-query.spec.js │ │ ├── cluster-index-query.style.scss │ │ └── cluster-index-query.view.html │ ├── cluster-indice-details │ │ ├── cluster-indice-details.controller.js │ │ ├── cluster-indice-details.spec.js │ │ ├── cluster-indice-details.style.css │ │ ├── cluster-indice-details.style.css.map │ │ ├── cluster-indice-details.style.scss │ │ └── cluster-indice-details.view.html │ ├── cluster-indices-closed │ │ ├── cluster-indices-closed.controller.js │ │ ├── cluster-indices-closed.spec.js │ │ ├── cluster-indices-closed.style.scss │ │ └── cluster-indices-closed.view.html │ ├── cluster-indices-deleted │ │ ├── cluster-indices-deleted.controller.js │ │ ├── cluster-indices-deleted.spec.js │ │ ├── cluster-indices-deleted.style.scss │ │ └── cluster-indices-deleted.view.html │ ├── cluster-indices │ │ ├── cluster-indices.controller.js │ │ ├── cluster-indices.spec.js │ │ ├── cluster-indices.style.css │ │ ├── cluster-indices.style.css.map │ │ ├── cluster-indices.style.scss │ │ ├── cluster-indices.view.html │ │ ├── create-index-modal.html │ │ └── reindex-modal.html │ ├── cluster-node-details │ │ ├── cluster-node-details.controller.js │ │ ├── cluster-node-details.spec.js │ │ ├── cluster-node-details.style.css │ │ ├── cluster-node-details.style.css.map │ │ ├── cluster-node-details.style.scss │ │ └── cluster-node-details.view.html │ ├── cluster-nodes │ │ ├── cluster-nodes.controller.js │ │ ├── cluster-nodes.spec.js │ │ ├── cluster-nodes.style.scss │ │ └── cluster-nodes.view.html │ ├── cluster-snapshots-details │ │ ├── cluster-snapshots-details-modal.html │ │ ├── cluster-snapshots-details.controller.js │ │ ├── cluster-snapshots-details.spec.js │ │ ├── cluster-snapshots-details.style.scss │ │ └── cluster-snapshots-details.view.html │ ├── cluster-snapshots │ │ ├── cluster-snapshots.controller.js │ │ ├── cluster-snapshots.spec.js │ │ ├── cluster-snapshots.style.scss │ │ └── cluster-snapshots.view.html │ ├── common-containers.js │ ├── diagnostics │ │ ├── diagnostics.controller.js │ │ ├── diagnostics.spec.js │ │ ├── diagnostics.style.scss │ │ └── diagnostics.view.html │ ├── home │ │ ├── home.controller.js │ │ ├── home.style.scss │ │ └── home.view.html │ ├── rest-api │ │ ├── rest-api.controller.js │ │ ├── rest-api.spec.js │ │ ├── rest-api.style.scss │ │ └── rest-api.view.html │ └── settings │ │ ├── settings.controller.js │ │ ├── settings.spec.js │ │ ├── settings.style.scss │ │ └── settings.view.html │ ├── factories │ ├── cluster-summary │ │ ├── cluster-summary.factory.js │ │ └── cluster-summary.spec.js │ ├── common-factories.js │ └── queued │ │ └── queued.factory.js │ ├── filters │ ├── common-filters.js │ ├── moment.filter.js │ └── numeral.filter.js │ ├── images │ └── foo.gif │ ├── services │ ├── cluster-aliases │ │ ├── cluster-aliases.service.js │ │ └── cluster-aliases.spec.js │ ├── cluster-connection │ │ ├── cluster-connection.service.js │ │ └── cluster-connection.spec.js │ ├── cluster-indices │ │ ├── cluster-indices.service.js │ │ └── cluster-indices.spec.js │ ├── cluster-nodes │ │ ├── cluster-nodes.service.js │ │ └── cluster-nodes.spec.js │ ├── cluster-repositories │ │ ├── cluster-repositories.service.js │ │ └── cluster-repositories.spec.js │ ├── common-services.js │ └── hq │ │ ├── hq.service.js │ │ └── hq.spec.js │ └── styles │ ├── _yeti-bootswatch.scss │ ├── _yeti-variables.scss │ ├── base.css │ └── base.scss ├── webpack.config.js └── webpack.prod.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["@babel/preset-env", { 4 | "targets": { 5 | "browsers": ["last 2 versions"] 6 | } 7 | }] 8 | ] 9 | } -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .dockerignore 2 | .git 3 | .gitignore 4 | 0compose/ 5 | venv/ 6 | .venv/ 7 | .idea/ 8 | .vscode/ 9 | .classpath 10 | .project 11 | .settings/ 12 | .idea/ 13 | *.iml 14 | *.iws 15 | .DS_Store 16 | log/ 17 | target/ 18 | tmp 19 | node_modules 20 | dist 21 | npm-debug.log 22 | bower_components 23 | *.swp 24 | 25 | # Don't need the files 26 | tpl/ 27 | js/lib/ace/src-min-noconflict/ -------------------------------------------------------------------------------- /.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/.nojekyll -------------------------------------------------------------------------------- /AUTHORS.md: -------------------------------------------------------------------------------- 1 | Roy Russo 2 | 3 | Will McGinnis 4 | 5 | And other authors: https://github.com/ElasticHQ/elasticsearch-HQ/graphs/contributors 6 | 7 | This project also draws upon the work of the elasticsearch-py author: 8 | 9 | Honza Král 10 | And others: https://github.com/elastic/elasticsearch-py/blob/master/AUTHORS -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | When contributing to this repository, please first discuss the change you wish to make via issue, 4 | email, or any other method with the owners of this repository before making a change. 5 | 6 | ## Pull Request Process 7 | 8 | For new features or bug fixes, please follow the below guideline, making sure that the pull request is coming from a feature branch. This guarantees that new features are merged with `develop` during a pull request. 9 | 10 | 1. Create a feature branch: `git flow feature start module_1` 11 | 2. The code is updated on the feature branch 12 | 3. When the feature is completed a pull request is opened in GitHub comparing develop and the feature branch `module_1` 13 | 4. The team reviews the pull request and makes comments 14 | 5. Any changes from the pull request are made to the feature branch 15 | 6. Once all changes are incorporated on the feature branch the feature branch is finished: `git flow feature finish module_1` 16 | 7. The `develop` branch is pushed to GitHub (GitHub will automatically mark the pull request as closed/merged when this happens) 17 | -------------------------------------------------------------------------------- /DEVELOPMENT.md: -------------------------------------------------------------------------------- 1 | # Development Instructions 2 | 3 | See the development section in the docs for details: http://docs.elastichq.org/developer-guide.html -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### General information 2 | 3 | - **OS Platform and Distribution (e.g., Linux Ubuntu 16.04)**: 4 | - **ElasticHQ Version**: 5 | - **Elasticsearch Version**: 6 | - **Python version (ignore is using docker image)**: 7 | - **Browser Vendor and Version (if applicable)**: 8 | 9 | ### Issue Description 10 | 11 | Describe the problem clearly here. Be sure to convey here why it's a bug in ElasticHQ or a feature request. 12 | 13 | ### Source Code / Logs 14 | 15 | Include any logs or source code that would be helpful to diagnose the problem. If including stacktrace, please include the full stacktrace. 16 | 17 | Large logs and files should be attached. Try to provide a reproducible test case or steps that are the bare minimum necessary to generate the problem. 18 | 19 | ### Be Patient 20 | 21 | I have a day job. ;-) -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright 2013-2019, Roy Russo 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | recursive-include elastichq/templates * 2 | recursive-include elastichq/static * 3 | include elastichq/config/logger.json 4 | include requirements.txt 5 | -------------------------------------------------------------------------------- /PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Instructions 2 | 3 | Please try and perform pull requests against the ``develop`` branch. 4 | 5 | Merging against the master branch causes a new release to be deployed, and I'd like to avoid that on every PR. 6 | 7 | # PR Details 8 | 9 | 10 | 11 | ## Description 12 | 13 | 14 | 15 | ## Related Issue 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /TERMS.md: -------------------------------------------------------------------------------- 1 | The Legal Stuff 2 | =============== 3 | 4 | By using ElasticHQ, you agree to everything on this page. We have to do this to protect both you and us and make running this FREE software service possible. If you break these terms, you can't use ElasticHQ anymore. 5 | 6 | So here it is, in plain english... 7 | ---------------------------------- 8 | 9 | 1. We are not liable for misuse of ElasticHQ, or for it not meeting your needs. 10 | 2. We are not liable for any harm you bring to your data, software, or hardware by using ElasticHQ. 11 | -------------------------------------------------------------------------------- /__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'royrusso' 2 | -------------------------------------------------------------------------------- /deployment/gunicorn.conf: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | for k,v in os.environ.items(): 4 | if k.startswith("GUNICORN_"): 5 | key = k.split('_', 1)[1].lower() 6 | locals()[key] = v -------------------------------------------------------------------------------- /deployment/logging.conf: -------------------------------------------------------------------------------- 1 | [loggers] 2 | keys=root, gunicorn.error 3 | 4 | [handlers] 5 | keys=console 6 | 7 | [formatters] 8 | keys=json 9 | 10 | [logger_root] 11 | level=INFO 12 | handlers=console 13 | 14 | [logger_gunicorn.error] 15 | level=ERROR 16 | handlers=console 17 | propagate=0 18 | qualname=gunicorn.error 19 | 20 | [handler_console] 21 | class=StreamHandler 22 | formatter=json 23 | args=(sys.stdout, ) 24 | 25 | [formatter_json] 26 | format=%(asctime)s - %(name)s - %(levelname)s - %(message)s 27 | datefmt= -------------------------------------------------------------------------------- /deployment/supervisord.conf: -------------------------------------------------------------------------------- 1 | [supervisord] 2 | nodaemon=true 3 | logfile=/var/log/supervisor/supervisord.log 4 | pidfile=/var/run/supervisor/supervisord.pid 5 | 6 | [program:gunicorn] 7 | command=/usr/local/bin/gunicorn application:application -w 1 --worker-class eventlet --config /src/gunicorn.conf --log-config /src/logging.conf --bind 0.0.0.0:5000 8 | directory=/src 9 | # Uncomment the following lines and comment those after if you want to 10 | # save stdout and stderr logs in seperate files. 11 | # stdout_logfile=/var/log/supervisor/elastichq_stdout.log 12 | # stderr_logfile=/var/log/supervisor/elastichq_stderr.log 13 | stdout_logfile=/dev/fd/1 14 | stdout_logfile_maxbytes=0 15 | redirect_stderr=true 16 | -------------------------------------------------------------------------------- /docs/.buildinfo: -------------------------------------------------------------------------------- 1 | # Sphinx build info version 1 2 | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. 3 | config: d95de450ee0c2c25942b746b3626a6b0 4 | tags: 645f666f9bcd5a90fca523b33c5a78b7 5 | -------------------------------------------------------------------------------- /docs/.doctrees/developer-guide.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/.doctrees/developer-guide.doctree -------------------------------------------------------------------------------- /docs/.doctrees/developers.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/.doctrees/developers.doctree -------------------------------------------------------------------------------- /docs/.doctrees/environment.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/.doctrees/environment.pickle -------------------------------------------------------------------------------- /docs/.doctrees/faq.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/.doctrees/faq.doctree -------------------------------------------------------------------------------- /docs/.doctrees/index.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/.doctrees/index.doctree -------------------------------------------------------------------------------- /docs/.doctrees/installation.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/.doctrees/installation.doctree -------------------------------------------------------------------------------- /docs/.doctrees/page-1.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/.doctrees/page-1.doctree -------------------------------------------------------------------------------- /docs/.doctrees/pymethod.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/.doctrees/pymethod.doctree -------------------------------------------------------------------------------- /docs/.doctrees/rest-api.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/.doctrees/rest-api.doctree -------------------------------------------------------------------------------- /docs/.doctrees/table-with-code.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/.doctrees/table-with-code.doctree -------------------------------------------------------------------------------- /docs/.doctrees/user-guide.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/.doctrees/user-guide.doctree -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/.nojekyll -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | docs.elastichq.org -------------------------------------------------------------------------------- /docs/_sources/developers.txt: -------------------------------------------------------------------------------- 1 | ============== 2 | Developers API 3 | ============== 4 | 5 | .. contents:: Table of Contents 6 | :depth: 5 7 | 8 | 9 | Services 10 | -------- 11 | 12 | ConnectionService 13 | ^^^^^^^^^^^^^^^^^ 14 | 15 | 16 | ClusterService 17 | ^^^^^^^^^^^^^^ 18 | 19 | .. automodule:: elastichq.service.ClusterService 20 | :members: 21 | 22 | ClusterDBService 23 | ^^^^^^^^^^^^^^^^ 24 | 25 | IndicesService 26 | ^^^^^^^^^^^^^^ 27 | 28 | NodeService 29 | ^^^^^^^^^^^ 30 | 31 | Models 32 | ------ 33 | 34 | .. automodule:: elastichq.model.ClusterModel 35 | :members: 36 | 37 | Response 38 | -------- 39 | 40 | .. autofunction:: elastichq.common.api_response.APIResponse 41 | 42 | Exceptions 43 | ---------- 44 | 45 | All ElasticHQ API endpoints are wrapped by a decorator that handles raised exceptions. 46 | 47 | .. autofunction:: elastichq.common.exceptions.request_wrapper 48 | 49 | .. autoclass:: elastichq.common.exceptions.ApiException 50 | :members: 51 | 52 | .. autoclass:: elastichq.common.exceptions.NotFoundException 53 | 54 | .. autoclass:: elastichq.common.exceptions.BadRequest 55 | 56 | .. autoclass:: elastichq.common.exceptions.InternalServerError 57 | -------------------------------------------------------------------------------- /docs/_sources/faq.txt: -------------------------------------------------------------------------------- 1 | === 2 | FAQ 3 | === 4 | 5 | .. contents:: Table of Contents 6 | :depth: 3 7 | :local: 8 | 9 | This is a list of Frequently Asked Questions about ElasticHQ. Feel free to 10 | suggest new entries in the `GitHub Issues `_. 11 | 12 | How do I... 13 | ----------- 14 | 15 | ... get help? 16 | * `Forums `_ 17 | * `Issues `_ 18 | 19 | ... use the REST API directly? 20 | You can access the REST API under http://localhost:5000/api 21 | 22 | Using ElasticHQ with... 23 | ----------------------- 24 | 25 | X-Pack 26 | We have added instructions on X-Pack authentication, see :any:`xpack integration`. -------------------------------------------------------------------------------- /docs/_sources/index.txt: -------------------------------------------------------------------------------- 1 | ======================= 2 | ElasticHQ Documentation 3 | ======================= 4 | 5 | 6 | .. toctree:: 7 | :hidden: 8 | 9 | installation 10 | rest-api 11 | developer-guide 12 | faq 13 | 14 | Overview 15 | -------- 16 | 17 | ElasticHQ serves as a monitoring and management platform for Elasticsearch clusters. It is freely available and distributed under the Apache Software License. 18 | 19 | .. figure:: /_static/img/main_dashboard.png 20 | :width: 600px 21 | :align: center 22 | 23 | 24 | Key Features: 25 | ~~~~~~~~~~~~~ 26 | 27 | * Works with any version of Elasticsearch since v2.x, including 5.x and 6.x. 28 | * Can monitor and manage **many** clusters at the same time. 29 | * Monitor and manage clusters, nodes, indices, aliases, and shards. 30 | * Saves monitored clusters 31 | * API available for direct use from applications or command line 32 | * One-click access to commonly used Elasticsearch REST endpoints. 33 | * Runs 24/7. 34 | 35 | Project 36 | ~~~~~~~ 37 | 38 | * `HomePage `_ 39 | * `Forums `_ 40 | * `Issues `_ 41 | * `Roadmap `_ 42 | 43 | -------------------------------------------------------------------------------- /docs/_sources/user-guide.txt: -------------------------------------------------------------------------------- 1 | ============== 2 | User Guide 3 | ============== 4 | 5 | .. contents:: Table of Contents 6 | :depth: 1 7 | :local: 8 | -------------------------------------------------------------------------------- /docs/_static/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/ajax-loader.gif -------------------------------------------------------------------------------- /docs/_static/comment-bright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/comment-bright.png -------------------------------------------------------------------------------- /docs/_static/comment-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/comment-close.png -------------------------------------------------------------------------------- /docs/_static/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/comment.png -------------------------------------------------------------------------------- /docs/_static/down-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/down-pressed.png -------------------------------------------------------------------------------- /docs/_static/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/down.png -------------------------------------------------------------------------------- /docs/_static/empty.file: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/empty.file -------------------------------------------------------------------------------- /docs/_static/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/file.png -------------------------------------------------------------------------------- /docs/_static/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /docs/_static/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-Bold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-Bold-webfont.eot -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-Bold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-Bold-webfont.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-Bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-Bold-webfont.woff -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-BoldItalic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-BoldItalic-webfont.eot -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-BoldItalic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-BoldItalic-webfont.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-BoldItalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-BoldItalic-webfont.woff -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-ExtraBold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-ExtraBold-webfont.eot -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-ExtraBold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-ExtraBold-webfont.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-ExtraBold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-ExtraBold-webfont.woff -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-ExtraBoldItalic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-ExtraBoldItalic-webfont.eot -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-ExtraBoldItalic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-ExtraBoldItalic-webfont.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-ExtraBoldItalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-ExtraBoldItalic-webfont.woff -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-Italic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-Italic-webfont.eot -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-Italic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-Italic-webfont.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-Italic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-Italic-webfont.woff -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-Light-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-Light-webfont.eot -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-Light-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-Light-webfont.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-Light-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-Light-webfont.woff -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-LightItalic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-LightItalic-webfont.eot -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-LightItalic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-LightItalic-webfont.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-LightItalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-LightItalic-webfont.woff -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-Regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-Regular-webfont.eot -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-Regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-Regular-webfont.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-Regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-Regular-webfont.woff -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-Semibold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-Semibold-webfont.eot -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-Semibold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-Semibold-webfont.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-Semibold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-Semibold-webfont.woff -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-SemiboldItalic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-SemiboldItalic-webfont.eot -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-SemiboldItalic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-SemiboldItalic-webfont.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/open-sans/fonts/OpenSans-SemiboldItalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/open-sans/fonts/OpenSans-SemiboldItalic-webfont.woff -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/EOT/SourceSerifPro-Black.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/EOT/SourceSerifPro-Black.eot -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/EOT/SourceSerifPro-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/EOT/SourceSerifPro-Bold.eot -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/EOT/SourceSerifPro-ExtraLight.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/EOT/SourceSerifPro-ExtraLight.eot -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/EOT/SourceSerifPro-Light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/EOT/SourceSerifPro-Light.eot -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/EOT/SourceSerifPro-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/EOT/SourceSerifPro-Regular.eot -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/EOT/SourceSerifPro-Semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/EOT/SourceSerifPro-Semibold.eot -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/OTF/SourceSerifPro-Black.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/OTF/SourceSerifPro-Black.otf -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/OTF/SourceSerifPro-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/OTF/SourceSerifPro-Bold.otf -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/OTF/SourceSerifPro-ExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/OTF/SourceSerifPro-ExtraLight.otf -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/OTF/SourceSerifPro-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/OTF/SourceSerifPro-Light.otf -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/OTF/SourceSerifPro-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/OTF/SourceSerifPro-Regular.otf -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/OTF/SourceSerifPro-Semibold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/OTF/SourceSerifPro-Semibold.otf -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/README.md: -------------------------------------------------------------------------------- 1 | # Source Serif Pro 2 | 3 | Source Serif Pro is a set of OpenType fonts to complement the [Source Sans Pro](https://github.com/adobe-fonts/source-sans-pro) family. 4 | In addition to a functional OpenType font, this open source project provides all of the source files that were used to build this OpenType font by using the AFDKO makeotf tool. 5 | 6 | ## Installation instructions 7 | 8 | * [Mac OS X](http://support.apple.com/kb/HT2509) 9 | * [Windows](http://windows.microsoft.com/en-us/windows-vista/install-or-uninstall-fonts) 10 | * [Linux/Unix-based systems](https://github.com/adobe-fonts/source-code-pro/issues/17#issuecomment-8967116) 11 | 12 | ## Getting Involved 13 | 14 | Send suggestions for changes to the Source Serif OpenType font project maintainer, [Frank Grießhammer](mailto:opensourcefonts@adobe.com?subject=[GitHub] Source Serif Pro), for consideration. 15 | 16 | ## Further information 17 | 18 | For information about the design and background of Source Serif, please refer to the [official font readme file](http://htmlpreview.github.io/?https://github.com/adobe-fonts/source-serif-pro/blob/master/SourceSerifProReadMe.html). 19 | -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/TTF/SourceSerifPro-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/TTF/SourceSerifPro-Black.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/TTF/SourceSerifPro-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/TTF/SourceSerifPro-Bold.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/TTF/SourceSerifPro-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/TTF/SourceSerifPro-ExtraLight.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/TTF/SourceSerifPro-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/TTF/SourceSerifPro-Light.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/TTF/SourceSerifPro-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/TTF/SourceSerifPro-Regular.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/TTF/SourceSerifPro-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/TTF/SourceSerifPro-Semibold.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-Black.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-Black.otf.woff -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-Bold.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-Bold.otf.woff -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-ExtraLight.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-ExtraLight.otf.woff -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-Light.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-Light.otf.woff -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-Regular.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-Regular.otf.woff -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-Semibold.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/WOFF/OTF/SourceSerifPro-Semibold.otf.woff -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-Black.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-Black.ttf.woff -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-Bold.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-Bold.ttf.woff -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-ExtraLight.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-ExtraLight.ttf.woff -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-Light.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-Light.ttf.woff -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-Regular.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-Regular.ttf.woff -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-Semibold.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/fonts/source-serif-pro/WOFF/TTF/SourceSerifPro-Semibold.ttf.woff -------------------------------------------------------------------------------- /docs/_static/fonts/source-serif-pro/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "source-serif-pro", 3 | "version": "1.014", 4 | "main": "source-serif-pro.css", 5 | "homepage": "https://github.com/adobe-fonts/source-serif-pro", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/adobe-fonts/source-serif-pro.git" 9 | }, 10 | "authors": [ 11 | { "name": "Frank Grießhammer" } 12 | ], 13 | "description": "Source Serif Pro font family by Adobe", 14 | "license": "SIL OFL 1.1" 15 | } 16 | -------------------------------------------------------------------------------- /docs/_static/img/footer_version_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/img/footer_version_1.png -------------------------------------------------------------------------------- /docs/_static/img/footer_version_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/img/footer_version_2.png -------------------------------------------------------------------------------- /docs/_static/img/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/img/login.png -------------------------------------------------------------------------------- /docs/_static/img/main_dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/img/main_dashboard.png -------------------------------------------------------------------------------- /docs/_static/img/screenie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/img/screenie.png -------------------------------------------------------------------------------- /docs/_static/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/minus.png -------------------------------------------------------------------------------- /docs/_static/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/plus.png -------------------------------------------------------------------------------- /docs/_static/up-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/up-pressed.png -------------------------------------------------------------------------------- /docs/_static/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/_static/up.png -------------------------------------------------------------------------------- /docs/objects.inv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/objects.inv -------------------------------------------------------------------------------- /docs/source/_templates/globaltoc.html: -------------------------------------------------------------------------------- 1 | 2 | 15 | -------------------------------------------------------------------------------- /docs/source/faq.rst: -------------------------------------------------------------------------------- 1 | === 2 | FAQ 3 | === 4 | 5 | .. contents:: Table of Contents 6 | :depth: 3 7 | :local: 8 | 9 | This is a list of Frequently Asked Questions about ElasticHQ. Feel free to 10 | suggest new entries in the `GitHub Issues `_. 11 | 12 | How do I... 13 | ----------- 14 | 15 | ... get help? 16 | * `Forums `_ 17 | * `Issues `_ 18 | 19 | ... use the REST API directly? 20 | You can access the REST API under http://localhost:5000/api 21 | 22 | Using ElasticHQ with... 23 | ----------------------- 24 | 25 | X-Pack 26 | We have added instructions on X-Pack authentication, see :any:`xpack integration`. -------------------------------------------------------------------------------- /docs/source/index.rst: -------------------------------------------------------------------------------- 1 | ======================= 2 | ElasticHQ Documentation 3 | ======================= 4 | 5 | 6 | .. toctree:: 7 | :hidden: 8 | 9 | installation 10 | rest-api 11 | developer-guide 12 | faq 13 | 14 | Overview 15 | -------- 16 | 17 | ElasticHQ serves as a monitoring and management platform for Elasticsearch clusters. It is freely available and distributed under the Apache Software License. 18 | 19 | .. figure:: /_static/img/main_dashboard.png 20 | :width: 600px 21 | :align: center 22 | 23 | 24 | Key Features: 25 | ~~~~~~~~~~~~~ 26 | 27 | * Works with any version of Elasticsearch since v2.x, including 5.x and 6.x. 28 | * Can monitor and manage **many** clusters at the same time. 29 | * Monitor and manage clusters, nodes, indices, aliases, and shards. 30 | * Saves monitored clusters 31 | * API available for direct use from applications or command line 32 | * One-click access to commonly used Elasticsearch REST endpoints. 33 | * Runs 24/7. 34 | 35 | Project 36 | ~~~~~~~ 37 | 38 | * `HomePage `_ 39 | * `Forums `_ 40 | * `Issues `_ 41 | * `Roadmap `_ 42 | 43 | -------------------------------------------------------------------------------- /docs/source/static/empty.file: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/docs/source/static/empty.file -------------------------------------------------------------------------------- /elastichq/api/diagnostics.py: -------------------------------------------------------------------------------- 1 | """ 2 | .. module:: diagnostics 3 | 4 | .. moduleauthor:: Roy Russo 5 | """ 6 | 7 | from flask_restful import Resource 8 | 9 | from elastichq.service import DiagnosticsService 10 | from . import api 11 | from ..common.api_response import APIResponse 12 | from ..common.status_codes import HTTP_Status 13 | 14 | 15 | class DiagnosticsSummary(Resource): 16 | 17 | def get(self, cluster_name): 18 | """ 19 | Executes diagnostics rules across the cluster, and returns 20 | 21 | :type cluster_name: string 22 | :param cluster_name: 23 | :return: 24 | """ 25 | 26 | summary = DiagnosticsService().get_diagnostics_summary(cluster_name) 27 | return APIResponse(summary, HTTP_Status.CREATED, None) 28 | 29 | 30 | api.add_resource(DiagnosticsSummary, '/clusters//diagnostics/_summary', 31 | endpoint='diagnostics_summary', methods=['GET']) 32 | -------------------------------------------------------------------------------- /elastichq/api/endpoints.py: -------------------------------------------------------------------------------- 1 | __author__ = 'royrusso' 2 | 3 | # noinspection PyUnresolvedReferences 4 | from . import clusters 5 | # noinspection PyUnresolvedReferences 6 | from . import indices 7 | # noinspection PyUnresolvedReferences 8 | from . import nodes 9 | # noinspection PyUnresolvedReferences 10 | from . import status 11 | # noinspection PyUnresolvedReferences 12 | from . import diagnostics 13 | # noinspection PyUnresolvedReferences 14 | from . import rest 15 | # noinspection PyUnresolvedReferences 16 | from . import socket 17 | # noinspection PyUnresolvedReferences 18 | from . import snapshot 19 | # noinspection PyUnresolvedReferences 20 | from . import query 21 | # noinspection PyUnresolvedReferences 22 | from . import hq 23 | 24 | 25 | -------------------------------------------------------------------------------- /elastichq/api/query.py: -------------------------------------------------------------------------------- 1 | """ 2 | .. module:: query 3 | 4 | .. moduleauthor:: Roy Russo 5 | """ 6 | 7 | from flask_restful import Resource 8 | from flask import request 9 | from . import api 10 | from ..common.api_response import APIResponse 11 | from ..common.exceptions import request_wrapper, BadRequest 12 | from ..common.status_codes import HTTP_Status 13 | from ..service import QueryService 14 | 15 | 16 | class Query(Resource): 17 | 18 | @request_wrapper 19 | def post(self, cluster_name, index_name): 20 | """ 21 | 22 | """ 23 | json_data = request.get_json(force=True) 24 | params = request.values.to_dict() 25 | params.update(json_data) 26 | 27 | if json_data.get('query', None) is None: 28 | raise BadRequest('Missing query in request payload!') 29 | 30 | response = QueryService().run_query(cluster_name, index_name=index_name, query_json=json_data.get('query')) 31 | return APIResponse(response, HTTP_Status.OK, None) 32 | 33 | 34 | api.add_resource(Query, '/query//', 35 | endpoint='query', 36 | methods=['POST']) 37 | -------------------------------------------------------------------------------- /elastichq/common/JobPool.py: -------------------------------------------------------------------------------- 1 | from elastichq.globals import scheduler 2 | 3 | # TODO: rename this to Metrics Service and move to service package 4 | class JobPool(): 5 | 6 | app = None 7 | 8 | def init_app(self, app): 9 | self.app = app 10 | return self 11 | 12 | def blah(self): 13 | JOB = { 14 | 'trigger': 'interval', 15 | 'seconds': 3 # , 16 | # 'args': (app, 'in') 17 | } 18 | scheduler.add_job('job1', self.do_task, **JOB) 19 | 20 | 21 | def do_task(self): 22 | from elastichq.service import ClusterService 23 | clusters = ClusterService().get_clusters(create_if_missing=False) 24 | return clusters 25 | -------------------------------------------------------------------------------- /elastichq/common/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'royrusso' 2 | -------------------------------------------------------------------------------- /elastichq/common/api_response.py: -------------------------------------------------------------------------------- 1 | """ 2 | .. module:: apiresponse 3 | 4 | .. moduleauthor:: Roy Russo 5 | """ 6 | 7 | import time 8 | 9 | from flask import g 10 | 11 | from .status_codes import HTTP_Status 12 | from ..api import api 13 | 14 | 15 | def APIResponse(data, status_code=HTTP_Status.OK, headers=None, message=None): 16 | """ 17 | Uniform response envelope 18 | 19 | :param data: Typically an array of dicts to be returned in the JSON output 20 | :param status_code: An HTTP code 21 | :param headers: 22 | :param message: If an error or success message is added. 23 | :return: A Flask-RESTFul response 24 | """ 25 | if not isinstance(data, (list)): 26 | data = [data] 27 | 28 | diff = int((time.time() - g.start_request_timestamp) * 1000) 29 | formatted_response = {'data': data, 'status_code': status_code, 'message': message, 'response_time': diff} 30 | 31 | response = api.make_response(formatted_response, status_code) 32 | 33 | response.headers.add('Status', status_code) 34 | 35 | if headers is not None: 36 | response.headers.extend(headers) 37 | 38 | return response 39 | -------------------------------------------------------------------------------- /elastichq/common/utils.py: -------------------------------------------------------------------------------- 1 | import jmespath 2 | 3 | 4 | def string_to_bool(value): 5 | valid = {'true': True, 't': True, '1': True, 6 | 'false': False, 'f': False, '0': False, 7 | } 8 | 9 | if isinstance(value, bool): 10 | return value 11 | 12 | if not isinstance(value, str): 13 | raise ValueError('invalid literal for boolean. Not a string.') 14 | 15 | lower_value = value.lower() 16 | if lower_value in valid: 17 | return valid[lower_value] 18 | else: 19 | raise ValueError('invalid literal for boolean: "%s"' % value) 20 | 21 | 22 | def get_key_from_dict(key, dict): 23 | return jmespath.search(key, dict) 24 | 25 | 26 | def merge_two_dicts(x, y): 27 | """ 28 | https://stackoverflow.com/a/26853961/831697 29 | :param x: 30 | :param y: y-values will replace x-values. 31 | :return: 32 | """ 33 | z = x.copy() # start with x's keys and values 34 | z.update(y) # modifies z with y's keys and values & returns None 35 | return z 36 | -------------------------------------------------------------------------------- /elastichq/config/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'royrusso' 2 | -------------------------------------------------------------------------------- /elastichq/model/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'royrusso' 2 | 3 | from elastichq.model.ClusterModel import * 4 | from elastichq.model.Task import * 5 | -------------------------------------------------------------------------------- /elastichq/service/SnapshotService.py: -------------------------------------------------------------------------------- 1 | __author__ = 'royrusso' 2 | 3 | from elastichq.service import ConnectionService 4 | 5 | 6 | class SnapshotService: 7 | 8 | def get_repositories(self, cluster_name): 9 | connection = ConnectionService().get_connection(cluster_name) 10 | repos = connection.snapshot.get_repository() 11 | 12 | data = [] 13 | for repo in repos: 14 | repo_type = repos.get(repo).get('type', None) 15 | repo_item = {'repository_name': repo, 'repository_type': repo_type} 16 | data.append(repo_item) 17 | return data 18 | 19 | def get_snapshots(self, cluster_name, repository_name): 20 | connection = ConnectionService().get_connection(cluster_name) 21 | snapshots = connection.snapshot.get(repository=repository_name, snapshot='_all', request_timeout=120) 22 | snapshots = snapshots.get('snapshots', None) 23 | return snapshots 24 | -------------------------------------------------------------------------------- /elastichq/service/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'royrusso' 2 | 3 | from elastichq.service.ClusterService import * 4 | from elastichq.service.ConnectionService import * 5 | from elastichq.service.IndicesService import * 6 | from elastichq.service.NodeService import * 7 | from elastichq.service.DiagnosticsService import * 8 | from elastichq.service.QueryService import * 9 | from elastichq.service.HQService import * 10 | from elastichq.service.SnapshotService import * 11 | -------------------------------------------------------------------------------- /elastichq/service/persistence/ClusterDBService.py: -------------------------------------------------------------------------------- 1 | __author__ = 'royrusso' 2 | 3 | from elastichq.globals import db 4 | from elastichq.model import ClusterModel 5 | from elastichq.globals import LOG 6 | 7 | 8 | class ClusterDBService: 9 | """ 10 | Handles interactions with the database cluster model. 11 | """ 12 | 13 | def get_by_id(self, cluster_name): 14 | """ 15 | Fetches a cluster object from the DB 16 | :param cluster_id: cluster name 17 | :return: 18 | """ 19 | return ClusterModel.query.filter_by(cluster_name=cluster_name).one_or_none() 20 | 21 | def save_cluster(self, cluster): 22 | if self.get_by_id(cluster.cluster_name) is None: 23 | db.session.add(cluster) 24 | db.session.commit() 25 | LOG.info("Cluster Added to DB: " + cluster.cluster_name) 26 | else: 27 | LOG.info("Cluster Exists: " + cluster.cluster_name) 28 | 29 | def delete_cluster_by_name(self, cluster_name): 30 | cluster = self.get_by_id(cluster_name) 31 | db.session.delete(cluster) 32 | db.session.commit() 33 | LOG.info("Cluster Removed from DB: " + cluster.cluster_name) 34 | 35 | def get_all(self): 36 | return ClusterModel.query.all() 37 | -------------------------------------------------------------------------------- /elastichq/service/persistence/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'royrusso' 2 | 3 | from elastichq.service.persistence.ClusterDBService import * 4 | -------------------------------------------------------------------------------- /elastichq/static/images/foo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/elastichq/static/images/foo.gif -------------------------------------------------------------------------------- /elastichq/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Elastic Search - HQ 6 | 7 | 8 | 9 |
10 |
11 |
12 | 13 | 14 | -------------------------------------------------------------------------------- /elastichq/vendor/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'royrusso' 2 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | VERSION = (6, 1, 0, 'dev') 4 | __version__ = VERSION 5 | __versionstr__ = '.'.join(map(str, VERSION)) 6 | 7 | import sys 8 | 9 | if (2, 7) <= sys.version_info < (3, 2): 10 | # On Python 2.7 and Python3 < 3.2, install no-op handler to silence 11 | # `No handlers could be found for logger "elasticsearch"` message per 12 | # 13 | import logging 14 | logger = logging.getLogger('elasticsearch') 15 | logger.addHandler(logging.NullHandler()) 16 | 17 | from .client import Elasticsearch 18 | from .transport import Transport 19 | from .connection_pool import ConnectionPool, ConnectionSelector, \ 20 | RoundRobinSelector 21 | from .serializer import JSONSerializer 22 | from .connection import Connection, RequestsHttpConnection, \ 23 | Urllib3HttpConnection 24 | from .exceptions import * 25 | 26 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch/client/remote.py: -------------------------------------------------------------------------------- 1 | from .utils import NamespacedClient, query_params, _make_path, SKIP_IN_PATH 2 | 3 | class RemoteClient(NamespacedClient): 4 | @query_params() 5 | def info(self, params=None): 6 | """ 7 | ``_ 8 | """ 9 | return self.transport.perform_request('GET', '/_remote/info', 10 | params=params) 11 | 12 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch/compat.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | PY2 = sys.version_info[0] == 2 4 | 5 | if PY2: 6 | string_types = basestring, 7 | from urllib import quote_plus, urlencode, unquote 8 | from urlparse import urlparse 9 | from itertools import imap as map 10 | from Queue import Queue 11 | else: 12 | string_types = str, bytes 13 | from urllib.parse import quote_plus, urlencode, urlparse, unquote 14 | map = map 15 | from queue import Queue 16 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch/connection/__init__.py: -------------------------------------------------------------------------------- 1 | from .base import Connection 2 | from .http_requests import RequestsHttpConnection 3 | from .http_urllib3 import Urllib3HttpConnection, create_ssl_context 4 | 5 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch/connection/pooling.py: -------------------------------------------------------------------------------- 1 | try: 2 | import queue 3 | except ImportError: 4 | import Queue as queue 5 | from .base import Connection 6 | 7 | 8 | class PoolingConnection(Connection): 9 | """ 10 | Base connection class for connections that use libraries without thread 11 | safety and no capacity for connection pooling. To use this just implement a 12 | ``_make_connection`` method that constructs a new connection and returns 13 | it. 14 | """ 15 | def __init__(self, *args, **kwargs): 16 | self._free_connections = queue.Queue() 17 | super(PoolingConnection, self).__init__(*args, **kwargs) 18 | 19 | def _get_connection(self): 20 | try: 21 | return self._free_connections.get_nowait() 22 | except queue.Empty: 23 | return self._make_connection() 24 | 25 | def _release_connection(self, con): 26 | self._free_connections.put(con) 27 | 28 | def close(self): 29 | """ 30 | Explicitly close connection 31 | """ 32 | pass 33 | 34 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'royrusso' 2 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/v2/AUTHORS: -------------------------------------------------------------------------------- 1 | Honza Král 2 | Sylvain Bellemare 3 | Rob Hudson 4 | Benoss 5 | Thierry Jossermoz 6 | Benoss 7 | Andrew Phillipo 8 | Albert Cheng 9 | Aleck Landgraf 10 | Brian Mego 11 | Dan Watson 12 | Inconditus 13 | Gusev Daniil 14 | Mimee Xu 15 | Dan Watson 16 | Arsen Mamikonyan 17 | Slam <3lnc.slam@gmail.com> 18 | Carol Willing 19 | Benjamin Rigaud 20 | Warren Kiser 21 | Liam Costello 22 | Serhiy Voyt 23 | Artur Smęt 24 | David Dyball 25 | Kevin Ngo 26 | Jan Zikes 27 | Jesus Hernandez 28 | ColCarroll 29 | Andy Barilla 30 | Rajiv Bakulesh Shah 31 | Gabor Nagy 32 | Shezad Khan 33 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/elastichq/vendor/elasticsearch_dsl/v2/__init__.py -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/v2/elasticsearch_dsl/__init__.py: -------------------------------------------------------------------------------- 1 | from .query import Q 2 | from .aggs import A 3 | from .function import SF 4 | from .search import Search, MultiSearch 5 | from .field import * 6 | from .document import DocType, MetaField 7 | from .mapping import Mapping 8 | from .index import Index 9 | from .analysis import analyzer, token_filter, char_filter, tokenizer 10 | from .faceted_search import * 11 | 12 | VERSION = (2, 2, 0) 13 | __version__ = VERSION 14 | __versionstr__ = '.'.join(map(str, VERSION)) 15 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/v2/elasticsearch_dsl/exceptions.py: -------------------------------------------------------------------------------- 1 | class ElasticsearchDslException(Exception): 2 | pass 3 | 4 | 5 | class UnknownDslObject(ElasticsearchDslException): 6 | pass 7 | 8 | 9 | class ValidationException(ValueError, ElasticsearchDslException): 10 | pass 11 | 12 | 13 | class IllegalOperation(ElasticsearchDslException): 14 | pass 15 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/v2/elasticsearch_dsl/serializer.py: -------------------------------------------------------------------------------- 1 | from elastichq.vendor.elasticsearch.serializer import JSONSerializer 2 | 3 | from .utils import AttrList 4 | 5 | class AttrJSONSerializer(JSONSerializer): 6 | def default(self, data): 7 | if isinstance(data, AttrList): 8 | return data._l_ 9 | if hasattr(data, 'to_dict'): 10 | return data.to_dict() 11 | return super(AttrJSONSerializer, self).default(data) 12 | 13 | serializer = AttrJSONSerializer() 14 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/v5/AUTHORS: -------------------------------------------------------------------------------- 1 | Honza Král 2 | Sylvain Bellemare 3 | Rob Hudson 4 | Benoss 5 | Thierry Jossermoz 6 | Benoss 7 | Andrew Phillipo 8 | Albert Cheng 9 | Aleck Landgraf 10 | Brian Mego 11 | Dan Watson 12 | Inconditus 13 | Gusev Daniil 14 | Mimee Xu 15 | Dan Watson 16 | Arsen Mamikonyan 17 | Slam <3lnc.slam@gmail.com> 18 | Carol Willing 19 | Benjamin Rigaud 20 | Warren Kiser 21 | Liam Costello 22 | Serhiy Voyt 23 | Artur Smęt 24 | David Dyball 25 | Kevin Ngo 26 | Jan Zikes 27 | Jesus Hernandez 28 | ColCarroll 29 | Andy Barilla 30 | Rajiv Bakulesh Shah 31 | Gabor Nagy 32 | Shezad Khan 33 | Wim Glenn 34 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/v5/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/elastichq/vendor/elasticsearch_dsl/v5/__init__.py -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/v5/elasticsearch_dsl/__init__.py: -------------------------------------------------------------------------------- 1 | from .query import Q 2 | from .aggs import A 3 | from .function import SF 4 | from .search import Search, MultiSearch 5 | from .field import * 6 | from .document import DocType, MetaField 7 | from .mapping import Mapping 8 | from .index import Index, IndexTemplate 9 | from .analysis import analyzer, token_filter, char_filter, tokenizer 10 | from .faceted_search import * 11 | 12 | VERSION = (5, 4, 0) 13 | __version__ = VERSION 14 | __versionstr__ = '.'.join(map(str, VERSION)) 15 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/v5/elasticsearch_dsl/exceptions.py: -------------------------------------------------------------------------------- 1 | class ElasticsearchDslException(Exception): 2 | pass 3 | 4 | 5 | class UnknownDslObject(ElasticsearchDslException): 6 | pass 7 | 8 | 9 | class ValidationException(ValueError, ElasticsearchDslException): 10 | pass 11 | 12 | 13 | class IllegalOperation(ElasticsearchDslException): 14 | pass 15 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/v5/elasticsearch_dsl/serializer.py: -------------------------------------------------------------------------------- 1 | from elastichq.vendor.elasticsearch.serializer import JSONSerializer 2 | 3 | from .utils import AttrList 4 | 5 | class AttrJSONSerializer(JSONSerializer): 6 | def default(self, data): 7 | if isinstance(data, AttrList): 8 | return data._l_ 9 | if hasattr(data, 'to_dict'): 10 | return data.to_dict() 11 | return super(AttrJSONSerializer, self).default(data) 12 | 13 | serializer = AttrJSONSerializer() 14 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/v6/AUTHORS: -------------------------------------------------------------------------------- 1 | Honza Král 2 | Sylvain Bellemare 3 | Rob Hudson 4 | Benoss 5 | Thierry Jossermoz 6 | Benoss 7 | Andrew Phillipo 8 | Albert Cheng 9 | Aleck Landgraf 10 | Brian Mego 11 | Dan Watson 12 | Inconditus 13 | Gusev Daniil 14 | Mimee Xu 15 | Dan Watson 16 | Arsen Mamikonyan 17 | Slam <3lnc.slam@gmail.com> 18 | Carol Willing 19 | Benjamin Rigaud 20 | Warren Kiser 21 | Liam Costello 22 | Serhiy Voyt 23 | Artur Smęt 24 | David Dyball 25 | Kevin Ngo 26 | Jan Zikes 27 | Jesus Hernandez 28 | ColCarroll 29 | Andy Barilla 30 | Rajiv Bakulesh Shah 31 | Gabor Nagy 32 | Shezad Khan 33 | Wim Glenn 34 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/v6/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/elastichq/vendor/elasticsearch_dsl/v6/__init__.py -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/v6/elasticsearch_dsl/__init__.py: -------------------------------------------------------------------------------- 1 | from .query import Q 2 | from .aggs import A 3 | from .function import SF 4 | from .search import Search, MultiSearch 5 | from .field import * 6 | from .document import DocType, MetaField, InnerDoc 7 | from .mapping import Mapping 8 | from .index import Index, IndexTemplate 9 | from .analysis import analyzer, token_filter, char_filter, tokenizer 10 | from .faceted_search import * 11 | 12 | VERSION = (6, 1, 0) 13 | __version__ = VERSION 14 | __versionstr__ = '.'.join(map(str, VERSION)) 15 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/v6/elasticsearch_dsl/exceptions.py: -------------------------------------------------------------------------------- 1 | class ElasticsearchDslException(Exception): 2 | pass 3 | 4 | 5 | class UnknownDslObject(ElasticsearchDslException): 6 | pass 7 | 8 | 9 | class ValidationException(ValueError, ElasticsearchDslException): 10 | pass 11 | 12 | 13 | class IllegalOperation(ElasticsearchDslException): 14 | pass 15 | -------------------------------------------------------------------------------- /elastichq/vendor/elasticsearch_dsl/v6/elasticsearch_dsl/serializer.py: -------------------------------------------------------------------------------- 1 | from elastichq.vendor.elasticsearch.serializer import JSONSerializer 2 | 3 | from .utils import AttrList 4 | 5 | class AttrJSONSerializer(JSONSerializer): 6 | def default(self, data): 7 | if isinstance(data, AttrList): 8 | return data._l_ 9 | if hasattr(data, 'to_dict'): 10 | return data.to_dict() 11 | return super(AttrJSONSerializer, self).default(data) 12 | 13 | serializer = AttrJSONSerializer() 14 | -------------------------------------------------------------------------------- /example/nginx_es_5.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 443 ssl http2; 3 | server_name es.example.com; 4 | 5 | root /.../ssldocs; 6 | 7 | access_log /.../log/access.log; 8 | error_log /.../log/error.log; 9 | 10 | ssl on; 11 | ssl_certificate /etc/ssl/com.example.es.crt; 12 | ssl_certificate_key /etc/ssl/com.example.es.key; 13 | add_header Strict-Transport-Security max-age=15552000; # 180 days 14 | 15 | auth_basic "restricted area"; 16 | auth_basic_user_file /.../htpasswd; 17 | 18 | location /_plugin/hq/ { 19 | alias /.../elasticsearch-HQ/_site/; 20 | expires 300s; 21 | } 22 | 23 | location ^~ / { 24 | proxy_pass http://localhost:9200/; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /main_dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/main_dashboard.png -------------------------------------------------------------------------------- /migrations/README: -------------------------------------------------------------------------------- 1 | Generic single-database configuration. -------------------------------------------------------------------------------- /migrations/alembic.ini: -------------------------------------------------------------------------------- 1 | # A generic, single database configuration. 2 | 3 | [alembic] 4 | # template used to generate migration files 5 | # file_template = %%(rev)s_%%(slug)s 6 | 7 | # set to 'true' to run the environment during 8 | # the 'revision' command, regardless of autogenerate 9 | # revision_environment = false 10 | 11 | 12 | # Logging configuration 13 | [loggers] 14 | keys = root,sqlalchemy,alembic 15 | 16 | [handlers] 17 | keys = console 18 | 19 | [formatters] 20 | keys = generic 21 | 22 | [logger_root] 23 | level = WARN 24 | handlers = console 25 | qualname = 26 | 27 | [logger_sqlalchemy] 28 | level = WARN 29 | handlers = 30 | qualname = sqlalchemy.engine 31 | 32 | [logger_alembic] 33 | level = INFO 34 | handlers = 35 | qualname = alembic 36 | 37 | [handler_console] 38 | class = StreamHandler 39 | args = (sys.stderr,) 40 | level = NOTSET 41 | formatter = generic 42 | 43 | [formatter_generic] 44 | format = %(levelname)-5.5s [%(name)s] %(message)s 45 | datefmt = %H:%M:%S 46 | -------------------------------------------------------------------------------- /migrations/script.py.mako: -------------------------------------------------------------------------------- 1 | """${message} 2 | 3 | Revision ID: ${up_revision} 4 | Revises: ${down_revision | comma,n} 5 | Create Date: ${create_date} 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | ${imports if imports else ""} 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = ${repr(up_revision)} 14 | down_revision = ${repr(down_revision)} 15 | branch_labels = ${repr(branch_labels)} 16 | depends_on = ${repr(depends_on)} 17 | 18 | 19 | def upgrade(): 20 | ${upgrades if upgrades else "pass"} 21 | 22 | 23 | def downgrade(): 24 | ${downgrades if downgrades else "pass"} 25 | -------------------------------------------------------------------------------- /migrations/versions/e0e2a6da6956_.py: -------------------------------------------------------------------------------- 1 | """empty message 2 | 3 | Revision ID: e0e2a6da6956 4 | Revises: 5 | Create Date: 2018-02-09 15:41:17.035026 6 | 7 | """ 8 | from alembic import op 9 | import sqlalchemy as sa 10 | 11 | 12 | # revision identifiers, used by Alembic. 13 | revision = 'e0e2a6da6956' 14 | down_revision = None 15 | branch_labels = None 16 | depends_on = None 17 | 18 | 19 | def upgrade(): 20 | # ### commands auto generated by Alembic - please adjust! ### 21 | op.add_column('cluster', sa.Column('cluster_password', sa.String(), nullable=True)) 22 | op.add_column('cluster', sa.Column('cluster_username', sa.String(), nullable=True)) 23 | # ### end Alembic commands ### 24 | 25 | 26 | def downgrade(): 27 | # ### commands auto generated by Alembic - please adjust! ### 28 | op.drop_column('cluster', 'cluster_username') 29 | op.drop_column('cluster', 'cluster_password') 30 | # ### end Alembic commands ### 31 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | jmespath==0.9.3 2 | 3 | # Flask 4 | Flask==0.12.4 5 | Flask-restful==0.3.6 6 | Flask-Script==2.0.6 7 | 8 | # JSON serializer 9 | flask-marshmallow==0.8.0 10 | marshmallow-sqlalchemy==0.13.2 11 | marshmallow==3.0.0b5 12 | 13 | # requests 14 | #urllib3<1.23 15 | urllib3<1.23,>=1.21.1 16 | requests>=2.0.0, <3.0.0 17 | 18 | # Cache 19 | dogpile.cache == 0.6.5 20 | 21 | # Database 22 | SQLAlchemy==1.2.0 23 | Flask-SQLAlchemy==2.3.2 24 | Flask-Migrate 25 | 26 | # Testing 27 | coverage == 4.5.4 28 | nose == 1.3.4 29 | Flask-Testing 30 | pytest==5.0.1 31 | pytest-cov==2.7.1 32 | pytest-ordering==0.6 33 | pytest-docker-compose==3.0.0 34 | pytest-html==1.22.0 35 | 36 | # Scheduler 37 | apscheduler==3.5.0 38 | Flask-APScheduler== 1.7.1 39 | 40 | # Socket 41 | python-engineio==3.0.0 42 | python-socketio==2.1.0 43 | Flask-SocketIO==3.1.0 44 | eventlet==0.25.0 45 | 46 | # Production 47 | gunicorn==19.7.1 48 | 49 | # Elasticsearch 50 | six==1.11.0 51 | python-dateutil==2.7.2 -------------------------------------------------------------------------------- /run-tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | python manage.py run-tests 4 | 5 | python manage.py run-tests --esv=2 6 | 7 | python manage.py run-tests --esv=5 8 | 9 | python manage.py run-tests --esv=6 10 | 11 | python manage.py run-tests --esv=7 -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | from setuptools import setup, find_packages 4 | 5 | requirements = open('requirements.txt').read() 6 | 7 | setup( 8 | name='elastichq', 9 | version='3.3.0', 10 | description='elasticsearch headquarter management webinterface', 11 | author='royrusso', 12 | author_email='', 13 | packages=find_packages(), 14 | include_package_data=True, 15 | scripts=[ 16 | 'scripts/elastichq', 17 | ], 18 | install_requires=requirements, 19 | ) 20 | 21 | -------------------------------------------------------------------------------- /sphinx-requirements.txt: -------------------------------------------------------------------------------- 1 | # Docs 2 | Sphinx>=1.3.0,<1.5.0 3 | guzzle_sphinx_theme 4 | sphinxcontrib-httpdomain==1.6.0 5 | 6 | ### Removed fulltoc - not working with py3.6 7 | #sphinxcontrib-fulltoc==1.2.0 -------------------------------------------------------------------------------- /tests/.gitignore: -------------------------------------------------------------------------------- 1 | .coveragerc 2 | .cache 3 | cover -------------------------------------------------------------------------------- /tests/README.md: -------------------------------------------------------------------------------- 1 | # Requirements 2 | 3 | This test suite attempts to test against all major versions of ES. I haven't found a good/easy/configurable way to toggle some versions on or off, so it just is for now. 4 | 5 | * You MUST have the correct versions of ES running that are configured under ``elastichq.config.test_settings.py``. 6 | * ALL clusters must have unique cluster names, for connection pooling tests to pass. 7 | * There are two scripts I used to start and kill all of my ES clusters on my development server, you can find under ``tests/scripts``. 8 | 9 | # Running Tests 10 | 11 | I typically run the tests from inside of PyCharm, as it provides a cleaner view of failures, but from command line, you can do: ``manage.py run-tests`` -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- 1 | def setup_package(): 2 | pass 3 | 4 | 5 | def teardown_package(): 6 | pass 7 | -------------------------------------------------------------------------------- /tests/combined/__init__.py: -------------------------------------------------------------------------------- 1 | __author__ = 'royrusso' 2 | -------------------------------------------------------------------------------- /tests/data/indices_list.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "index": "cars", 4 | "data_type": "data", 5 | "data_file": "dataset_cars.json", 6 | "mapping_file": "mapping_cars.json", 7 | "aliases": [ 8 | { 9 | "alias": "alias1" 10 | }, 11 | { 12 | "alias": "alias2" 13 | } 14 | ] 15 | } 16 | ] -------------------------------------------------------------------------------- /tests/data/mapping_cars.json: -------------------------------------------------------------------------------- 1 | { 2 | "settings": { 3 | "index": { 4 | "number_of_shards": 5, 5 | "number_of_replicas": 1 6 | } 7 | }, 8 | "mappings": { 9 | "data": { 10 | "properties": { 11 | "make_id": { 12 | "type": "string" 13 | }, 14 | "make_display": { 15 | "type": "string" 16 | }, 17 | "make_is_common": { 18 | "type": "integer" 19 | }, 20 | "make_country": { 21 | "type": "string" 22 | } 23 | } 24 | } 25 | } 26 | } -------------------------------------------------------------------------------- /tests/es_versions/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/tests/es_versions/__init__.py -------------------------------------------------------------------------------- /tests/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Coverage Report 7 |
8 | ElasticHQ Tests
9 | Elasticsearch 2.x Tests
10 | Elasticsearch 5.x Tests
11 | Elasticsearch 6.x Tests
12 | Elasticsearch 7.x Tests 13 | -------------------------------------------------------------------------------- /tests/local/README.md: -------------------------------------------------------------------------------- 1 | Used for local testing against different versions using the UI: 2 | 3 | To start a version: 4 | 5 | docker-compose -f v2_docker_compose.yml up --force-recreate 6 | 7 | docker-compose -f v5_docker_compose.yml up --force-recreate 8 | 9 | docker-compose -f v6_docker_compose.yml up --force-recreate 10 | 11 | docker-compose -f v7_docker_compose.yml up --force-recreate 12 | 13 | The versions will run on different ports: 14 | 15 | V2: 9200 16 | V5: 8200 17 | V6: 7200 18 | V7: 6200 -------------------------------------------------------------------------------- /tests/local/kill_es_versions.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker-compose -f v2/docker-compose.yml down 4 | docker-compose -f v5/docker-compose.yml down 5 | docker-compose -f v6/docker-compose.yml down 6 | docker-compose -f v7/docker-compose.yml down 7 | -------------------------------------------------------------------------------- /tests/local/run_es_versions.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker-compose -f v2/docker-compose.yml up -d 4 | docker-compose -f v5/docker-compose.yml up -d 5 | docker-compose -f v6/docker-compose.yml up -d 6 | docker-compose -f v7/docker-compose.yml up -d 7 | -------------------------------------------------------------------------------- /tests/local/v2/.env: -------------------------------------------------------------------------------- 1 | COMPOSE_PROJECT_NAME=esv2 -------------------------------------------------------------------------------- /tests/local/v2/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | elasticsearch: 4 | image: elasticsearch:2.4.6 5 | container_name: elasticsearch2 6 | environment: 7 | - cluster.name=elasticsearch2 8 | - node.name=node_1 9 | - network.host=0.0.0.0 10 | - network.publish_host=0.0.0.0 11 | - http.cors.allow-headers=Authorization 12 | - bootstrap.memory_lock=true 13 | - http.cors.enabled=true 14 | - http.cors.allow-origin=* 15 | - http.host=0.0.0.0 16 | - transport.host=0.0.0.0 17 | - bootstrap.system_call_filter=false 18 | - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 19 | volumes: 20 | - esdata2:/usr/share/elasticsearch2/data 21 | #- ./elasticsearch_2_4_6.yml:/usr/share/elasticsearch/config/elasticsearch_2_4_6.yml 22 | ports: 23 | - 9200:9200 24 | - 9300:9300 25 | ulimits: 26 | memlock: 27 | soft: -1 28 | hard: -1 29 | networks: 30 | - esnet2 31 | 32 | volumes: 33 | esdata2: 34 | driver: local 35 | networks: 36 | esnet2: 37 | driver: bridge -------------------------------------------------------------------------------- /tests/local/v5/.env: -------------------------------------------------------------------------------- 1 | COMPOSE_PROJECT_NAME=esv5 -------------------------------------------------------------------------------- /tests/local/v5/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | elasticsearch: 4 | image: elasticsearch:5.6.16 5 | container_name: elasticsearch5 6 | environment: 7 | - cluster.name=elasticsearch5 8 | - node.name=node_1 9 | - network.host=0.0.0.0 10 | - network.publish_host=0.0.0.0 11 | - http.cors.allow-headers=Authorization 12 | - bootstrap.memory_lock=true 13 | - http.cors.enabled=true 14 | - http.cors.allow-origin=* 15 | - http.host=0.0.0.0 16 | - transport.host=0.0.0.0 17 | - bootstrap.system_call_filter=false 18 | - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 19 | volumes: 20 | - esdata5:/usr/share/elasticsearch5/data 21 | #- ./elasticsearch_2_4_6.yml:/usr/share/elasticsearch/config/elasticsearch_2_4_6.yml 22 | ports: 23 | - 8200:9200 24 | - 8300:9300 25 | ulimits: 26 | memlock: 27 | soft: -1 28 | hard: -1 29 | networks: 30 | - esnet5 31 | 32 | volumes: 33 | esdata5: 34 | driver: local 35 | networks: 36 | esnet5: 37 | driver: bridge -------------------------------------------------------------------------------- /tests/local/v6/.env: -------------------------------------------------------------------------------- 1 | COMPOSE_PROJECT_NAME=esv6 -------------------------------------------------------------------------------- /tests/local/v6/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | elasticsearch: 4 | image: elasticsearch:6.8.2 5 | container_name: elasticsearch6 6 | environment: 7 | - cluster.name=elasticsearch6 8 | - node.name=node_1 9 | - network.host=0.0.0.0 10 | - network.publish_host=0.0.0.0 11 | - http.cors.allow-headers=Authorization 12 | - bootstrap.memory_lock=true 13 | - http.cors.enabled=true 14 | - http.cors.allow-origin=* 15 | - http.host=0.0.0.0 16 | - transport.host=0.0.0.0 17 | - bootstrap.system_call_filter=false 18 | - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 19 | volumes: 20 | - esdata6:/usr/share/elasticsearch6/data 21 | #- ./elasticsearch_2_4_6.yml:/usr/share/elasticsearch/config/elasticsearch_2_4_6.yml 22 | ports: 23 | - 7200:9200 24 | - 7300:9300 25 | ulimits: 26 | memlock: 27 | soft: -1 28 | hard: -1 29 | networks: 30 | - esnet6 31 | 32 | volumes: 33 | esdata6: 34 | driver: local 35 | networks: 36 | esnet6: 37 | driver: bridge -------------------------------------------------------------------------------- /tests/local/v7/.env: -------------------------------------------------------------------------------- 1 | COMPOSE_PROJECT_NAME=esv7 -------------------------------------------------------------------------------- /tests/local/v7/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | elasticsearch: 4 | image: elasticsearch:7.3.0 5 | container_name: elasticsearch7 6 | environment: 7 | - cluster.name=elasticsearch7 8 | - discovery.type=single-node 9 | - node.name=node_1 10 | - network.host=0.0.0.0 11 | - network.publish_host=0.0.0.0 12 | - http.cors.allow-headers=Authorization 13 | - bootstrap.memory_lock=true 14 | - http.cors.enabled=true 15 | - http.cors.allow-origin=* 16 | - http.host=0.0.0.0 17 | - transport.host=0.0.0.0 18 | - bootstrap.system_call_filter=false 19 | - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 20 | volumes: 21 | - esdata7:/usr/share/elasticsearch7/data 22 | #- ./elasticsearch_2_4_6.yml:/usr/share/elasticsearch/config/elasticsearch_2_4_6.yml 23 | ports: 24 | - 6200:9200 25 | - 6300:9300 26 | ulimits: 27 | memlock: 28 | soft: -1 29 | hard: -1 30 | networks: 31 | - esnet7 32 | 33 | volumes: 34 | esdata7: 35 | driver: local 36 | networks: 37 | esnet7: 38 | driver: bridge -------------------------------------------------------------------------------- /tests/pytest.ini: -------------------------------------------------------------------------------- 1 | [pytest] 2 | markers = 3 | hq_ops: HQ-specific operations. Uses Flask + ES 2.x for now. 4 | es_versions: Elasticsearch version-specific operations. 5 | 6 | ;addopts = '' 7 | 8 | log_cli = 1 9 | log_cli_level = INFO 10 | log_cli_format = %(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s) 11 | log_cli_date_format=%Y-%m-%d %H:%M:%S 12 | 13 | ; 14 | ;log_file = pytest.log 15 | ;log_file_level = DEBUG 16 | ;log_file_format = %(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s) 17 | ;log_file_date_format=%Y-%m-%d %H:%M:%S 18 | -------------------------------------------------------------------------------- /tests/v2_docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | elasticsearch: 4 | image: elasticsearch:2.4.6 5 | container_name: elasticsearch 6 | environment: 7 | - cluster.name=elasticsearch 8 | - node.name=node_1 9 | - network.host=0.0.0.0 10 | - network.publish_host=0.0.0.0 11 | - http.cors.allow-headers=Authorization 12 | - bootstrap.memory_lock=true 13 | - http.cors.enabled=true 14 | - http.cors.allow-origin=* 15 | - http.host=0.0.0.0 16 | - transport.host=0.0.0.0 17 | - bootstrap.system_call_filter=false 18 | - "ES_JAVA_OPTS=-Xms1g -Xmx1g" 19 | volumes: 20 | - esdata1:/usr/share/elasticsearch/data 21 | #- ./elasticsearch_2_4_6.yml:/usr/share/elasticsearch/config/elasticsearch_2_4_6.yml 22 | ports: 23 | - 9200:9200 24 | - 9300:9300 25 | ulimits: 26 | memlock: 27 | soft: -1 28 | hard: -1 29 | networks: 30 | - esnet 31 | 32 | volumes: 33 | esdata1: 34 | driver: local 35 | networks: 36 | esnet: 37 | driver: bridge -------------------------------------------------------------------------------- /tests/v5_docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | elasticsearch: 4 | image: elasticsearch:5.6.16 5 | container_name: elasticsearch 6 | environment: 7 | - cluster.name=elasticsearch 8 | - node.name=node_1 9 | - network.host=0.0.0.0 10 | - network.publish_host=0.0.0.0 11 | - http.cors.allow-headers=Authorization 12 | - bootstrap.memory_lock=true 13 | - http.cors.enabled=true 14 | - http.cors.allow-origin=* 15 | - http.host=0.0.0.0 16 | - transport.host=0.0.0.0 17 | - bootstrap.system_call_filter=false 18 | - "ES_JAVA_OPTS=-Xms1g -Xmx1g" 19 | volumes: 20 | - esdata1:/usr/share/elasticsearch/data 21 | #- ./elasticsearch_2_4_6.yml:/usr/share/elasticsearch/config/elasticsearch_2_4_6.yml 22 | ports: 23 | - 9200:9200 24 | - 9300:9300 25 | ulimits: 26 | memlock: 27 | soft: -1 28 | hard: -1 29 | networks: 30 | - esnet 31 | 32 | volumes: 33 | esdata1: 34 | driver: local 35 | networks: 36 | esnet: 37 | driver: bridge -------------------------------------------------------------------------------- /tests/v6_docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | elasticsearch: 4 | image: elasticsearch:6.8.2 5 | container_name: elasticsearch 6 | environment: 7 | - cluster.name=elasticsearch 8 | - node.name=node_1 9 | - network.host=0.0.0.0 10 | - network.publish_host=0.0.0.0 11 | - http.cors.allow-headers=Authorization 12 | - bootstrap.memory_lock=true 13 | - http.cors.enabled=true 14 | - http.cors.allow-origin=* 15 | - http.host=0.0.0.0 16 | - transport.host=0.0.0.0 17 | - bootstrap.system_call_filter=false 18 | - "ES_JAVA_OPTS=-Xms1g -Xmx1g" 19 | volumes: 20 | - esdata1:/usr/share/elasticsearch/data 21 | #- ./elasticsearch_2_4_6.yml:/usr/share/elasticsearch/config/elasticsearch_2_4_6.yml 22 | ports: 23 | - 9200:9200 24 | - 9300:9300 25 | ulimits: 26 | memlock: 27 | soft: -1 28 | hard: -1 29 | networks: 30 | - esnet 31 | 32 | volumes: 33 | esdata1: 34 | driver: local 35 | networks: 36 | esnet: 37 | driver: bridge -------------------------------------------------------------------------------- /tests/v7_docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | elasticsearch: 4 | image: elasticsearch:7.3.0 5 | container_name: elasticsearch 6 | environment: 7 | - cluster.name=elasticsearch 8 | - discovery.type=single-node 9 | - node.name=node_1 10 | - network.host=0.0.0.0 11 | - network.publish_host=0.0.0.0 12 | - http.cors.allow-headers=Authorization 13 | - bootstrap.memory_lock=true 14 | - http.cors.enabled=true 15 | - http.cors.allow-origin=* 16 | - http.host=0.0.0.0 17 | - transport.host=0.0.0.0 18 | - bootstrap.system_call_filter=false 19 | - "ES_JAVA_OPTS=-Xms1g -Xmx1g" 20 | volumes: 21 | - esdata1:/usr/share/elasticsearch/data 22 | #- ./elasticsearch_2_4_6.yml:/usr/share/elasticsearch/config/elasticsearch_2_4_6.yml 23 | ports: 24 | - 9200:9200 25 | - 9300:9300 26 | ulimits: 27 | memlock: 28 | soft: -1 29 | hard: -1 30 | networks: 31 | - esnet 32 | 33 | volumes: 34 | esdata1: 35 | driver: local 36 | networks: 37 | esnet: 38 | driver: bridge -------------------------------------------------------------------------------- /ui/build_scripts/make_test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | export default function (testName, objectType) { 4 | return ` 5 | // Stubbed test. 6 | describe('${testName} ${objectType}', () => { 7 | it('base test', () => { 8 | expect(1).toEqual(1); 9 | }); 10 | }); 11 | ` 12 | } -------------------------------------------------------------------------------- /ui/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Elastic Search - HQ 6 | 7 | 8 | 9 |
10 |
11 |
12 | 13 | 14 | -------------------------------------------------------------------------------- /ui/src/app.module.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | // node modules 4 | import 'babel-polyfill'; 5 | import angular from 'angular'; 6 | import uiRouter from '@uirouter/angularjs'; 7 | import uiBootstrap from 'angular-ui-bootstrap'; 8 | import hljs from 'angular-highlightjs'; 9 | import tableSort from 'angular-tablesort'; 10 | import uiNotification from 'angular-ui-notification'; 11 | 12 | // Routes 13 | import config from './app.config.js'; 14 | import CommonComponents from './components/common-components'; 15 | import CommonContainers from './containers/common-containers'; 16 | import CommonFactories from './factories/common-factories'; 17 | import CommonFilters from './filters/common-filters'; 18 | import CommonServices from './services/common-services'; 19 | 20 | // Main Layout 21 | import './styles/base.scss'; 22 | 23 | 24 | angular.module('eshq',[ 25 | uiRouter, 26 | uiBootstrap, 27 | CommonComponents, 28 | CommonContainers, 29 | CommonFactories, 30 | CommonFilters, 31 | CommonServices, 32 | hljs, 33 | uiNotification, 34 | tableSort 35 | ]) 36 | .config(config) 37 | .run(($transitions, Notification, QueuedFactory) => { 38 | 'use strict'; 39 | 'ngInject'; 40 | 41 | $transitions.onBefore({ to: '**' }, function(transtion) { 42 | Notification.clearAll(); 43 | // QueuedFactory.cancelAll(); 44 | }) 45 | }) -------------------------------------------------------------------------------- /ui/src/components/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/ui/src/components/README.md -------------------------------------------------------------------------------- /ui/src/components/api-endpoints/api-endpoints.component.js: -------------------------------------------------------------------------------- 1 | import template from './api-endpoints.template.html'; 2 | import controller from './api-endpoints.controller'; 3 | 4 | const apiEndpointsComponent = { 5 | template, 6 | controller, 7 | controllerAs: 'apiEndpointsCtrl' 8 | }; 9 | 10 | export default apiEndpointsComponent; 11 | -------------------------------------------------------------------------------- /ui/src/components/api-endpoints/api-endpoints.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import apiEndpoints from './api-endpoints.component'; 3 | 4 | export default angular.module('eshq.apiEndpoints', []) 5 | .component('eshqApiEndpoints', apiEndpoints) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/api-endpoints/api-endpoints.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('api-endpoints Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/api-endpoints/api-endpoints.style.scss: -------------------------------------------------------------------------------- 1 | .api-endpoints { 2 | min-height: 400px; 3 | display: flex; 4 | flex-direction: row; 5 | > div { 6 | min-height: 200px; 7 | width: 100%; 8 | } 9 | .left-nav { 10 | width: 240px; 11 | margin-right: 2em; 12 | padding: 10px; 13 | .options-group { 14 | margin-bottom: 1em; 15 | .api-label { 16 | font-size: 1.15em; 17 | text-transform: uppercase; 18 | } 19 | .api-option { 20 | display: block; 21 | padding: 3px; 22 | border-bottom: 1px solid rgb(230, 230, 230); 23 | &:hover { 24 | background: rgb(230, 230, 230); 25 | text-decoration: none; 26 | cursor: pointer; 27 | } 28 | } 29 | 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /ui/src/components/api-endpoints/api-endpoints.template.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
5 |
{{label}}
6 | 9 | {{opt.short_label}} 10 |
11 |
12 |
13 |
14 |
17 |
18 |
19 |
-------------------------------------------------------------------------------- /ui/src/components/cluster-navigation/cluster-navigation.component.js: -------------------------------------------------------------------------------- 1 | import template from './cluster-navigation.template.html'; 2 | import controller from './cluster-navigation.controller'; 3 | 4 | const clusterNavigationComponent = { 5 | bindings: { 6 | summary: '=?' 7 | }, 8 | template, 9 | controller, 10 | controllerAs: 'clusterNavCtrl' 11 | }; 12 | 13 | export default clusterNavigationComponent; 14 | -------------------------------------------------------------------------------- /ui/src/components/cluster-navigation/cluster-navigation.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import clusterNavigation from './cluster-navigation.component'; 3 | 4 | export default angular.module('eshq.clusterNavigation', []) 5 | .component('eshqClusterNavigation', clusterNavigation) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/cluster-navigation/cluster-navigation.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-navigation Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/cluster-navigation/cluster-navigation.style.css: -------------------------------------------------------------------------------- 1 | .cluster-navigation { 2 | margin-left: -15px; 3 | margin-right: -15px; 4 | margin-bottom: 1em; 5 | padding: 10px; 6 | border-bottom: solid rgba(91, 141, 176, 0.15) thin; 7 | border-top: solid rgba(91, 141, 176, 0.15) thin; 8 | background-color: rgba(242, 242, 242, 0.58); } 9 | .cluster-navigation .cluster-name { 10 | font-size: 1.6em; } 11 | .cluster-navigation .nodes > a.btn { 12 | margin-right: 0.5em; } 13 | 14 | .status_color_red { 15 | color: red; } 16 | 17 | .status_color_yellow { 18 | color: #ffb02a; } 19 | 20 | .status_color_green { 21 | color: green; } 22 | 23 | /*# sourceMappingURL=cluster-navigation.style.css.map */ 24 | -------------------------------------------------------------------------------- /ui/src/components/cluster-navigation/cluster-navigation.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAAA,mBAAoB;EAClB,WAAW,EAAE,KAAK;EAClB,YAAY,EAAE,KAAK;EACnB,aAAa,EAAE,GAAG;EAClB,OAAO,EAAE,IAAI;EAOb,aAAa,EAAE,mCAAmC;EAClD,UAAU,EAAE,mCAAmC;EAC/C,gBAAgB,EAAE,yBAAyB;EAR3C,iCAAc;IACV,SAAS,EAAE,KAAK;EAEpB,kCAAe;IACb,YAAY,EAAE,KAAK;;AAOvB,iBAAkB;EACd,KAAK,EAAC,GAAG;;AAEb,oBAAqB;EACjB,KAAK,EAAE,OAAO;;AAElB,mBAAoB;EAChB,KAAK,EAAC,KAAK", 4 | "sources": ["cluster-navigation.style.scss"], 5 | "names": [], 6 | "file": "cluster-navigation.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/components/cluster-navigation/cluster-navigation.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .cluster-navigation { 4 | margin-left: -15px; 5 | margin-right: -15px; 6 | margin-bottom: 1em; 7 | padding: 10px; 8 | .cluster-name { 9 | font-size: 1.6em; 10 | 11 | small { 12 | font-size: .5em; 13 | color: $gray-light; 14 | } 15 | } 16 | .nodes { 17 | .popover { 18 | color: #000; 19 | } 20 | > a.btn { 21 | margin-right: 0.5em; 22 | } 23 | .btn { 24 | margin-right: 0.5em; 25 | } 26 | } 27 | border-bottom: solid rgba(91, 141, 176, 0.15) thin; 28 | border-top: solid rgba(91, 141, 176, 0.15) thin; 29 | background-color: rgba(242, 242, 242, 0.58); 30 | 31 | .btn-group { 32 | li > a { 33 | border-bottom: 1px solid #ccc; 34 | font-size: $font-size-medium; 35 | &.active { 36 | color: $state-info-text; 37 | background: $btn-primary-bg; 38 | } 39 | } 40 | } 41 | } 42 | 43 | .status_color_red { 44 | color: red; 45 | } 46 | 47 | .status_color_yellow { 48 | color: #ffb02a; 49 | } 50 | 51 | .status_color_green { 52 | color: green; 53 | } -------------------------------------------------------------------------------- /ui/src/components/cluster-nodes-line-graph/cluster-nodes-line-graph.component.js: -------------------------------------------------------------------------------- 1 | import template from './cluster-nodes-line-graph.template.html'; 2 | import controller from './cluster-nodes-line-graph.controller'; 3 | 4 | const clusterNodesLineGraphComponent = { 5 | bindings: { 6 | key: '<', 7 | data: '<', 8 | numFormat: '<', 9 | header: '<', 10 | allowRendering: '<' 11 | }, 12 | template, 13 | controller, 14 | controllerAs: 'cNLGraphCtrl' 15 | }; 16 | 17 | export default clusterNodesLineGraphComponent; 18 | -------------------------------------------------------------------------------- /ui/src/components/cluster-nodes-line-graph/cluster-nodes-line-graph.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import clusterNodesLineGraph from './cluster-nodes-line-graph.component'; 3 | 4 | export default angular.module('eshq.clusterNodesLineGraph', []) 5 | .component('eshqClusterNodesLineGraph', clusterNodesLineGraph) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/cluster-nodes-line-graph/cluster-nodes-line-graph.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-nodes-line-graph Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/cluster-nodes-line-graph/cluster-nodes-line-graph.style.scss: -------------------------------------------------------------------------------- 1 | .cluster-nodes-line-graph { 2 | .outer-container { 3 | // remove bootsrap padding as graph will have it's own 4 | margin-left: -15px; 5 | margin-right: -15px; 6 | } 7 | } 8 | 9 | .node-line-graph-tooltip { 10 | position: absolute; 11 | padding: 3px 5px; 12 | background: #2d2d2d; 13 | color: #eee; 14 | max-width: 300px; 15 | display: flex; 16 | flex-direction: column; 17 | font-size: 12px; 18 | > div { 19 | flex-direction: row; 20 | > div { 21 | display: inline-flex; 22 | padding: 2px 5px; 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /ui/src/components/cluster-nodes-line-graph/cluster-nodes-line-graph.template.html: -------------------------------------------------------------------------------- 1 |
2 |

{{cNLGraphCtrl.header || cNLGraphCtrl.key}}

3 |
4 |
5 |
6 |
-------------------------------------------------------------------------------- /ui/src/components/cluster-summary/cluster-summary.component.js: -------------------------------------------------------------------------------- 1 | import template from './cluster-summary.template.html'; 2 | import controller from './cluster-summary.controller'; 3 | 4 | const clusterSummaryComponent = { 5 | bindings: { 6 | summary: '=' 7 | }, 8 | template, 9 | controller, 10 | controllerAs: 'clusterSummaryCtrl' 11 | }; 12 | 13 | export default clusterSummaryComponent; 14 | -------------------------------------------------------------------------------- /ui/src/components/cluster-summary/cluster-summary.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import clusterSummary from './cluster-summary.component'; 3 | 4 | export default angular.module('eshq.clusterSummary', []) 5 | .component('eshqClusterSummary', clusterSummary) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/cluster-summary/cluster-summary.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-summary Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/cluster-summary/cluster-summary.style.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | /*# sourceMappingURL=cluster-summary.style.css.map */ 4 | -------------------------------------------------------------------------------- /ui/src/components/cluster-summary/cluster-summary.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "", 4 | "sources": [], 5 | "names": [], 6 | "file": "cluster-summary.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/components/cluster-summary/cluster-summary.template.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |

{{item.value}}

8 |
9 |
10 | {{item.label}} 11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
{{item.value}}
20 |
{{item.label}} 21 |
22 |
23 |
24 |
25 |
26 |
-------------------------------------------------------------------------------- /ui/src/components/clusters-button/clusters-button.component.js: -------------------------------------------------------------------------------- 1 | import template from './clusters-button.template.html'; 2 | import controller from './clusters-button.controller'; 3 | 4 | const clustersButtonComponent = { 5 | template, 6 | controller, 7 | controllerAs: 'clustersButtonCtrl' 8 | }; 9 | 10 | export default clustersButtonComponent; 11 | -------------------------------------------------------------------------------- /ui/src/components/clusters-button/clusters-button.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import clustersButton from './clusters-button.component'; 3 | 4 | export default angular.module('eshq.clustersButton', []) 5 | .component('eshqClustersButton', clustersButton) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/clusters-button/clusters-button.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('clusters-button Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/clusters-button/clusters-button.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .clusters-button { 4 | .cluster-name-success { 5 | font-size: 1.2em; 6 | display: block; 7 | color: $brand-success; 8 | } 9 | .cluster-name-warning { 10 | font-size: 1.2em; 11 | display: block; 12 | color: $brand-danger; 13 | } 14 | .cluster-host { 15 | font-style: italic; 16 | } 17 | 18 | .hr { 19 | padding: 0; 20 | margin: 0; 21 | } 22 | } -------------------------------------------------------------------------------- /ui/src/components/clusters/add-cluster-modal.html: -------------------------------------------------------------------------------- 1 | 6 | 20 | -------------------------------------------------------------------------------- /ui/src/components/clusters/clusters.component.js: -------------------------------------------------------------------------------- 1 | import template from './clusters.template.html'; 2 | import controller from './clusters.controller'; 3 | 4 | const clustersComponent = { 5 | template, 6 | controller, 7 | controllerAs: 'clustersCtrl', 8 | fetchFn: '&?' 9 | }; 10 | 11 | export default clustersComponent; 12 | -------------------------------------------------------------------------------- /ui/src/components/clusters/clusters.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import clusters from './clusters.component'; 3 | 4 | export default angular.module('eshq.clusters', []) 5 | .component('eshqClusters', clusters) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/clusters/clusters.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('clusters Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/clusters/clusters.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .clusters { 4 | .table { 5 | thead { 6 | th { 7 | //width: 100%; 8 | cursor: pointer; 9 | font-size: $font-size-medium; 10 | white-space: nowrap; 11 | } 12 | } 13 | tbody { 14 | td.health { 15 | padding: 8px 3px; 16 | &.green { 17 | background: $brand-success; 18 | } 19 | &.yellow { 20 | background: $brand-warning; 21 | } 22 | &.red { 23 | background: $brand-danger; 24 | } 25 | } 26 | 27 | td.index_info { 28 | font-size: $font-size-medium; 29 | } 30 | } 31 | } 32 | } 33 | 34 | .edit-cluster-settings-modal { 35 | .checkbox { 36 | margin-top: 0; 37 | label { 38 | display: flex; 39 | align-items: center; 40 | } 41 | } 42 | label, .checkbox label { 43 | font-size: 14px; 44 | font-weight: bold; 45 | } 46 | } -------------------------------------------------------------------------------- /ui/src/components/footer/footer.component.js: -------------------------------------------------------------------------------- 1 | import template from './footer.template.html'; 2 | import controller from './footer.controller'; 3 | 4 | const footerComponent = { 5 | template, 6 | controller, 7 | controllerAs: 'footerCtrl' 8 | }; 9 | 10 | export default footerComponent; 11 | -------------------------------------------------------------------------------- /ui/src/components/footer/footer.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import footer from './footer.component'; 3 | 4 | export default angular.module('eshq.footer', []) 5 | .component('eshqFooter', footer) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/footer/footer.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('footer Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/footer/footer.style.scss: -------------------------------------------------------------------------------- 1 | .footer { 2 | text-align: center; 3 | width: 100%; 4 | display: flex; 5 | align-items: center; 6 | border-top: 1px solid #e5e5e5; 7 | background-color: #f5f5f5; 8 | font-size: 14px; 9 | .mini-alert { 10 | padding: 4px; 11 | } 12 | p { 13 | margin-bottom: 0; 14 | color: #777; 15 | } 16 | 17 | .footer-links { 18 | margin: 10px 0; 19 | } 20 | 21 | .footer-links li { 22 | display: inline; 23 | padding: 0 2px; 24 | } 25 | 26 | .footer-links li:first-child { 27 | padding-left: 0; 28 | } 29 | } -------------------------------------------------------------------------------- /ui/src/components/index-administration-tab-content/index-administration-tab-content.component.js: -------------------------------------------------------------------------------- 1 | import template from './index-administration-tab-content.template.html'; 2 | import controller from './index-administration-tab-content.controller'; 3 | 4 | const indexAdministrationTabContentComponent = { 5 | template, 6 | controller, 7 | controllerAs: 'indexAdministrationTabContentCtrl' 8 | }; 9 | 10 | export default indexAdministrationTabContentComponent; 11 | -------------------------------------------------------------------------------- /ui/src/components/index-administration-tab-content/index-administration-tab-content.controller.js: -------------------------------------------------------------------------------- 1 | import './index-administration-tab-content.style.scss' 2 | 3 | class indexAdministrationTabContentController { 4 | 5 | } 6 | 7 | export default indexAdministrationTabContentController; 8 | -------------------------------------------------------------------------------- /ui/src/components/index-administration-tab-content/index-administration-tab-content.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import indexAdministrationTabContent from './index-administration-tab-content.component'; 3 | 4 | export default angular.module('eshq.indexAdministrationTabContent', []) 5 | .component('eshqIndexAdministrationTabContent', indexAdministrationTabContent) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/index-administration-tab-content/index-administration-tab-content.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('index-administration-tab-content Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/index-administration-tab-content/index-administration-tab-content.style.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | /*# sourceMappingURL=index-administration-tab-content.style.css.map */ 4 | -------------------------------------------------------------------------------- /ui/src/components/index-administration-tab-content/index-administration-tab-content.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "", 4 | "sources": [], 5 | "names": [], 6 | "file": "index-administration-tab-content.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/components/index-administration-tab-content/index-administration-tab-content.style.scss: -------------------------------------------------------------------------------- 1 | .index-administration-tab-content { 2 | 3 | } -------------------------------------------------------------------------------- /ui/src/components/index-aliases-tab-content/create-alias-modal.html: -------------------------------------------------------------------------------- 1 | 6 | 16 | -------------------------------------------------------------------------------- /ui/src/components/index-aliases-tab-content/index-aliases-tab-content.component.js: -------------------------------------------------------------------------------- 1 | import template from './index-aliases-tab-content.template.html'; 2 | import controller from './index-aliases-tab-content.controller'; 3 | 4 | const indexAliasesTabContentComponent = { 5 | bindings: { 6 | aliases: '<', 7 | fetchFn: '&?' 8 | }, 9 | template, 10 | controller, 11 | controllerAs: 'iATabContentCtrl' 12 | }; 13 | 14 | export default indexAliasesTabContentComponent; 15 | -------------------------------------------------------------------------------- /ui/src/components/index-aliases-tab-content/index-aliases-tab-content.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import indexAliasesTabContent from './index-aliases-tab-content.component'; 3 | 4 | export default angular.module('eshq.indexAliasesTabContent', []) 5 | .component('eshqIndexAliasesTabContent', indexAliasesTabContent) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/index-aliases-tab-content/index-aliases-tab-content.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('index-aliases-tab-content Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/index-aliases-tab-content/index-aliases-tab-content.style.scss: -------------------------------------------------------------------------------- 1 | .index-aliases-tab-content { 2 | 3 | } -------------------------------------------------------------------------------- /ui/src/components/index-aliases-tab-content/index-aliases-tab-content.template.html: -------------------------------------------------------------------------------- 1 |
2 | Create Alias 4 |
5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 |
IndexAlias
{{alias.index_name}}{{alias.alias}}
25 |
-------------------------------------------------------------------------------- /ui/src/components/index-mappings-tab-content/index-mappings-tab-content.component.js: -------------------------------------------------------------------------------- 1 | import template from './index-mappings-tab-content.template.html'; 2 | import controller from './index-mappings-tab-content.controller'; 3 | 4 | const indexMappingsTabContentComponent = { 5 | bindings: { 6 | mappings: '<' 7 | }, 8 | template, 9 | controller, 10 | controllerAs: 'iMTContentCtrl' 11 | }; 12 | 13 | export default indexMappingsTabContentComponent; 14 | -------------------------------------------------------------------------------- /ui/src/components/index-mappings-tab-content/index-mappings-tab-content.controller.js: -------------------------------------------------------------------------------- 1 | import './index-mappings-tab-content.style.scss'; 2 | // CSS for Highlighting 3 | import 'highlight.js/styles/atom-one-dark.css'; 4 | 5 | class indexMappingsTabContentController { 6 | constructor() { 7 | 'ngInject'; 8 | } 9 | 10 | $doCheck() { 11 | if (!angular.equals(this._mappings, this.mappings)) { 12 | this._mappings = this.mappings; 13 | // Only convert when something changes 14 | this._toRender = JSON.stringify(this._mappings, null, 2); 15 | } 16 | } 17 | } 18 | 19 | export default indexMappingsTabContentController; 20 | -------------------------------------------------------------------------------- /ui/src/components/index-mappings-tab-content/index-mappings-tab-content.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import indexMappingsTabContent from './index-mappings-tab-content.component'; 3 | 4 | export default angular.module('eshq.indexMappingsTabContent', []) 5 | .component('eshqIndexMappingsTabContent', indexMappingsTabContent) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/index-mappings-tab-content/index-mappings-tab-content.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('index-mappings-tab-content Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/index-mappings-tab-content/index-mappings-tab-content.style.scss: -------------------------------------------------------------------------------- 1 | .index-mappings-tab-content { 2 | 3 | } -------------------------------------------------------------------------------- /ui/src/components/index-mappings-tab-content/index-mappings-tab-content.template.html: -------------------------------------------------------------------------------- 1 |
2 |
5 |
-------------------------------------------------------------------------------- /ui/src/components/index-metric-docs/index-metric-docs.component.js: -------------------------------------------------------------------------------- 1 | import template from './index-metric-docs.template.html'; 2 | import controller from './index-metric-docs.controller'; 3 | 4 | const indexMetricDocsComponent = { 5 | bindings: { 6 | stats: '<', 7 | summary: '<' 8 | }, 9 | template, 10 | controller, 11 | controllerAs: 'iMDocsCtrl' 12 | }; 13 | 14 | export default indexMetricDocsComponent; 15 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-docs/index-metric-docs.controller.js: -------------------------------------------------------------------------------- 1 | import './index-metric-docs.style.scss' 2 | 3 | class indexMetricDocsController { 4 | 5 | } 6 | 7 | export default indexMetricDocsController; 8 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-docs/index-metric-docs.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import indexMetricDocs from './index-metric-docs.component'; 3 | 4 | export default angular.module('eshq.indexMetricDocs', []) 5 | .component('eshqIndexMetricDocs', indexMetricDocs) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-docs/index-metric-docs.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('index-metric-docs Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-docs/index-metric-docs.style.css: -------------------------------------------------------------------------------- 1 | .index-metric-docs .table tbody td { 2 | font-size: 14px; } 3 | 4 | /*# sourceMappingURL=index-metric-docs.style.css.map */ 5 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-docs/index-metric-docs.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAMY,kCAAG;EACD,SAAS,EC+FJ,IAA6B", 4 | "sources": ["index-metric-docs.style.scss","../../styles/_yeti-variables.scss"], 5 | "names": [], 6 | "file": "index-metric-docs.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/components/index-metric-docs/index-metric-docs.style.scss: -------------------------------------------------------------------------------- 1 | 2 | .index-metric-docs { 3 | 4 | } -------------------------------------------------------------------------------- /ui/src/components/index-metric-get/index-metric-get.component.js: -------------------------------------------------------------------------------- 1 | import template from './index-metric-get.template.html'; 2 | import controller from './index-metric-get.controller'; 3 | 4 | const indexMetricGetComponent = { 5 | bindings: { 6 | stats: '<', 7 | summary: '<' 8 | }, 9 | template, 10 | controller, 11 | controllerAs: 'indexMetricGetCtrl' 12 | }; 13 | 14 | export default indexMetricGetComponent; 15 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-get/index-metric-get.controller.js: -------------------------------------------------------------------------------- 1 | import './index-metric-get.style.scss' 2 | 3 | class indexMetricGetController { 4 | 5 | } 6 | 7 | export default indexMetricGetController; 8 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-get/index-metric-get.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import indexMetricGet from './index-metric-get.component'; 3 | 4 | export default angular.module('eshq.indexMetricGet', []) 5 | .component('eshqIndexMetricGet', indexMetricGet) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-get/index-metric-get.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('index-metric-get Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-get/index-metric-get.style.css: -------------------------------------------------------------------------------- 1 | .index-metric-get .table tbody td { 2 | font-size: 14px; } 3 | 4 | /*# sourceMappingURL=index-metric-get.style.css.map */ 5 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-get/index-metric-get.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAMY,iCAAG;EACD,SAAS,EC+FJ,IAA6B", 4 | "sources": ["index-metric-get.style.scss","../../styles/_yeti-variables.scss"], 5 | "names": [], 6 | "file": "index-metric-get.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/components/index-metric-get/index-metric-get.style.scss: -------------------------------------------------------------------------------- 1 | 2 | .index-metric-get { 3 | } -------------------------------------------------------------------------------- /ui/src/components/index-metric-get/index-metric-get.template.html: -------------------------------------------------------------------------------- 1 |
2 |

Get Totals

3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
Exists{{indexMetricGetCtrl.stats.primaries.get.exists_total | numeral: '0[,][0]'}}
Missing{{indexMetricGetCtrl.stats.primaries.get.missing_total | numeral: '0[,][0]'}}
Gets{{indexMetricGetCtrl.stats.primaries.get.total | numeral: '0[,][0]'}}
25 |
-------------------------------------------------------------------------------- /ui/src/components/index-metric-health/index-metric-health.component.js: -------------------------------------------------------------------------------- 1 | import template from './index-metric-health.template.html'; 2 | import controller from './index-metric-health.controller'; 3 | 4 | const indexMetricHealthComponent = { 5 | bindings: { 6 | stats: '<', 7 | summary: '<' 8 | }, 9 | template, 10 | controller, 11 | controllerAs: 'iMHealthCtrl' 12 | }; 13 | 14 | export default indexMetricHealthComponent; 15 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-health/index-metric-health.controller.js: -------------------------------------------------------------------------------- 1 | import './index-metric-health.style.scss' 2 | 3 | class indexMetricHealthController { 4 | constructor() { 5 | 'ngInject'; 6 | 7 | console.log('---- in indexMetricHealth', this) 8 | } 9 | } 10 | 11 | export default indexMetricHealthController; 12 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-health/index-metric-health.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import indexMetricHealth from './index-metric-health.component'; 3 | 4 | export default angular.module('eshq.indexMetricHealth', []) 5 | .component('eshqIndexMetricHealth', indexMetricHealth) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-health/index-metric-health.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('index-metric-health Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-health/index-metric-health.style.css: -------------------------------------------------------------------------------- 1 | .index-metric-health .table tbody td { 2 | font-size: 14px; } 3 | 4 | /*# sourceMappingURL=index-metric-health.style.css.map */ 5 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-health/index-metric-health.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAMY,oCAAG;EACD,SAAS,EC+FJ,IAA6B", 4 | "sources": ["index-metric-health.style.scss","../../styles/_yeti-variables.scss"], 5 | "names": [], 6 | "file": "index-metric-health.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/components/index-metric-health/index-metric-health.style.scss: -------------------------------------------------------------------------------- 1 | 2 | 3 | .index-metric-health { 4 | } -------------------------------------------------------------------------------- /ui/src/components/index-metric-health/index-metric-health.template.html: -------------------------------------------------------------------------------- 1 |
2 |

Health

3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
 
Shards{{iMHealthCtrl.summary.settings.number_of_shards}} / {{iMHealthCtrl.summary.settings.number_of_replicas}}
17 |
-------------------------------------------------------------------------------- /ui/src/components/index-metric-index/index-metric-index.component.js: -------------------------------------------------------------------------------- 1 | import template from './index-metric-index.template.html'; 2 | import controller from './index-metric-index.controller'; 3 | 4 | const indexMetricIndexComponent = { 5 | bindings: { 6 | stats: '<', 7 | summary: '<' 8 | }, 9 | template, 10 | controller, 11 | controllerAs: 'indexMetricIndexCtrl' 12 | }; 13 | 14 | export default indexMetricIndexComponent; 15 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-index/index-metric-index.controller.js: -------------------------------------------------------------------------------- 1 | import './index-metric-index.style.scss' 2 | 3 | class indexMetricIndexController { 4 | 5 | } 6 | 7 | export default indexMetricIndexController; 8 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-index/index-metric-index.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import indexMetricIndex from './index-metric-index.component'; 3 | 4 | export default angular.module('eshq.indexMetricIndex', []) 5 | .component('eshqIndexMetricIndex', indexMetricIndex) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-index/index-metric-index.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('index-metric-index Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-index/index-metric-index.style.css: -------------------------------------------------------------------------------- 1 | .index-metric-index .table tbody td { 2 | font-size: 14px; } 3 | 4 | /*# sourceMappingURL=index-metric-index.style.css.map */ 5 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-index/index-metric-index.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAMY,mCAAG;EACD,SAAS,EC+FJ,IAA6B", 4 | "sources": ["index-metric-index.style.scss","../../styles/_yeti-variables.scss"], 5 | "names": [], 6 | "file": "index-metric-index.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/components/index-metric-index/index-metric-index.style.scss: -------------------------------------------------------------------------------- 1 | 2 | 3 | .index-metric-index { 4 | 5 | } -------------------------------------------------------------------------------- /ui/src/components/index-metric-ops/index-metric-ops.component.js: -------------------------------------------------------------------------------- 1 | import template from './index-metric-ops.template.html'; 2 | import controller from './index-metric-ops.controller'; 3 | 4 | const indexMetricOpsComponent = { 5 | bindings: { 6 | stats: '<', 7 | summary: '<' 8 | }, 9 | template, 10 | controller, 11 | controllerAs: 'indexMetricOpsCtrl' 12 | }; 13 | 14 | export default indexMetricOpsComponent; 15 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-ops/index-metric-ops.controller.js: -------------------------------------------------------------------------------- 1 | import './index-metric-ops.style.scss' 2 | 3 | class indexMetricOpsController { 4 | 5 | } 6 | 7 | export default indexMetricOpsController; 8 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-ops/index-metric-ops.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import indexMetricOps from './index-metric-ops.component'; 3 | 4 | export default angular.module('eshq.indexMetricOps', []) 5 | .component('eshqIndexMetricOps', indexMetricOps) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-ops/index-metric-ops.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('index-metric-ops Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-ops/index-metric-ops.style.css: -------------------------------------------------------------------------------- 1 | .index-metric-ops .table tbody td { 2 | font-size: 14px; } 3 | 4 | /*# sourceMappingURL=index-metric-ops.style.css.map */ 5 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-ops/index-metric-ops.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAKY,iCAAG;EACD,SAAS,ECgGJ,IAA6B", 4 | "sources": ["index-metric-ops.style.scss","../../styles/_yeti-variables.scss"], 5 | "names": [], 6 | "file": "index-metric-ops.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/components/index-metric-ops/index-metric-ops.style.scss: -------------------------------------------------------------------------------- 1 | 2 | .index-metric-ops { 3 | 4 | } -------------------------------------------------------------------------------- /ui/src/components/index-metric-ops/index-metric-ops.template.html: -------------------------------------------------------------------------------- 1 |
2 |

Operations

3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
Flush{{indexMetricOpsCtrl.stats.total.flush.total | numeral: '0[,][0]'}}
Refresh{{indexMetricOpsCtrl.stats.total.refresh.total | numeral: '0[,][0]'}}
Merges{{indexMetricOpsCtrl.stats.total.merges.total | numeral: '0[,][0]'}}
25 |
-------------------------------------------------------------------------------- /ui/src/components/index-metric-querycache/index-metric-querycache.component.js: -------------------------------------------------------------------------------- 1 | import template from './index-metric-querycache.template.html'; 2 | import controller from './index-metric-querycache.controller'; 3 | 4 | const indexMetricQuerycacheComponent = { 5 | bindings: { 6 | stats: '<', 7 | summary: '<' 8 | }, 9 | template, 10 | controller, 11 | controllerAs: 'indexMetricQuerycacheCtrl' 12 | }; 13 | 14 | export default indexMetricQuerycacheComponent; 15 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-querycache/index-metric-querycache.controller.js: -------------------------------------------------------------------------------- 1 | import './index-metric-querycache.style.scss' 2 | 3 | class indexMetricQuerycacheController { 4 | 5 | } 6 | 7 | export default indexMetricQuerycacheController; 8 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-querycache/index-metric-querycache.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import indexMetricQuerycache from './index-metric-querycache.component'; 3 | 4 | export default angular.module('eshq.indexMetricQuerycache', []) 5 | .component('eshqIndexMetricQuerycache', indexMetricQuerycache) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-querycache/index-metric-querycache.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('index-metric-querycache Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-querycache/index-metric-querycache.style.css: -------------------------------------------------------------------------------- 1 | .index-metric-querycache .table tbody td { 2 | font-size: 14px; } 3 | 4 | /*# sourceMappingURL=index-metric-querycache.style.css.map */ 5 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-querycache/index-metric-querycache.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAMY,wCAAG;EACD,SAAS,EC+FJ,IAA6B", 4 | "sources": ["index-metric-querycache.style.scss","../../styles/_yeti-variables.scss"], 5 | "names": [], 6 | "file": "index-metric-querycache.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/components/index-metric-querycache/index-metric-querycache.style.scss: -------------------------------------------------------------------------------- 1 | 2 | .index-metric-querycache { 3 | } -------------------------------------------------------------------------------- /ui/src/components/index-metric-search/index-metric-search.component.js: -------------------------------------------------------------------------------- 1 | import template from './index-metric-search.template.html'; 2 | import controller from './index-metric-search.controller'; 3 | 4 | const indexMetricSearchComponent = { 5 | bindings: { 6 | stats: '<', 7 | summary: '<' 8 | }, 9 | template, 10 | controller, 11 | controllerAs: 'indexMetricSearchCtrl' 12 | }; 13 | 14 | export default indexMetricSearchComponent; 15 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-search/index-metric-search.controller.js: -------------------------------------------------------------------------------- 1 | import './index-metric-search.style.scss' 2 | 3 | class indexMetricSearchController { 4 | 5 | } 6 | 7 | export default indexMetricSearchController; 8 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-search/index-metric-search.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import indexMetricSearch from './index-metric-search.component'; 3 | 4 | export default angular.module('eshq.indexMetricSearch', []) 5 | .component('eshqIndexMetricSearch', indexMetricSearch) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-search/index-metric-search.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('index-metric-search Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-search/index-metric-search.style.css: -------------------------------------------------------------------------------- 1 | .index-metric-search .table tbody td { 2 | font-size: 14px; } 3 | 4 | /*# sourceMappingURL=index-metric-search.style.css.map */ 5 | -------------------------------------------------------------------------------- /ui/src/components/index-metric-search/index-metric-search.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAMY,oCAAG;EACD,SAAS,EC+FJ,IAA6B", 4 | "sources": ["index-metric-search.style.scss","../../styles/_yeti-variables.scss"], 5 | "names": [], 6 | "file": "index-metric-search.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/components/index-metric-search/index-metric-search.style.scss: -------------------------------------------------------------------------------- 1 | 2 | .index-metric-search { 3 | } -------------------------------------------------------------------------------- /ui/src/components/index-metrics-tab-content/index-metrics-tab-content.component.js: -------------------------------------------------------------------------------- 1 | import template from './index-metrics-tab-content.template.html'; 2 | import controller from './index-metrics-tab-content.controller'; 3 | 4 | const indexMetricsTabContentComponent = { 5 | bindings: { 6 | summary: '<', 7 | stats: '<' 8 | }, 9 | template, 10 | controller, 11 | controllerAs: 'iMTabContentCtrl' 12 | }; 13 | 14 | export default indexMetricsTabContentComponent; 15 | -------------------------------------------------------------------------------- /ui/src/components/index-metrics-tab-content/index-metrics-tab-content.controller.js: -------------------------------------------------------------------------------- 1 | import './index-metrics-tab-content.style.scss' 2 | 3 | class indexMetricsTabContentController { 4 | constructor() { 5 | 'ngInject'; 6 | } 7 | } 8 | 9 | export default indexMetricsTabContentController; 10 | -------------------------------------------------------------------------------- /ui/src/components/index-metrics-tab-content/index-metrics-tab-content.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import indexMetricsTabContent from './index-metrics-tab-content.component'; 3 | 4 | export default angular.module('eshq.indexMetricsTabContent', []) 5 | .component('eshqIndexMetricsTabContent', indexMetricsTabContent) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/index-metrics-tab-content/index-metrics-tab-content.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('index-metrics-tab-content Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/index-metrics-tab-content/index-metrics-tab-content.style.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | /*# sourceMappingURL=index-metrics-tab-content.style.css.map */ 4 | -------------------------------------------------------------------------------- /ui/src/components/index-metrics-tab-content/index-metrics-tab-content.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "", 4 | "sources": [], 5 | "names": [], 6 | "file": "index-metrics-tab-content.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/components/index-metrics-tab-content/index-metrics-tab-content.style.scss: -------------------------------------------------------------------------------- 1 | .index-metrics-tab-content { 2 | 3 | } -------------------------------------------------------------------------------- /ui/src/components/index-shards-tab-content/index-shards-tab-content.component.js: -------------------------------------------------------------------------------- 1 | import template from './index-shards-tab-content.template.html'; 2 | import controller from './index-shards-tab-content.controller'; 3 | 4 | const indexShardsTabContentComponent = { 5 | bindings: { 6 | shards: '<' 7 | }, 8 | template, 9 | controller, 10 | controllerAs: 'iSTabContentCtrl' 11 | }; 12 | 13 | export default indexShardsTabContentComponent; 14 | -------------------------------------------------------------------------------- /ui/src/components/index-shards-tab-content/index-shards-tab-content.controller.js: -------------------------------------------------------------------------------- 1 | import './index-shards-tab-content.style.scss' 2 | 3 | class indexShardsTabContentController { 4 | 5 | } 6 | 7 | export default indexShardsTabContentController; 8 | -------------------------------------------------------------------------------- /ui/src/components/index-shards-tab-content/index-shards-tab-content.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import indexShardsTabContent from './index-shards-tab-content.component'; 3 | 4 | export default angular.module('eshq.indexShardsTabContent', []) 5 | .component('eshqIndexShardsTabContent', indexShardsTabContent) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/index-shards-tab-content/index-shards-tab-content.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('index-shards-tab-content Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/index-shards-tab-content/index-shards-tab-content.style.css: -------------------------------------------------------------------------------- 1 | .index-shards-tab-content .table tbody td { 2 | font-size: 14px; } 3 | 4 | /*# sourceMappingURL=index-shards-tab-content.style.css.map */ 5 | -------------------------------------------------------------------------------- /ui/src/components/index-shards-tab-content/index-shards-tab-content.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAKY,yCAAG;EACD,SAAS,ECgGJ,IAA6B", 4 | "sources": ["index-shards-tab-content.style.scss","../../styles/_yeti-variables.scss"], 5 | "names": [], 6 | "file": "index-shards-tab-content.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/components/index-shards-tab-content/index-shards-tab-content.style.scss: -------------------------------------------------------------------------------- 1 | 2 | 3 | .index-shards-tab-content { 4 | } -------------------------------------------------------------------------------- /ui/src/components/index-shards-tab-content/index-shards-tab-content.template.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
ShardState# DocsSizePrimaryNode
{{shard.shard}}{{shard.state}}{{shard.docs | numeral: '0[.][0] a'}}{{shard.store}}{{shard.prirep === 'p'}}{{shard.node}}
24 |
-------------------------------------------------------------------------------- /ui/src/components/indices-table/indices-table.component.js: -------------------------------------------------------------------------------- 1 | import template from './indices-table.template.html'; 2 | import controller from './indices-table.controller'; 3 | 4 | const indicesTableComponent = { 5 | bindings: { 6 | indices: '=' 7 | }, 8 | template, 9 | controller, 10 | controllerAs: 'indicesTableCtrl' 11 | }; 12 | 13 | export default indicesTableComponent; 14 | -------------------------------------------------------------------------------- /ui/src/components/indices-table/indices-table.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import indicesTable from './indices-table.component'; 3 | 4 | export default angular.module('eshq.indicesTable', []) 5 | .component('eshqIndicesTable', indicesTable) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/indices-table/indices-table.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('indices-table Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/indices-table/indices-table.style.css: -------------------------------------------------------------------------------- 1 | .indices-table .table thead th > a.sorter { 2 | width: 100%; 3 | cursor: pointer; 4 | font-size: 1.2em; } 5 | .indices-table .table tbody td.health { 6 | padding: 8px 0px; 7 | width: 6px; } 8 | .indices-table .table tbody td.health.green { 9 | background: #43ac6a; } 10 | .indices-table .table tbody td.health.yellow { 11 | background: #ffc107; } 12 | .indices-table .table tbody td.health.red { 13 | background: #dc3545; } 14 | .indices-table .table tbody td.index_info { 15 | font-size: 14px; } 16 | 17 | /*# sourceMappingURL=indices-table.style.css.map */ 18 | -------------------------------------------------------------------------------- /ui/src/components/indices-table/indices-table.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAKY,yCAAa;EACT,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,OAAO;EACjB,SAAS,EAAE,KAAK;AAIlB,qCAAU;EACR,OAAO,EAAE,OAAO;EAChB,KAAK,EAAE,GAAG;EACV,2CAAQ;IACF,UAAU,EC6qBJ,OAAc;ED3qB1B,4CAAS;IACL,UAAU,EC4qBF,OAAc;ED1qB1B,yCAAM;IACF,UAAU,EC2qBH,OAAa;ADvqB1B,yCAAc;EACZ,SAAS,EC2EJ,IAA6B", 4 | "sources": ["indices-table.style.scss","../../styles/_yeti-variables.scss"], 5 | "names": [], 6 | "file": "indices-table.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/components/indices-table/indices-table.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .indices-table { 4 | .table { 5 | thead { 6 | th { 7 | //width: 100%; 8 | cursor: pointer; 9 | font-size: $font-size-medium; 10 | white-space: nowrap; 11 | } 12 | } 13 | tbody { 14 | td.health { 15 | padding: 8px 3px; 16 | &.green { 17 | background: $brand-success; 18 | } 19 | &.yellow { 20 | background: $brand-warning; 21 | } 22 | &.red { 23 | background: $brand-danger; 24 | } 25 | } 26 | 27 | td.index_info { 28 | font-size: $font-size-medium; 29 | } 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /ui/src/components/indicie-card/indicie-card.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAGA,aAAc;EACZ,MAAM,EAAE,iBAA4B;EACpC,aAAa,EAAE,GAAG;EAElB,KAAK,EAAG,kBAAgB;EACxB,6BAAgB;IACZ,OAAO,EAAE,IAAI;IACb,cAAc,EAAE,MAAM;IACtB,eAAe,EAAE,aAAa;IAC9B,UAAU,EAAE,KAAK;IACjB,yCAAY;MACR,UAAU,EAAE,MAAM;MAClB,SAAS,EAAE,KAAK;MAChB,WAAW,EAAE,GAAG;MAChB,OAAO,EAAE,OAAO;MAChB,KAAK,EAAE,OAAe;MACtB,aAAa,EAAE,4BAA0B;IAE7C,wCAAW;MACT,cAAc,EAAE,GAAG;MACnB,SAAS,EAAE,KAAK;MAChB,OAAO,EAAE,IAAI;MACb,OAAO,EAAE,OAAO;MACd,8CAAM;QACJ,IAAI,EAAE,CAAC;QACP,8DAAgB;UACZ,SAAS,EAAE,KAAK;UAChB,KAAK,EAAE,OAAe;IAIhC,6CAAgB;MACd,cAAc,EAAE,GAAG;MACnB,OAAO,EAAE,IAAI;MACb,eAAe,EAAE,YAAY;MAC7B,0DAAa;QACT,IAAI,EAAE,CAAC;QAEP,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,MAAM;QAClB,gEAAQ;UAEJ,MAAM,EAAE,OAAO", 4 | "sources": ["indicie-card.style.scss"], 5 | "names": [], 6 | "file": "indicie-card.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/components/node-diagnostics-wrapper/node-diagnostics-wrapper.component.js: -------------------------------------------------------------------------------- 1 | import template from './node-diagnostics-wrapper.template.html'; 2 | import controller from './node-diagnostics-wrapper.controller'; 3 | 4 | const nodeDiagnosticsWrapperComponent = { 5 | bindings: { 6 | nodeInfo: '<' 7 | }, 8 | template, 9 | controller, 10 | controllerAs: 'nDWrapperCtrl' 11 | }; 12 | 13 | export default nodeDiagnosticsWrapperComponent; 14 | -------------------------------------------------------------------------------- /ui/src/components/node-diagnostics-wrapper/node-diagnostics-wrapper.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import nodeDiagnosticsWrapper from './node-diagnostics-wrapper.component'; 3 | 4 | export default angular.module('eshq.nodeDiagnosticsWrapper', []) 5 | .component('eshqNodeDiagnosticsWrapper', nodeDiagnosticsWrapper) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/node-diagnostics-wrapper/node-diagnostics-wrapper.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('node-diagnostics-wrapper Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/node-diagnostics-wrapper/node-diagnostics-wrapper.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .node-diagnostics-wrapper { 4 | border: 1px solid #ccc; 5 | padding: 10px; 6 | .section-label { 7 | font-size: 1.3em; 8 | font-weight: 500; 9 | } 10 | table.table { 11 | tbody { 12 | td { 13 | font-size: $font-size-medium; 14 | } 15 | td.rule-value { 16 | 17 | text-align: right; 18 | &.PASS { 19 | background: $state-success-bg; 20 | } 21 | &.WARN { 22 | background: $state-warning-bg; 23 | } 24 | } 25 | .popover { 26 | max-width: 400px; 27 | font-size: 1.1em; 28 | font-weight: 400; 29 | .popover-inner { 30 | .popover-title, .popover-content { 31 | color: #000; 32 | .alert > .fa { 33 | font-size: 1.25em; 34 | } 35 | ul { 36 | padding-left: 5px; 37 | } 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /ui/src/components/node-fs-info-table/node-fs-info-table.component.js: -------------------------------------------------------------------------------- 1 | import template from './node-fs-info-table.template.html'; 2 | import controller from './node-fs-info-table.controller'; 3 | 4 | const nodeFsInfoTableComponent = { 5 | bindings: { 6 | fs: '<' 7 | }, 8 | template, 9 | controller, 10 | controllerAs: 'nFITableCtrl' 11 | }; 12 | 13 | export default nodeFsInfoTableComponent; 14 | -------------------------------------------------------------------------------- /ui/src/components/node-fs-info-table/node-fs-info-table.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import nodeFsInfoTable from './node-fs-info-table.component'; 3 | 4 | export default angular.module('eshq.nodeFsInfoTable', []) 5 | .component('eshqNodeFsInfoTable', nodeFsInfoTable) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/node-fs-info-table/node-fs-info-table.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('node-fs-info-table Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/node-fs-info-table/node-fs-info-table.style.scss: -------------------------------------------------------------------------------- 1 | .node-fs-info-table { 2 | 3 | } -------------------------------------------------------------------------------- /ui/src/components/node-jvm-stats-table/node-jvm-stats-table.component.js: -------------------------------------------------------------------------------- 1 | import template from './node-jvm-stats-table.template.html'; 2 | import controller from './node-jvm-stats-table.controller'; 3 | 4 | const nodeJvmStatsTableComponent = { 5 | bindings: { 6 | jvm: '<', 7 | stats : '<' 8 | }, 9 | template, 10 | controller, 11 | controllerAs: 'nodeJvmStatsTableCtrl' 12 | }; 13 | 14 | export default nodeJvmStatsTableComponent; 15 | -------------------------------------------------------------------------------- /ui/src/components/node-jvm-stats-table/node-jvm-stats-table.controller.js: -------------------------------------------------------------------------------- 1 | import './node-jvm-stats-table.style.scss' 2 | 3 | class nodeJvmStatsTableController { 4 | 5 | } 6 | 7 | export default nodeJvmStatsTableController; 8 | -------------------------------------------------------------------------------- /ui/src/components/node-jvm-stats-table/node-jvm-stats-table.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import nodeJvmStatsTable from './node-jvm-stats-table.component'; 3 | 4 | export default angular.module('eshq.nodeJvmStatsTable', []) 5 | .component('eshqNodeJvmStatsTable', nodeJvmStatsTable) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/node-jvm-stats-table/node-jvm-stats-table.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('node-jvm-stats-table Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/node-jvm-stats-table/node-jvm-stats-table.style.scss: -------------------------------------------------------------------------------- 1 | .node-jvm-stats-table { 2 | 3 | } -------------------------------------------------------------------------------- /ui/src/components/node-jvm-stats-table/node-jvm-stats-table.template.html: -------------------------------------------------------------------------------- 1 |
2 |

JVM

3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
Version{{nodeJvmStatsTableCtrl.jvm.vm_name}} ({{nodeJvmStatsTableCtrl.jvm.version}})
Process ID{{nodeJvmStatsTableCtrl.jvm.pid}}
Heap Used %{{nodeJvmStatsTableCtrl.stats.mem.heap_used_percent}}%
Heap Used/Max{{nodeJvmStatsTableCtrl.stats.mem.heap_used_in_bytes | numeral: '0[.][0] b'}} / {{nodeJvmStatsTableCtrl.stats.mem.heap_max_in_bytes | numeral: '0[.][0] b'}}
GC Collections (Old/Young){{nodeJvmStatsTableCtrl.stats.gc.collectors.old.collection_count | numeral: '0[,][0]'}} / {{nodeJvmStatsTableCtrl.stats.gc.collectors.young.collection_count | numeral: '0[,][0]'}}
Threads (Peak/Max){{nodeJvmStatsTableCtrl.stats.threads.peak_count | numeral: '0[,][0]'}} / {{nodeJvmStatsTableCtrl.stats.threads.count | numeral: '0[,][0]'}}
31 |
-------------------------------------------------------------------------------- /ui/src/components/node-os-info-table/node-os-info-table.component.js: -------------------------------------------------------------------------------- 1 | import template from './node-os-info-table.template.html'; 2 | import controller from './node-os-info-table.controller'; 3 | 4 | const nodeOsInfoTableComponent = { 5 | bindings: { 6 | os: '<', 7 | stats: '<' 8 | }, 9 | template, 10 | controller, 11 | controllerAs: 'nodeOsInfoTableCtrl' 12 | }; 13 | 14 | export default nodeOsInfoTableComponent; 15 | -------------------------------------------------------------------------------- /ui/src/components/node-os-info-table/node-os-info-table.controller.js: -------------------------------------------------------------------------------- 1 | import './node-os-info-table.style.scss' 2 | 3 | class nodeOsInfoTableController { 4 | 5 | } 6 | 7 | export default nodeOsInfoTableController; 8 | -------------------------------------------------------------------------------- /ui/src/components/node-os-info-table/node-os-info-table.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import nodeOsInfoTable from './node-os-info-table.component'; 3 | 4 | export default angular.module('eshq.nodeOsInfoTable', []) 5 | .component('eshqNodeOsInfoTable', nodeOsInfoTable) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/node-os-info-table/node-os-info-table.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('node-os-info-table Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/node-os-info-table/node-os-info-table.style.scss: -------------------------------------------------------------------------------- 1 | .node-os-info-table { 2 | 3 | } -------------------------------------------------------------------------------- /ui/src/components/node-os-info-table/node-os-info-table.template.html: -------------------------------------------------------------------------------- 1 |
2 |

Operating System

3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
System Memory Used % {{nodeOsInfoTableCtrl.stats.mem.used_percent}}%
System Memory Used{{nodeOsInfoTableCtrl.stats.mem.used_in_bytes | numeral: '0[.][0] b'}} / {{nodeOsInfoTableCtrl.stats.mem.total_in_bytes | numeral: '0[.][0] b'}}
Allocated Processors{{nodeOsInfoTableCtrl.os.allocated_processors}}
Available Processors{{nodeOsInfoTableCtrl.os.available_processors}}
OS Name{{nodeOsInfoTableCtrl.os.name}}
OS Architecture{{nodeOsInfoTableCtrl.os.arch}}
31 |
-------------------------------------------------------------------------------- /ui/src/components/node-plugins-table/node-plugins-table.component.js: -------------------------------------------------------------------------------- 1 | import template from './node-plugins-table.template.html'; 2 | import controller from './node-plugins-table.controller'; 3 | 4 | const nodePluginsTableComponent = { 5 | bindings: { 6 | plugins: '<' 7 | }, 8 | template, 9 | controller, 10 | controllerAs: 'nodePluginsTableCtrl' 11 | }; 12 | 13 | export default nodePluginsTableComponent; 14 | -------------------------------------------------------------------------------- /ui/src/components/node-plugins-table/node-plugins-table.controller.js: -------------------------------------------------------------------------------- 1 | import './node-plugins-table.style.scss' 2 | 3 | class nodePluginsTableController { 4 | 5 | } 6 | 7 | export default nodePluginsTableController; 8 | -------------------------------------------------------------------------------- /ui/src/components/node-plugins-table/node-plugins-table.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import nodePluginsTable from './node-plugins-table.component'; 3 | 4 | export default angular.module('eshq.nodePluginsTable', []) 5 | .component('eshqNodePluginsTable', nodePluginsTable) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/node-plugins-table/node-plugins-table.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('node-plugins-table Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/node-plugins-table/node-plugins-table.style.scss: -------------------------------------------------------------------------------- 1 | .node-plugins-table { 2 | 3 | } -------------------------------------------------------------------------------- /ui/src/components/node-plugins-table/node-plugins-table.template.html: -------------------------------------------------------------------------------- 1 |
2 |

Installed Plugins

3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
{{data.name}}v{{data.version}}{{data.description}}
13 |
-------------------------------------------------------------------------------- /ui/src/components/node-process-table/node-process-table.component.js: -------------------------------------------------------------------------------- 1 | import template from './node-process-table.template.html'; 2 | import controller from './node-process-table.controller'; 3 | 4 | const nodeProcessTableComponent = { 5 | bindings: { 6 | process: '<', 7 | info: '<' 8 | }, 9 | template, 10 | controller, 11 | controllerAs: 'nPTableCtrl' 12 | }; 13 | 14 | export default nodeProcessTableComponent; 15 | -------------------------------------------------------------------------------- /ui/src/components/node-process-table/node-process-table.controller.js: -------------------------------------------------------------------------------- 1 | import './node-process-table.style.scss'; 2 | 3 | import moment from 'moment'; 4 | 5 | class nodeProcessTableController { 6 | constructor() { 7 | 'ngInject'; 8 | } 9 | 10 | $doCheck() { 11 | if (!angular.equals(this._process, this.process)){ 12 | this._process = this.process; 13 | } 14 | } 15 | 16 | renderTimeWords(val) { 17 | return moment.utc(+moment.utc() - val).fromNow(); 18 | } 19 | } 20 | 21 | export default nodeProcessTableController; 22 | -------------------------------------------------------------------------------- /ui/src/components/node-process-table/node-process-table.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import nodeProcessTable from './node-process-table.component'; 3 | 4 | export default angular.module('eshq.nodeProcessTable', []) 5 | .component('eshqNodeProcessTable', nodeProcessTable) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/node-process-table/node-process-table.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('node-process-table Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/node-process-table/node-process-table.style.scss: -------------------------------------------------------------------------------- 1 | .node-process-table { 2 | 3 | } -------------------------------------------------------------------------------- /ui/src/components/node-summary-info-table/node-summary-info-table.component.js: -------------------------------------------------------------------------------- 1 | import template from './node-summary-info-table.template.html'; 2 | import controller from './node-summary-info-table.controller'; 3 | 4 | const nodeSummaryInfoTableComponent = { 5 | bindings: { 6 | info: '<' 7 | }, 8 | template, 9 | controller, 10 | controllerAs: 'nodeSummaryInfoTableCtrl' 11 | }; 12 | 13 | export default nodeSummaryInfoTableComponent; 14 | -------------------------------------------------------------------------------- /ui/src/components/node-summary-info-table/node-summary-info-table.controller.js: -------------------------------------------------------------------------------- 1 | import './node-summary-info-table.style.scss' 2 | 3 | class nodeSummaryInfoTableController { 4 | 5 | } 6 | 7 | export default nodeSummaryInfoTableController; 8 | -------------------------------------------------------------------------------- /ui/src/components/node-summary-info-table/node-summary-info-table.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import nodeSummaryInfoTable from './node-summary-info-table.component'; 3 | 4 | export default angular.module('eshq.nodeSummaryInfoTable', []) 5 | .component('eshqNodeSummaryInfoTable', nodeSummaryInfoTable) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/node-summary-info-table/node-summary-info-table.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('node-summary-info-table Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/node-summary-info-table/node-summary-info-table.style.scss: -------------------------------------------------------------------------------- 1 | .node-summary-info-table { 2 | 3 | } -------------------------------------------------------------------------------- /ui/src/components/repositories-table/repositories-table.component.js: -------------------------------------------------------------------------------- 1 | import template from './repositories-table.template.html'; 2 | import controller from './repositories-table.controller'; 3 | 4 | const repositoriesTableComponent = { 5 | bindings: { 6 | repositories: '=' 7 | }, 8 | template, 9 | controller, 10 | controllerAs: 'repositoriesTableCtrl' 11 | }; 12 | 13 | export default repositoriesTableComponent; 14 | -------------------------------------------------------------------------------- /ui/src/components/repositories-table/repositories-table.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import repositoriesTable from './repositories-table.component'; 3 | 4 | export default angular.module('eshq.repositoriesTable', []) 5 | .component('eshqRepositoriesTable', repositoriesTable) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/repositories-table/repositories-table.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('repositories-table Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/repositories-table/repositories-table.style.scss: -------------------------------------------------------------------------------- 1 | 2 | @import '../../styles/yeti-variables'; 3 | 4 | .repositories-table { 5 | .table { 6 | thead { 7 | th { 8 | //width: 100%; 9 | cursor: pointer; 10 | font-size: $font-size-medium; 11 | white-space: nowrap; 12 | } 13 | } 14 | tbody { 15 | 16 | td.repository_info { 17 | font-size: $font-size-medium; 18 | } 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /ui/src/components/repositories-table/repositories-table.template.html: -------------------------------------------------------------------------------- 1 |
2 | 6 | 7 | 8 | 12 | 13 | 14 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 |
9 | 11 |
17 | {{c.label}} 18 |
28 |
-------------------------------------------------------------------------------- /ui/src/components/top-nav/top-nav.component.js: -------------------------------------------------------------------------------- 1 | import template from './top-nav.template.html'; 2 | import controller from './top-nav.controller'; 3 | 4 | const topNavComponent = { 5 | template, 6 | controller, 7 | controllerAs: 'topNavCtrl' 8 | }; 9 | 10 | export default topNavComponent; 11 | -------------------------------------------------------------------------------- /ui/src/components/top-nav/top-nav.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | import topNav from './top-nav.component'; 3 | 4 | export default angular.module('eshq.topNav', []) 5 | .component('eshqTopNav', topNav) 6 | .name; 7 | -------------------------------------------------------------------------------- /ui/src/components/top-nav/top-nav.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('top-nav Component', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/components/top-nav/top-nav.style.css: -------------------------------------------------------------------------------- 1 | .navbar-brand { 2 | background-color: #1C2B36; 3 | display: block; 4 | font-size: 28px !important; 5 | white-space: nowrap; 6 | float: left; 7 | font-family: 'Roboto', sans-serif; 8 | outline: none !important; 9 | line-height: 60px; } 10 | .navbar-brand span { 11 | color: #FFFFFF; } 12 | .navbar-brand .a { 13 | font-size: 50px; } 14 | 15 | /*# sourceMappingURL=top-nav.style.css.map */ 16 | -------------------------------------------------------------------------------- /ui/src/components/top-nav/top-nav.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAIA,aAAc;EACZ,gBAAgB,EAAE,OAAO;EACzB,OAAO,EAAE,KAAK;EACd,SAAS,EAAE,eAAe;EAC1B,WAAW,EAAE,MAAM;EACnB,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,oBAAoB;EACjC,OAAO,EAAE,eAAe;EACxB,WAAW,EAAE,IAAI;EAEjB,kBAAK;IACH,KAAK,EAAE,OAAO;EAGhB,gBAAG;IACD,SAAS,EAAE,IAAI", 4 | "sources": ["top-nav.style.scss"], 5 | "names": [], 6 | "file": "top-nav.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/components/top-nav/top-nav.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .top-nav { 4 | .cluster-item { 5 | 6 | .cluster-name-success { 7 | font-size: 1.2em; 8 | display: block; 9 | color: $brand-success; 10 | } 11 | .cluster-name-warning { 12 | font-size: 1.2em; 13 | display: block; 14 | color: $brand-danger; 15 | } 16 | .cluster-host { 17 | font-style: italic; 18 | } 19 | &:hover { 20 | cursor: pointer; 21 | background: darken($state-info-bg, 7%); 22 | } 23 | &.active, &.active:hover { 24 | background: $state-info-bg; 25 | } 26 | } 27 | .hr { 28 | padding: 0; 29 | margin: 0; 30 | } 31 | } 32 | 33 | .navbar-nav { 34 | li > a { 35 | color: #FFFFFF; 36 | font-size: $font-size-medium; 37 | } 38 | } 39 | 40 | .navbar-brand { 41 | background-color: #1C2B36; 42 | display: block; 43 | font-size: 28px !important; 44 | white-space: nowrap; 45 | float: left; 46 | font-family: 'Roboto', sans-serif; 47 | outline: none !important; 48 | line-height: 60px; 49 | 50 | span { 51 | color: #FFFFFF; 52 | } 53 | 54 | .a { 55 | font-size: 50px; 56 | } 57 | 58 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-aliases/cluster-aliases.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-aliases Container', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-aliases/cluster-aliases.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .cluster-aliases { 4 | 5 | table.table { 6 | thead { 7 | th { 8 | //width: 100%; 9 | cursor: pointer; 10 | font-size: $font-size-medium; 11 | } 12 | } 13 | 14 | tbody { 15 | tr { 16 | td { 17 | font-size: $font-size-medium; 18 | } 19 | } 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-details/cluster-details.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-details Container', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-details/cluster-details.style.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | /*# sourceMappingURL=cluster-details.style.css.map */ 4 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-details/cluster-details.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "", 4 | "sources": [], 5 | "names": [], 6 | "file": "cluster-details.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-details/cluster-details.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .cluster-details { 4 | 5 | } 6 | 7 | .node-details { 8 | .table { 9 | thead { 10 | th { 11 | //width: 100%; 12 | cursor: pointer; 13 | font-size: $font-size-medium; 14 | white-space: nowrap; 15 | } 16 | } 17 | tbody { 18 | td { 19 | font-size: $font-size-medium; 20 | } 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-index-query/cluster-index-query.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-index-query Container', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-index-query/cluster-index-query.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .cluster-index-query { 4 | .panel-heading span { 5 | font-size: 20px; 6 | } 7 | 8 | div.jsoneditor { 9 | color: #1A1A1A; 10 | border: 1px solid $btn-primary-bg; 11 | } 12 | 13 | div.jsoneditor-menu { 14 | width: 100%; 15 | height: 35px; 16 | padding: 2px; 17 | margin: 0; 18 | -moz-box-sizing: border-box; 19 | -webkit-box-sizing: border-box; 20 | box-sizing: border-box; 21 | color: white; 22 | background-color: $btn-primary-bg; 23 | border-bottom: 1px solid $btn-primary-bg; 24 | } 25 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-indice-details/cluster-indice-details.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-indice-details Container', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-indice-details/cluster-indice-details.style.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | /*# sourceMappingURL=cluster-indice-details.style.css.map */ 4 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-indice-details/cluster-indice-details.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "", 4 | "sources": [], 5 | "names": [], 6 | "file": "cluster-indice-details.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-indice-details/cluster-indice-details.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .cluster-indice-details { 4 | .tab-content { 5 | table.table { 6 | thead { 7 | th { 8 | //width: 100%; 9 | //cursor: pointer; 10 | font-size: $font-size-medium; 11 | } 12 | } 13 | tbody { 14 | tr { 15 | td { 16 | font-size: $font-size-medium; 17 | } 18 | } 19 | } 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-indices-closed/cluster-indices-closed.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-indices-closed Container', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-indices-closed/cluster-indices-closed.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .cluster-indices-closed { 4 | 5 | table.table { 6 | thead { 7 | th { 8 | //width: 100%; 9 | cursor: pointer; 10 | font-size: $font-size-medium; 11 | } 12 | } 13 | 14 | tbody { 15 | tr { 16 | td { 17 | font-size: $font-size-medium; 18 | } 19 | } 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-indices-deleted/cluster-indices-deleted.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-indices-deleted Container', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-indices-deleted/cluster-indices-deleted.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .cluster-indices-deleted { 4 | 5 | table.table { 6 | thead { 7 | th { 8 | //width: 100%; 9 | cursor: pointer; 10 | font-size: $font-size-medium; 11 | } 12 | } 13 | 14 | tbody { 15 | tr { 16 | td { 17 | font-size: $font-size-medium; 18 | } 19 | } 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-indices/cluster-indices.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-indices Container', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-indices/cluster-indices.style.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | /*# sourceMappingURL=cluster-indices.style.css.map */ 4 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-indices/cluster-indices.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "", 4 | "sources": [], 5 | "names": [], 6 | "file": "cluster-indices.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-indices/cluster-indices.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .cluster-indices { 4 | 5 | } 6 | 7 | .reindexForm { 8 | 9 | .form-group > label { 10 | font-size: $font-size-medium; 11 | } 12 | .form-check-label { 13 | font-size: $font-size-medium; 14 | } 15 | } 16 | 17 | .createIndexForm { 18 | 19 | .form-group > label { 20 | font-size: $font-size-medium; 21 | } 22 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-indices/create-index-modal.html: -------------------------------------------------------------------------------- 1 | 6 | 24 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-node-details/cluster-node-details.controller.js: -------------------------------------------------------------------------------- 1 | import './cluster-node-details.style.scss' 2 | 3 | class clusterNodeDetailsController { 4 | 5 | // Imports go here 6 | constructor($stateParams, ClusterNodes) { 7 | 'ngInject'; 8 | 9 | this.clusterName = $stateParams.clusterName; 10 | this.nodeId = $stateParams.nodeId; 11 | this.service = ClusterNodes; 12 | 13 | this.service.getNodeInfo(this.clusterName, this.nodeId).then((resp) => { 14 | console.log('--- node info: ', resp.data.data) 15 | this.info = resp.data.data[0].nodes[this.nodeId]; 16 | }) 17 | 18 | this.service.getNodeStats(this.clusterName, this.nodeId).then((resp) => { 19 | console.log('--- node stats: ', resp.data.data) 20 | this.stats = resp.data.data[0].nodes[this.nodeId]; 21 | }) 22 | } 23 | } 24 | 25 | export default clusterNodeDetailsController; 26 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-node-details/cluster-node-details.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-node-details Container', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-node-details/cluster-node-details.style.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | /*# sourceMappingURL=cluster-node-details.style.css.map */ 4 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-node-details/cluster-node-details.style.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "", 4 | "sources": [], 5 | "names": [], 6 | "file": "cluster-node-details.style.css" 7 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-node-details/cluster-node-details.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .cluster-node-details { 4 | h4 > .sub-info { 5 | font-size: 0.75em; 6 | font-weight: 400; 7 | } 8 | 9 | table.table { 10 | thead { 11 | th { 12 | width: 100%; 13 | cursor: pointer; 14 | font-size: $font-size-medium; 15 | } 16 | } 17 | tbody { 18 | tr { 19 | td { 20 | font-size: $font-size-medium; 21 | } 22 | } 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-nodes/cluster-nodes.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-nodes Container', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-nodes/cluster-nodes.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .cluster-nodes { 4 | .legend-item { 5 | display: inline-block; 6 | padding: 5px 10px; 7 | margin-left: 10px; 8 | margin-bottom: 10px; 9 | } 10 | .select-graphs-btn-group { 11 | width: 50%; 12 | > #select-graph-group { 13 | width: 100%; 14 | } 15 | } 16 | .dropdown-menu { 17 | font-size: $font-size-medium; 18 | } 19 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-snapshots-details/cluster-snapshots-details-modal.html: -------------------------------------------------------------------------------- 1 | 6 | 25 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-snapshots-details/cluster-snapshots-details.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-snapshots-details Container', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-snapshots-details/cluster-snapshots-details.style.scss: -------------------------------------------------------------------------------- 1 | @import '../../styles/yeti-variables'; 2 | 3 | .cluster-snapshots-details { 4 | table.table { 5 | thead { 6 | th { 7 | cursor: pointer; 8 | font-size: $font-size-medium; 9 | } 10 | } 11 | tbody { 12 | tr { 13 | td { 14 | cursor: pointer; 15 | font-size: $font-size-medium; 16 | } 17 | } 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-snapshots/cluster-snapshots.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-snapshots Container', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/containers/cluster-snapshots/cluster-snapshots.style.scss: -------------------------------------------------------------------------------- 1 | .cluster-snapshots { 2 | 3 | } -------------------------------------------------------------------------------- /ui/src/containers/cluster-snapshots/cluster-snapshots.view.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 |
7 |
8 |
9 |
10 |
11 | Loading Repositories 12 | Loading... 13 |
14 |
15 |
16 |
17 |
18 | 19 | 21 |
-------------------------------------------------------------------------------- /ui/src/containers/diagnostics/diagnostics.controller.js: -------------------------------------------------------------------------------- 1 | import './diagnostics.style.scss'; 2 | 3 | import _ from 'lodash'; 4 | 5 | class diagnosticsController { 6 | 7 | // Imports go here 8 | constructor(ClusterNodes, $stateParams) { 9 | 'ngInject'; 10 | 11 | this.service = ClusterNodes; 12 | 13 | this.clusterName = $stateParams.clusterName; 14 | 15 | this.fetchDiagnostics(); 16 | } 17 | 18 | fetchDiagnostics() { 19 | this.service.diagnostics(this.clusterName).then((resp) => { 20 | console.log('---- resp: ', resp.data.data) 21 | this.data = _.chunk(resp.data.data, 3); 22 | 23 | }) 24 | } 25 | } 26 | 27 | export default diagnosticsController; 28 | -------------------------------------------------------------------------------- /ui/src/containers/diagnostics/diagnostics.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('diagnostics Container', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/containers/diagnostics/diagnostics.style.scss: -------------------------------------------------------------------------------- 1 | .diagnostics { 2 | 3 | } -------------------------------------------------------------------------------- /ui/src/containers/diagnostics/diagnostics.view.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 |
7 |
8 |
9 | 10 |
11 |
12 |
-------------------------------------------------------------------------------- /ui/src/containers/home/home.style.scss: -------------------------------------------------------------------------------- 1 | .home { 2 | // background: red; 3 | // position: absolute; 4 | // left: 0; 5 | // top: 0; 6 | // width: 100%; 7 | // height: 100%; 8 | .flex-container { 9 | display: -ms-flexbox; 10 | display: -webkit-flex; 11 | display: flex; 12 | -ms-flex-align: center; 13 | -webkit-align-items: center; 14 | -webkit-box-align: center; 15 | align-items: center; 16 | justify-content: center; 17 | min-height: 200px; 18 | height: calc(100vh - 200px); 19 | .flex-item { 20 | width: 500px; 21 | .title-description { 22 | font-size: 1.4em; 23 | font-weight: 300; 24 | margin-bottom: 0.75em; 25 | } 26 | .form-inline { 27 | > .input-group { 28 | // width: 100%; 29 | display: flex; 30 | margin-bottom: 0.8em; 31 | } 32 | } 33 | .cluster-picker { 34 | display: -ms-flexbox; 35 | display: -webkit-flex; 36 | display: flex; 37 | -ms-flex-align: center; 38 | -webkit-align-items: center; 39 | -webkit-box-align: center; 40 | align-items: center; 41 | justify-content: center; 42 | 43 | } 44 | 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /ui/src/containers/home/home.view.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | Connect to Elasticsearch... 6 |
7 |
8 |
9 | 10 | 14 | 15 | 16 | 17 |
18 |
19 |
20 | 21 |
22 |
23 |
24 |
25 | -------------------------------------------------------------------------------- /ui/src/containers/rest-api/rest-api.controller.js: -------------------------------------------------------------------------------- 1 | import './rest-api.style.scss' 2 | 3 | class restApiController { 4 | 5 | // Imports go here 6 | constructor($stateParams) { 7 | 'ngInject'; 8 | this.clusterName = $stateParams.clusterName; 9 | } 10 | } 11 | 12 | export default restApiController; 13 | -------------------------------------------------------------------------------- /ui/src/containers/rest-api/rest-api.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('rest-api Container', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/containers/rest-api/rest-api.style.scss: -------------------------------------------------------------------------------- 1 | .rest-api { 2 | 3 | } -------------------------------------------------------------------------------- /ui/src/containers/rest-api/rest-api.view.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 |
7 |
8 |
-------------------------------------------------------------------------------- /ui/src/containers/settings/settings.controller.js: -------------------------------------------------------------------------------- 1 | import './settings.style.scss' 2 | 3 | class settingsController { 4 | 5 | // Imports go here 6 | constructor() { 7 | 'ngInject'; 8 | 9 | } 10 | } 11 | 12 | export default settingsController; 13 | -------------------------------------------------------------------------------- /ui/src/containers/settings/settings.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('settings Container', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/containers/settings/settings.style.scss: -------------------------------------------------------------------------------- 1 | .settings { 2 | margin-top: 20px; 3 | } -------------------------------------------------------------------------------- /ui/src/containers/settings/settings.view.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 6 | 9 |
10 |
11 |
-------------------------------------------------------------------------------- /ui/src/factories/cluster-summary/cluster-summary.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-summary Factory', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/factories/common-factories.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | 3 | import ClusterSummaryFactory from './cluster-summary/cluster-summary.factory'; 4 | import QueuedFactory from './queued/queued.factory'; 5 | 6 | 7 | const CommonFactories = angular.module('commonFactories', []) 8 | .service('ClusterSummaryFactory', ClusterSummaryFactory) 9 | .service('QueuedFactory', QueuedFactory) 10 | .name; 11 | 12 | export default CommonFactories; 13 | -------------------------------------------------------------------------------- /ui/src/filters/common-filters.js: -------------------------------------------------------------------------------- 1 | import angular from 'angular'; 2 | 3 | import numeral from './numeral.filter.js'; 4 | import moment from './moment.filter'; 5 | 6 | const CommonFilters = angular.module('commonFilters', []) 7 | .filter({ numeral }) 8 | .filter({ moment }) 9 | .name; 10 | 11 | export default CommonFilters; -------------------------------------------------------------------------------- /ui/src/filters/moment.filter.js: -------------------------------------------------------------------------------- 1 | import moment from 'moment'; 2 | 3 | // ISO 8601 format expected 4 | export default function () { 5 | 'use strict'; 6 | 7 | return function (datetime, format) { 8 | return moment(datetime).format(format); 9 | }; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /ui/src/filters/numeral.filter.js: -------------------------------------------------------------------------------- 1 | import numeral from 'numeral'; 2 | 3 | export default () => { 4 | 'use strict'; 5 | 6 | // set nulls to be displayed as N/A 7 | numeral.nullFormat('N/A'); 8 | 9 | return (number, format) => { 10 | return numeral(number).format(format); 11 | }; 12 | 13 | }; 14 | -------------------------------------------------------------------------------- /ui/src/images/foo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElasticHQ/elasticsearch-HQ/8197e21d09b1312492dcb6998a2349d73b06efc6/ui/src/images/foo.gif -------------------------------------------------------------------------------- /ui/src/services/cluster-aliases/cluster-aliases.service.js: -------------------------------------------------------------------------------- 1 | class ClusterAliasesService { 2 | 3 | // Imports go here 4 | constructor(QueuedFactory) { 5 | 'ngInject'; 6 | 7 | this.que = QueuedFactory; 8 | } 9 | 10 | clusterAliases(cluster_name) { 11 | return this.que.add({ 12 | url: 'api/indices/' + cluster_name + '/_aliases', 13 | method: 'GET' 14 | }); 15 | } 16 | 17 | clusterAliasesDelete(cluster_name, index_name, alias_name) { 18 | // api/indices/[cluster_name]/[index_name] 19 | return this.que.add({ 20 | url: 'api/indices/' + cluster_name + '/' + index_name + '/' + alias_name + '/_aliases', 21 | method: 'DELETE' 22 | }); 23 | } 24 | 25 | clusterAliasesCreate(cluster_name, index_name, alias_name) { 26 | return this.que.add({ 27 | url: 'api/indices/' + cluster_name + '/' + index_name + '/' + alias_name + '/_aliases', 28 | method: 'POST' 29 | }); 30 | } 31 | 32 | } 33 | 34 | export default ClusterAliasesService; 35 | -------------------------------------------------------------------------------- /ui/src/services/cluster-aliases/cluster-aliases.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-aliases Service', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/services/cluster-connection/cluster-connection.service.js: -------------------------------------------------------------------------------- 1 | class ClusterConnectionService { 2 | 3 | // Imports go here 4 | constructor(QueuedFactory) { 5 | 'ngInject'; 6 | 7 | this.que = QueuedFactory; 8 | } 9 | 10 | // Example request 11 | connectCluster(data) { 12 | return this.que.add({ 13 | url: ('api/clusters/_connect'), 14 | method: 'POST', 15 | data: data 16 | }); 17 | } 18 | 19 | getClusters() { 20 | return this.que.add({ 21 | url: ('api/clusters'), 22 | method: 'GET' 23 | }); 24 | } 25 | 26 | 27 | deleteCluster(cluster_name) { 28 | return this.que.add({ 29 | url: ('api/clusters/' + cluster_name) + '/_connect', 30 | method: 'DELETE' 31 | }); 32 | } 33 | 34 | summary(cluster_name) { 35 | return this.que.add({ 36 | url: ('api/clusters/' + cluster_name + '/_summary'), 37 | method: 'GET' 38 | }); 39 | } 40 | 41 | 42 | 43 | } 44 | 45 | export default ClusterConnectionService; 46 | -------------------------------------------------------------------------------- /ui/src/services/cluster-connection/cluster-connection.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-connection Service', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/services/cluster-indices/cluster-indices.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-indices Service', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/services/cluster-nodes/cluster-nodes.service.js: -------------------------------------------------------------------------------- 1 | class ClusterNodesService { 2 | 3 | // Imports go here 4 | constructor(QueuedFactory) { 5 | 'ngInject'; 6 | 7 | this.que = QueuedFactory; 8 | } 9 | 10 | getNodesSummary(clusterName, nodeId) { 11 | return this.que.add({ 12 | url: ('api/nodes/' + clusterName + '/_summary'), 13 | method: 'GET', 14 | }); 15 | } 16 | 17 | 18 | getNodeInfo(clusterName, nodeId) { 19 | return this.que.add({ 20 | url: ('api/nodes/' + clusterName + '/' + nodeId + '/_info'), 21 | method: 'GET', 22 | }); 23 | } 24 | 25 | getNodeStats(clusterName, nodeId) { 26 | return this.que.add({ 27 | url: ('api/nodes/' + clusterName + '/' + nodeId + '/_stats'), 28 | method: 'GET', 29 | }); 30 | } 31 | 32 | diagnostics(clusterName) { 33 | return this.que.add({ 34 | url: ('api/clusters/' + clusterName + '/diagnostics/_summary'), 35 | method: 'GET', 36 | }); 37 | } 38 | } 39 | 40 | export default ClusterNodesService; 41 | -------------------------------------------------------------------------------- /ui/src/services/cluster-nodes/cluster-nodes.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-nodes Service', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/services/cluster-repositories/cluster-repositories.service.js: -------------------------------------------------------------------------------- 1 | class ClusterRepositoriesService { 2 | 3 | // Imports go here 4 | constructor(QueuedFactory) { 5 | 'ngInject'; 6 | 7 | this.que = QueuedFactory; 8 | } 9 | 10 | clusterRepositories(cluster_name) { 11 | return this.que.add({ 12 | url: 'api/repositories/' + cluster_name, 13 | method: 'GET' 14 | }); 15 | } 16 | 17 | clusterSnapshots(cluster_name, repositoryName) { 18 | return this.que.add({ 19 | url: 'api/snapshots/' + cluster_name + '/repository/' + repositoryName, 20 | method: 'GET' 21 | }); 22 | } 23 | } 24 | 25 | export default ClusterRepositoriesService; 26 | -------------------------------------------------------------------------------- /ui/src/services/cluster-repositories/cluster-repositories.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('cluster-repositories Service', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /ui/src/services/common-services.js: -------------------------------------------------------------------------------- 1 | import ClusterConnection from './cluster-connection/cluster-connection.service'; 2 | import ClusterIndices from './cluster-indices/cluster-indices.service'; 3 | import ClusterNodes from './cluster-nodes/cluster-nodes.service'; 4 | import ClusterAliases from './cluster-aliases/cluster-aliases.service'; 5 | import ClusterRepositories from './cluster-repositories/cluster-repositories.service'; 6 | import Hq from './hq/hq.service'; 7 | 8 | const CommonServices = angular.module('common', []) 9 | .service('ClusterConnection', ClusterConnection) 10 | .service('ClusterIndices', ClusterIndices) 11 | .service('ClusterAliases', ClusterAliases) 12 | .service('ClusterNodes', ClusterNodes) 13 | .service('ClusterRepositories', ClusterRepositories) 14 | .service('Hq', Hq) 15 | .name; 16 | 17 | export default CommonServices; -------------------------------------------------------------------------------- /ui/src/services/hq/hq.service.js: -------------------------------------------------------------------------------- 1 | class HqService { 2 | 3 | // Imports go here 4 | constructor(QueuedFactory) { 5 | 'ngInject'; 6 | 7 | this.que = QueuedFactory; 8 | } 9 | 10 | 11 | settings(cluster_name) { 12 | return this.que.add({ 13 | url: ('api/hq/' + cluster_name + '/_settings'), 14 | method: 'GET' 15 | }); 16 | } 17 | 18 | resetSettings(cluster_name) { 19 | return this.que.add({ 20 | url: ('api/hq/' + cluster_name + '/_settings'), 21 | method: 'DELETE' 22 | }); 23 | } 24 | 25 | updateSettings(cluster_name, data) { 26 | return this.que.add({ 27 | url: ('api/hq/' + cluster_name + '/_settings'), 28 | method: 'PUT', 29 | data: data 30 | }); 31 | } 32 | } 33 | 34 | export default HqService; 35 | -------------------------------------------------------------------------------- /ui/src/services/hq/hq.spec.js: -------------------------------------------------------------------------------- 1 | 2 | // Stubbed test. 3 | describe('hq Service', () => { 4 | it('base test', () => { 5 | expect(1).toEqual(1); 6 | }); 7 | }); 8 | --------------------------------------------------------------------------------