Merge branch 'elastic' of git.blender.org:pillar into elastic
This commit is contained in:
commit
8206186426
@ -21,13 +21,15 @@ class ResetIndexTask(object):
|
||||
"""
|
||||
Clear and build index / mapping
|
||||
"""
|
||||
index = ''
|
||||
index_key = ''
|
||||
"""Key into the ELASTIC_INDICES dict in the app config."""
|
||||
|
||||
doc_types = []
|
||||
name = 'remove index'
|
||||
|
||||
def __init__(self):
|
||||
|
||||
if not self.index:
|
||||
if not self.index_key:
|
||||
raise ValueError("No index specified")
|
||||
|
||||
if not self.doc_types:
|
||||
@ -40,16 +42,16 @@ class ResetIndexTask(object):
|
||||
)
|
||||
|
||||
def execute(self):
|
||||
|
||||
idx = es.Index(self.index)
|
||||
index = current_app.config['ELASTIC_INDICES'][self.index_key]
|
||||
idx = es.Index(index)
|
||||
|
||||
try:
|
||||
idx.delete(ignore=404)
|
||||
log.info("Deleted index %s", self.index)
|
||||
log.info("Deleted index %s", index)
|
||||
except AttributeError:
|
||||
log.warning("Could not delete index '%s', ignoring", self.index)
|
||||
log.warning("Could not delete index '%s', ignoring", index)
|
||||
except NotFoundError:
|
||||
log.warning("Could not delete index '%s', ignoring", self.index)
|
||||
log.warning("Could not delete index '%s', ignoring", index)
|
||||
|
||||
# create doc types
|
||||
for dt in self.doc_types:
|
||||
@ -60,25 +62,10 @@ class ResetIndexTask(object):
|
||||
|
||||
|
||||
class ResetNodeIndex(ResetIndexTask):
|
||||
index = current_app.config['ELASTIC_INDICES']['NODE']
|
||||
index_key = 'NODE'
|
||||
doc_types = [documents.Node]
|
||||
|
||||
|
||||
class ResetUserIndex(ResetIndexTask):
|
||||
index = current_app.config['ELASTIC_INDICES']['USER']
|
||||
index_key = 'USER'
|
||||
doc_types = [documents.User]
|
||||
|
||||
|
||||
def reset_node_index():
|
||||
resettask = ResetNodeIndex()
|
||||
resettask.execute()
|
||||
|
||||
|
||||
def reset_index(indexnames):
|
||||
if 'users' in indexnames:
|
||||
resettask = ResetUserIndex()
|
||||
resettask.execute()
|
||||
if 'nodes' in indexnames:
|
||||
resettask = ResetUserIndex()
|
||||
resettask.execute()
|
||||
|
||||
|
@ -5,17 +5,21 @@ import bson
|
||||
from flask_script import Manager
|
||||
|
||||
from pillar import current_app
|
||||
from pillar.api.search import index
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
manager_elk = Manager(
|
||||
current_app, usage="Elastic utilities, like reset_index()")
|
||||
|
||||
indexes = ['users', 'nodes']
|
||||
name_to_task = {
|
||||
'nodes': index.ResetNodeIndex,
|
||||
'users': index.ResetUserIndex,
|
||||
}
|
||||
|
||||
|
||||
@manager_elk.command
|
||||
def reset_index(elk_index=None):
|
||||
@manager_elk.option('indices', nargs='*')
|
||||
def reset_index(indices):
|
||||
"""
|
||||
Destroy and recreate elastic indices
|
||||
|
||||
@ -23,16 +27,16 @@ def reset_index(elk_index=None):
|
||||
"""
|
||||
|
||||
with current_app.app_context():
|
||||
from pillar.api.search import index
|
||||
if not elk_index:
|
||||
index.reset_index(indexes)
|
||||
return
|
||||
if elk_index == 'nodes':
|
||||
index.reset_index(['node'])
|
||||
return
|
||||
if elk_index == 'users':
|
||||
index.reset_index(['user'])
|
||||
return
|
||||
if not indices:
|
||||
indices = name_to_task.keys()
|
||||
|
||||
for elk_index in indices:
|
||||
try:
|
||||
task = name_to_task[elk_index]()
|
||||
except KeyError:
|
||||
raise SystemError('Unknown elk_index, choose from %s' %
|
||||
(', '.join(name_to_task.keys())))
|
||||
task.execute()
|
||||
|
||||
|
||||
def _reindex_users():
|
||||
@ -71,7 +75,6 @@ def _public_project_ids() -> typing.List[bson.ObjectId]:
|
||||
|
||||
|
||||
def _reindex_nodes():
|
||||
|
||||
db = current_app.db()
|
||||
pipeline = [
|
||||
{'$match': {'project': {'$in': _public_project_ids()}}},
|
||||
@ -95,16 +98,15 @@ def _reindex_nodes():
|
||||
continue
|
||||
|
||||
|
||||
@manager_elk.command
|
||||
def reindex(indexname):
|
||||
|
||||
@manager_elk.option('indexname', nargs='?')
|
||||
def reindex(indexname=''):
|
||||
if not indexname:
|
||||
log.debug('reindex everything..')
|
||||
log.info('reindex everything..')
|
||||
_reindex_nodes()
|
||||
_reindex_users()
|
||||
elif indexname == 'users':
|
||||
log.debug('Indexing %s', indexname)
|
||||
log.info('Indexing %s', indexname)
|
||||
_reindex_users()
|
||||
elif indexname == 'nodes':
|
||||
log.debug('Indexing %s', indexname)
|
||||
log.info('Indexing %s', indexname)
|
||||
_reindex_nodes()
|
||||
|
Loading…
x
Reference in New Issue
Block a user