Latest commit

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

es-tool

An Elasticsearch tool written in Python.

es-tool.py utilises the elasticsearch-py client, that in turn interacts with Elasticsearch via it's API.

Official low-level client for Elasticsearch. Its goal is to provide common ground for all Elasticsearch-related code in Python; because of this it tries to be opinion-free and very extendable.

Table of Contents

Reason

After moving over to AWS Elasticsearch service, I realised the amount of active shards was increasing by stupid amounts per day. After some reading I had found that by default ES assigns 5 primary shards and 1 replica shard meaning each indices was creating 10 shards.

AWS ES service doesn't allow for you to specify the number of shards via elasticsearch.yaml or a GET /_cluster/settings method, it can only be done via index templates. This then means as opposed to specifying your number of shards per cluster, it's done per index.

Rather annoyingly, at the time of writing this the AWS ES version is 1.5.2 which means I couldn't use the Reindex API, or use logstash as there is no amazon_es input only output.

I was initially messing around with the API, and thought it'd be nice to create a tool to make my life a little easier when doing a few administration tasks (like reindexing).

Installation

To use the tool you'll need to install it's dependencies.

pip install -t vendored/ -r requirements.txt

Currently I've only tested it with Python 2.X

Usage

usage: es-tool.py [-h] [-r REINDEX] [-n NEW_INDEX_NAME] [-d DELETE_INDEX]
[-S SOURCE] [-e ENDPOINT] [-D DESTINATION] [-ps PORT_SOURCE]
[-pd PORT_DESTINATION] [-ls SSL_SOURCE]
[-ld SSL_DESTINATION]
Elasticsearch management
optional arguments:
-h, --help show this help message and exit
-r REINDEX, --reindex REINDEX
Reindex all documents in specified index and append
with "-reindex", if --new_index_name options has not
been specified
-n NEW_INDEX_NAME, --new_index_name NEW_INDEX_NAME
Name for new index
-d DELETE_INDEX, --delete_index DELETE_INDEX
Specify which index to delete from source ES
-S SOURCE, --source SOURCE
Specify Elasticsearch host from which the data will be
downloaded
-e ENDPOINT, --endpoint ENDPOINT
Alias for --source for backward compatibility
-D DESTINATION, --destination DESTINATION
Specify Elasticsearch host in which the data will be
uploaded. If not specified, the --source connection
will be used as destination.
-ps PORT_SOURCE, --port_source PORT_SOURCE
Specify port for the source Elasticsearch (9200 by
default, for AWS ES it can be 80 or 443).
-pd PORT_DESTINATION, --port_destination PORT_DESTINATION
Specify port for the destination Elasticsearch (9200
by default, for AWS ES it can be 80 or 443).
-ls SSL_SOURCE, --ssl_source SSL_SOURCE
Use SSL (https) connection for the source
ElasticSearch.
-ld SSL_DESTINATION, --ssl_destination SSL_DESTINATION
Use SSL (https) connection.

Reindex inside one cluster

If you wanted to reindex an index you can do this:

./es-tool.py \
--source elasticsearch-host \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443

The tool will reindex the indices on the same cluster and append "-reindex" to the end e.g. "name-of-index-reindex"

Reindex from one cluster to another one

./es-tool.py \
--source elasticsearch-host-1 \
--destination elasticsearch-host-2 \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443 \
--ssl_destination true \
--port_destination 443

To do

  • List indexes
  • Dry-run
  • Improve logging/messages
  • Refactor into a module fashion like my hubot-scripts implementation

About

Elasticsearch tool

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

es-tool

An Elasticsearch tool written in Python.

es-tool.py utilises the elasticsearch-py client, that in turn interacts with Elasticsearch via it's API.

Official low-level client for Elasticsearch. Its goal is to provide common ground for all Elasticsearch-related code in Python; because of this it tries to be opinion-free and very extendable.

Table of Contents

Reason

After moving over to AWS Elasticsearch service, I realised the amount of active shards was increasing by stupid amounts per day. After some reading I had found that by default ES assigns 5 primary shards and 1 replica shard meaning each indices was creating 10 shards.

AWS ES service doesn't allow for you to specify the number of shards via elasticsearch.yaml or a GET /_cluster/settings method, it can only be done via index templates. This then means as opposed to specifying your number of shards per cluster, it's done per index.

Rather annoyingly, at the time of writing this the AWS ES version is 1.5.2 which means I couldn't use the Reindex API, or use logstash as there is no amazon_es input only output.

I was initially messing around with the API, and thought it'd be nice to create a tool to make my life a little easier when doing a few administration tasks (like reindexing).

Installation

To use the tool you'll need to install it's dependencies.

pip install -t vendored/ -r requirements.txt

Currently I've only tested it with Python 2.X

Usage

usage: es-tool.py [-h] [-r REINDEX] [-n NEW_INDEX_NAME] [-d DELETE_INDEX]
[-S SOURCE] [-e ENDPOINT] [-D DESTINATION] [-ps PORT_SOURCE]
[-pd PORT_DESTINATION] [-ls SSL_SOURCE]
[-ld SSL_DESTINATION]
Elasticsearch management
optional arguments:
-h, --help show this help message and exit
-r REINDEX, --reindex REINDEX
Reindex all documents in specified index and append
with "-reindex", if --new_index_name options has not
been specified
-n NEW_INDEX_NAME, --new_index_name NEW_INDEX_NAME
Name for new index
-d DELETE_INDEX, --delete_index DELETE_INDEX
Specify which index to delete from source ES
-S SOURCE, --source SOURCE
Specify Elasticsearch host from which the data will be
downloaded
-e ENDPOINT, --endpoint ENDPOINT
Alias for --source for backward compatibility
-D DESTINATION, --destination DESTINATION
Specify Elasticsearch host in which the data will be
uploaded. If not specified, the --source connection
will be used as destination.
-ps PORT_SOURCE, --port_source PORT_SOURCE
Specify port for the source Elasticsearch (9200 by
default, for AWS ES it can be 80 or 443).
-pd PORT_DESTINATION, --port_destination PORT_DESTINATION
Specify port for the destination Elasticsearch (9200
by default, for AWS ES it can be 80 or 443).
-ls SSL_SOURCE, --ssl_source SSL_SOURCE
Use SSL (https) connection for the source
ElasticSearch.
-ld SSL_DESTINATION, --ssl_destination SSL_DESTINATION
Use SSL (https) connection.

Reindex inside one cluster

If you wanted to reindex an index you can do this:

./es-tool.py \
--source elasticsearch-host \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443

The tool will reindex the indices on the same cluster and append "-reindex" to the end e.g. "name-of-index-reindex"

Reindex from one cluster to another one

./es-tool.py \
--source elasticsearch-host-1 \
--destination elasticsearch-host-2 \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443 \
--ssl_destination true \
--port_destination 443

To do

  • List indexes
  • Dry-run
  • Improve logging/messages
  • Refactor into a module fashion like my hubot-scripts implementation

About

Elasticsearch tool

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

es-tool

An Elasticsearch tool written in Python.

es-tool.py utilises the elasticsearch-py client, that in turn interacts with Elasticsearch via it's API.

Official low-level client for Elasticsearch. Its goal is to provide common ground for all Elasticsearch-related code in Python; because of this it tries to be opinion-free and very extendable.

Table of Contents

Reason

After moving over to AWS Elasticsearch service, I realised the amount of active shards was increasing by stupid amounts per day. After some reading I had found that by default ES assigns 5 primary shards and 1 replica shard meaning each indices was creating 10 shards.

AWS ES service doesn't allow for you to specify the number of shards via elasticsearch.yaml or a GET /_cluster/settings method, it can only be done via index templates. This then means as opposed to specifying your number of shards per cluster, it's done per index.

Rather annoyingly, at the time of writing this the AWS ES version is 1.5.2 which means I couldn't use the Reindex API, or use logstash as there is no amazon_es input only output.

I was initially messing around with the API, and thought it'd be nice to create a tool to make my life a little easier when doing a few administration tasks (like reindexing).

Installation

To use the tool you'll need to install it's dependencies.

pip install -t vendored/ -r requirements.txt

Currently I've only tested it with Python 2.X

Usage

usage: es-tool.py [-h] [-r REINDEX] [-n NEW_INDEX_NAME] [-d DELETE_INDEX]
[-S SOURCE] [-e ENDPOINT] [-D DESTINATION] [-ps PORT_SOURCE]
[-pd PORT_DESTINATION] [-ls SSL_SOURCE]
[-ld SSL_DESTINATION]
Elasticsearch management
optional arguments:
-h, --help show this help message and exit
-r REINDEX, --reindex REINDEX
Reindex all documents in specified index and append
with "-reindex", if --new_index_name options has not
been specified
-n NEW_INDEX_NAME, --new_index_name NEW_INDEX_NAME
Name for new index
-d DELETE_INDEX, --delete_index DELETE_INDEX
Specify which index to delete from source ES
-S SOURCE, --source SOURCE
Specify Elasticsearch host from which the data will be
downloaded
-e ENDPOINT, --endpoint ENDPOINT
Alias for --source for backward compatibility
-D DESTINATION, --destination DESTINATION
Specify Elasticsearch host in which the data will be
uploaded. If not specified, the --source connection
will be used as destination.
-ps PORT_SOURCE, --port_source PORT_SOURCE
Specify port for the source Elasticsearch (9200 by
default, for AWS ES it can be 80 or 443).
-pd PORT_DESTINATION, --port_destination PORT_DESTINATION
Specify port for the destination Elasticsearch (9200
by default, for AWS ES it can be 80 or 443).
-ls SSL_SOURCE, --ssl_source SSL_SOURCE
Use SSL (https) connection for the source
ElasticSearch.
-ld SSL_DESTINATION, --ssl_destination SSL_DESTINATION
Use SSL (https) connection.

Reindex inside one cluster

If you wanted to reindex an index you can do this:

./es-tool.py \
--source elasticsearch-host \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443

The tool will reindex the indices on the same cluster and append "-reindex" to the end e.g. "name-of-index-reindex"

Reindex from one cluster to another one

./es-tool.py \
--source elasticsearch-host-1 \
--destination elasticsearch-host-2 \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443 \
--ssl_destination true \
--port_destination 443

To do

  • List indexes
  • Dry-run
  • Improve logging/messages
  • Refactor into a module fashion like my hubot-scripts implementation

About

Elasticsearch tool

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

es-tool

An Elasticsearch tool written in Python.

es-tool.py utilises the elasticsearch-py client, that in turn interacts with Elasticsearch via it's API.

Official low-level client for Elasticsearch. Its goal is to provide common ground for all Elasticsearch-related code in Python; because of this it tries to be opinion-free and very extendable.

Table of Contents

Reason

After moving over to AWS Elasticsearch service, I realised the amount of active shards was increasing by stupid amounts per day. After some reading I had found that by default ES assigns 5 primary shards and 1 replica shard meaning each indices was creating 10 shards.

AWS ES service doesn't allow for you to specify the number of shards via elasticsearch.yaml or a GET /_cluster/settings method, it can only be done via index templates. This then means as opposed to specifying your number of shards per cluster, it's done per index.

Rather annoyingly, at the time of writing this the AWS ES version is 1.5.2 which means I couldn't use the Reindex API, or use logstash as there is no amazon_es input only output.

I was initially messing around with the API, and thought it'd be nice to create a tool to make my life a little easier when doing a few administration tasks (like reindexing).

Installation

To use the tool you'll need to install it's dependencies.

pip install -t vendored/ -r requirements.txt

Currently I've only tested it with Python 2.X

Usage

usage: es-tool.py [-h] [-r REINDEX] [-n NEW_INDEX_NAME] [-d DELETE_INDEX]
[-S SOURCE] [-e ENDPOINT] [-D DESTINATION] [-ps PORT_SOURCE]
[-pd PORT_DESTINATION] [-ls SSL_SOURCE]
[-ld SSL_DESTINATION]
Elasticsearch management
optional arguments:
-h, --help show this help message and exit
-r REINDEX, --reindex REINDEX
Reindex all documents in specified index and append
with "-reindex", if --new_index_name options has not
been specified
-n NEW_INDEX_NAME, --new_index_name NEW_INDEX_NAME
Name for new index
-d DELETE_INDEX, --delete_index DELETE_INDEX
Specify which index to delete from source ES
-S SOURCE, --source SOURCE
Specify Elasticsearch host from which the data will be
downloaded
-e ENDPOINT, --endpoint ENDPOINT
Alias for --source for backward compatibility
-D DESTINATION, --destination DESTINATION
Specify Elasticsearch host in which the data will be
uploaded. If not specified, the --source connection
will be used as destination.
-ps PORT_SOURCE, --port_source PORT_SOURCE
Specify port for the source Elasticsearch (9200 by
default, for AWS ES it can be 80 or 443).
-pd PORT_DESTINATION, --port_destination PORT_DESTINATION
Specify port for the destination Elasticsearch (9200
by default, for AWS ES it can be 80 or 443).
-ls SSL_SOURCE, --ssl_source SSL_SOURCE
Use SSL (https) connection for the source
ElasticSearch.
-ld SSL_DESTINATION, --ssl_destination SSL_DESTINATION
Use SSL (https) connection.

Reindex inside one cluster

If you wanted to reindex an index you can do this:

./es-tool.py \
--source elasticsearch-host \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443

The tool will reindex the indices on the same cluster and append "-reindex" to the end e.g. "name-of-index-reindex"

Reindex from one cluster to another one

./es-tool.py \
--source elasticsearch-host-1 \
--destination elasticsearch-host-2 \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443 \
--ssl_destination true \
--port_destination 443

To do

  • List indexes
  • Dry-run
  • Improve logging/messages
  • Refactor into a module fashion like my hubot-scripts implementation

About

Elasticsearch tool

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

es-tool

An Elasticsearch tool written in Python.

es-tool.py utilises the elasticsearch-py client, that in turn interacts with Elasticsearch via it's API.

Official low-level client for Elasticsearch. Its goal is to provide common ground for all Elasticsearch-related code in Python; because of this it tries to be opinion-free and very extendable.

Table of Contents

Reason

After moving over to AWS Elasticsearch service, I realised the amount of active shards was increasing by stupid amounts per day. After some reading I had found that by default ES assigns 5 primary shards and 1 replica shard meaning each indices was creating 10 shards.

AWS ES service doesn't allow for you to specify the number of shards via elasticsearch.yaml or a GET /_cluster/settings method, it can only be done via index templates. This then means as opposed to specifying your number of shards per cluster, it's done per index.

Rather annoyingly, at the time of writing this the AWS ES version is 1.5.2 which means I couldn't use the Reindex API, or use logstash as there is no amazon_es input only output.

I was initially messing around with the API, and thought it'd be nice to create a tool to make my life a little easier when doing a few administration tasks (like reindexing).

Installation

To use the tool you'll need to install it's dependencies.

pip install -t vendored/ -r requirements.txt

Currently I've only tested it with Python 2.X

Usage

usage: es-tool.py [-h] [-r REINDEX] [-n NEW_INDEX_NAME] [-d DELETE_INDEX]
[-S SOURCE] [-e ENDPOINT] [-D DESTINATION] [-ps PORT_SOURCE]
[-pd PORT_DESTINATION] [-ls SSL_SOURCE]
[-ld SSL_DESTINATION]
Elasticsearch management
optional arguments:
-h, --help show this help message and exit
-r REINDEX, --reindex REINDEX
Reindex all documents in specified index and append
with "-reindex", if --new_index_name options has not
been specified
-n NEW_INDEX_NAME, --new_index_name NEW_INDEX_NAME
Name for new index
-d DELETE_INDEX, --delete_index DELETE_INDEX
Specify which index to delete from source ES
-S SOURCE, --source SOURCE
Specify Elasticsearch host from which the data will be
downloaded
-e ENDPOINT, --endpoint ENDPOINT
Alias for --source for backward compatibility
-D DESTINATION, --destination DESTINATION
Specify Elasticsearch host in which the data will be
uploaded. If not specified, the --source connection
will be used as destination.
-ps PORT_SOURCE, --port_source PORT_SOURCE
Specify port for the source Elasticsearch (9200 by
default, for AWS ES it can be 80 or 443).
-pd PORT_DESTINATION, --port_destination PORT_DESTINATION
Specify port for the destination Elasticsearch (9200
by default, for AWS ES it can be 80 or 443).
-ls SSL_SOURCE, --ssl_source SSL_SOURCE
Use SSL (https) connection for the source
ElasticSearch.
-ld SSL_DESTINATION, --ssl_destination SSL_DESTINATION
Use SSL (https) connection.

Reindex inside one cluster

If you wanted to reindex an index you can do this:

./es-tool.py \
--source elasticsearch-host \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443

The tool will reindex the indices on the same cluster and append "-reindex" to the end e.g. "name-of-index-reindex"

Reindex from one cluster to another one

./es-tool.py \
--source elasticsearch-host-1 \
--destination elasticsearch-host-2 \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443 \
--ssl_destination true \
--port_destination 443

To do

  • List indexes
  • Dry-run
  • Improve logging/messages
  • Refactor into a module fashion like my hubot-scripts implementation

About

Elasticsearch tool

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

es-tool

An Elasticsearch tool written in Python.

es-tool.py utilises the elasticsearch-py client, that in turn interacts with Elasticsearch via it's API.

Official low-level client for Elasticsearch. Its goal is to provide common ground for all Elasticsearch-related code in Python; because of this it tries to be opinion-free and very extendable.

Table of Contents

Reason

After moving over to AWS Elasticsearch service, I realised the amount of active shards was increasing by stupid amounts per day. After some reading I had found that by default ES assigns 5 primary shards and 1 replica shard meaning each indices was creating 10 shards.

AWS ES service doesn't allow for you to specify the number of shards via elasticsearch.yaml or a GET /_cluster/settings method, it can only be done via index templates. This then means as opposed to specifying your number of shards per cluster, it's done per index.

Rather annoyingly, at the time of writing this the AWS ES version is 1.5.2 which means I couldn't use the Reindex API, or use logstash as there is no amazon_es input only output.

I was initially messing around with the API, and thought it'd be nice to create a tool to make my life a little easier when doing a few administration tasks (like reindexing).

Installation

To use the tool you'll need to install it's dependencies.

pip install -t vendored/ -r requirements.txt

Currently I've only tested it with Python 2.X

Usage

usage: es-tool.py [-h] [-r REINDEX] [-n NEW_INDEX_NAME] [-d DELETE_INDEX]
[-S SOURCE] [-e ENDPOINT] [-D DESTINATION] [-ps PORT_SOURCE]
[-pd PORT_DESTINATION] [-ls SSL_SOURCE]
[-ld SSL_DESTINATION]
Elasticsearch management
optional arguments:
-h, --help show this help message and exit
-r REINDEX, --reindex REINDEX
Reindex all documents in specified index and append
with "-reindex", if --new_index_name options has not
been specified
-n NEW_INDEX_NAME, --new_index_name NEW_INDEX_NAME
Name for new index
-d DELETE_INDEX, --delete_index DELETE_INDEX
Specify which index to delete from source ES
-S SOURCE, --source SOURCE
Specify Elasticsearch host from which the data will be
downloaded
-e ENDPOINT, --endpoint ENDPOINT
Alias for --source for backward compatibility
-D DESTINATION, --destination DESTINATION
Specify Elasticsearch host in which the data will be
uploaded. If not specified, the --source connection
will be used as destination.
-ps PORT_SOURCE, --port_source PORT_SOURCE
Specify port for the source Elasticsearch (9200 by
default, for AWS ES it can be 80 or 443).
-pd PORT_DESTINATION, --port_destination PORT_DESTINATION
Specify port for the destination Elasticsearch (9200
by default, for AWS ES it can be 80 or 443).
-ls SSL_SOURCE, --ssl_source SSL_SOURCE
Use SSL (https) connection for the source
ElasticSearch.
-ld SSL_DESTINATION, --ssl_destination SSL_DESTINATION
Use SSL (https) connection.

Reindex inside one cluster

If you wanted to reindex an index you can do this:

./es-tool.py \
--source elasticsearch-host \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443

The tool will reindex the indices on the same cluster and append "-reindex" to the end e.g. "name-of-index-reindex"

Reindex from one cluster to another one

./es-tool.py \
--source elasticsearch-host-1 \
--destination elasticsearch-host-2 \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443 \
--ssl_destination true \
--port_destination 443

To do

  • List indexes
  • Dry-run
  • Improve logging/messages
  • Refactor into a module fashion like my hubot-scripts implementation

About

Elasticsearch tool

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

es-tool

An Elasticsearch tool written in Python.

es-tool.py utilises the elasticsearch-py client, that in turn interacts with Elasticsearch via it's API.

Official low-level client for Elasticsearch. Its goal is to provide common ground for all Elasticsearch-related code in Python; because of this it tries to be opinion-free and very extendable.

Table of Contents

Reason

After moving over to AWS Elasticsearch service, I realised the amount of active shards was increasing by stupid amounts per day. After some reading I had found that by default ES assigns 5 primary shards and 1 replica shard meaning each indices was creating 10 shards.

AWS ES service doesn't allow for you to specify the number of shards via elasticsearch.yaml or a GET /_cluster/settings method, it can only be done via index templates. This then means as opposed to specifying your number of shards per cluster, it's done per index.

Rather annoyingly, at the time of writing this the AWS ES version is 1.5.2 which means I couldn't use the Reindex API, or use logstash as there is no amazon_es input only output.

I was initially messing around with the API, and thought it'd be nice to create a tool to make my life a little easier when doing a few administration tasks (like reindexing).

Installation

To use the tool you'll need to install it's dependencies.

pip install -t vendored/ -r requirements.txt

Currently I've only tested it with Python 2.X

Usage

usage: es-tool.py [-h] [-r REINDEX] [-n NEW_INDEX_NAME] [-d DELETE_INDEX]
[-S SOURCE] [-e ENDPOINT] [-D DESTINATION] [-ps PORT_SOURCE]
[-pd PORT_DESTINATION] [-ls SSL_SOURCE]
[-ld SSL_DESTINATION]
Elasticsearch management
optional arguments:
-h, --help show this help message and exit
-r REINDEX, --reindex REINDEX
Reindex all documents in specified index and append
with "-reindex", if --new_index_name options has not
been specified
-n NEW_INDEX_NAME, --new_index_name NEW_INDEX_NAME
Name for new index
-d DELETE_INDEX, --delete_index DELETE_INDEX
Specify which index to delete from source ES
-S SOURCE, --source SOURCE
Specify Elasticsearch host from which the data will be
downloaded
-e ENDPOINT, --endpoint ENDPOINT
Alias for --source for backward compatibility
-D DESTINATION, --destination DESTINATION
Specify Elasticsearch host in which the data will be
uploaded. If not specified, the --source connection
will be used as destination.
-ps PORT_SOURCE, --port_source PORT_SOURCE
Specify port for the source Elasticsearch (9200 by
default, for AWS ES it can be 80 or 443).
-pd PORT_DESTINATION, --port_destination PORT_DESTINATION
Specify port for the destination Elasticsearch (9200
by default, for AWS ES it can be 80 or 443).
-ls SSL_SOURCE, --ssl_source SSL_SOURCE
Use SSL (https) connection for the source
ElasticSearch.
-ld SSL_DESTINATION, --ssl_destination SSL_DESTINATION
Use SSL (https) connection.

Reindex inside one cluster

If you wanted to reindex an index you can do this:

./es-tool.py \
--source elasticsearch-host \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443

The tool will reindex the indices on the same cluster and append "-reindex" to the end e.g. "name-of-index-reindex"

Reindex from one cluster to another one

./es-tool.py \
--source elasticsearch-host-1 \
--destination elasticsearch-host-2 \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443 \
--ssl_destination true \
--port_destination 443

To do

  • List indexes
  • Dry-run
  • Improve logging/messages
  • Refactor into a module fashion like my hubot-scripts implementation

About

Elasticsearch tool

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

es-tool

An Elasticsearch tool written in Python.

es-tool.py utilises the elasticsearch-py client, that in turn interacts with Elasticsearch via it's API.

Official low-level client for Elasticsearch. Its goal is to provide common ground for all Elasticsearch-related code in Python; because of this it tries to be opinion-free and very extendable.

Table of Contents

Reason

After moving over to AWS Elasticsearch service, I realised the amount of active shards was increasing by stupid amounts per day. After some reading I had found that by default ES assigns 5 primary shards and 1 replica shard meaning each indices was creating 10 shards.

AWS ES service doesn't allow for you to specify the number of shards via elasticsearch.yaml or a GET /_cluster/settings method, it can only be done via index templates. This then means as opposed to specifying your number of shards per cluster, it's done per index.

Rather annoyingly, at the time of writing this the AWS ES version is 1.5.2 which means I couldn't use the Reindex API, or use logstash as there is no amazon_es input only output.

I was initially messing around with the API, and thought it'd be nice to create a tool to make my life a little easier when doing a few administration tasks (like reindexing).

Installation

To use the tool you'll need to install it's dependencies.

pip install -t vendored/ -r requirements.txt

Currently I've only tested it with Python 2.X

Usage

usage: es-tool.py [-h] [-r REINDEX] [-n NEW_INDEX_NAME] [-d DELETE_INDEX]
[-S SOURCE] [-e ENDPOINT] [-D DESTINATION] [-ps PORT_SOURCE]
[-pd PORT_DESTINATION] [-ls SSL_SOURCE]
[-ld SSL_DESTINATION]
Elasticsearch management
optional arguments:
-h, --help show this help message and exit
-r REINDEX, --reindex REINDEX
Reindex all documents in specified index and append
with "-reindex", if --new_index_name options has not
been specified
-n NEW_INDEX_NAME, --new_index_name NEW_INDEX_NAME
Name for new index
-d DELETE_INDEX, --delete_index DELETE_INDEX
Specify which index to delete from source ES
-S SOURCE, --source SOURCE
Specify Elasticsearch host from which the data will be
downloaded
-e ENDPOINT, --endpoint ENDPOINT
Alias for --source for backward compatibility
-D DESTINATION, --destination DESTINATION
Specify Elasticsearch host in which the data will be
uploaded. If not specified, the --source connection
will be used as destination.
-ps PORT_SOURCE, --port_source PORT_SOURCE
Specify port for the source Elasticsearch (9200 by
default, for AWS ES it can be 80 or 443).
-pd PORT_DESTINATION, --port_destination PORT_DESTINATION
Specify port for the destination Elasticsearch (9200
by default, for AWS ES it can be 80 or 443).
-ls SSL_SOURCE, --ssl_source SSL_SOURCE
Use SSL (https) connection for the source
ElasticSearch.
-ld SSL_DESTINATION, --ssl_destination SSL_DESTINATION
Use SSL (https) connection.

Reindex inside one cluster

If you wanted to reindex an index you can do this:

./es-tool.py \
--source elasticsearch-host \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443

The tool will reindex the indices on the same cluster and append "-reindex" to the end e.g. "name-of-index-reindex"

Reindex from one cluster to another one

./es-tool.py \
--source elasticsearch-host-1 \
--destination elasticsearch-host-2 \
--reindex name-of-index \
--new_index_name name-of-new-index \
--ssl_source true \
--port_source 443 \
--ssl_destination true \
--port_destination 443

To do

  • List indexes
  • Dry-run
  • Improve logging/messages
  • Refactor into a module fashion like my hubot-scripts implementation

About

Elasticsearch tool

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages