add code of venusdatebase

Change-Id: Id41d76baf1252f8f667b640fcde59e67d15f8a9f
This commit is contained in:
jiasirui 2022-12-07 09:37:47 +08:00
parent 41a116ea80
commit 8164828f7b
23 changed files with 839 additions and 0 deletions

View File

@ -0,0 +1,60 @@
Metadata-Version: 2.1
Name: openstack-venus
Version: 1.1.0.dev26
Summary: OpenStack Log Management as a Service
Home-page: UNKNOWN
Author: Brin Zhang
Author-email: zhangbailin@inspur.com
License: UNKNOWN
Description: Hello Venus
===========
An OpenStack Log Management Service.
About Venus
-----------
In light of the problems and needs of retrieval, storage and analysis etc.
of logs on the OpenStack platform, we developed the OpenStack log management
module Venus.
This project can provide a one-stop solution to log collection,
cleaning, indexing, analysis, alarm, visualization, report generation and
other needs, which involves helping operator or maintainer to quickly solve
retrieve problems, grasp the operational health of the platform, and improve
the level of platform management.
Additionally, this project plans to use machine learning algorithms to
quickly locate IT failures and root causes, and improve operation and
maintenance efficiency.
* Free software: Apache license
* Wiki: https://wiki.openstack.org/wiki/Venus
* Source: https://opendev.org/openstack/venus
* Blueprints: https://blueprints.launchpad.net/openstack-venus
* Bugs: https://bugs.launchpad.net/openstack-venus
* Documentation: https://docs.openstack.org/venus/latest/
* Release notes: https://docs.openstack.org/releasenotes/venus/
* Design specifications: https://specs.openstack.org/openstack/venus-specs/
Features
--------
* REST API for retrieval, storage and analysis of logs on the OpenStack platform.
* One-stop solution to log collection, cleaning, indexing, analysis, alarm, visualization, report generation.
Platform: UNKNOWN
Classifier: Environment :: OpenStack
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Requires-Python: >=3.8
Description-Content-Type: text/markdown

View File

@ -0,0 +1,254 @@
.stestr.conf
.zuul.yaml
AUTHORS
CONTRIBUTING.rst
ChangeLog
HACKING.rst
LICENSE
MANIFEST.in
README.bak.rst
README.rst
requirements.txt
setup.cfg
setup.py
test-requirements.txt
tox.ini
api-ref/source/conf.py
api-ref/source/index.rst
api-ref/source/status.yaml
api-ref/source/v1/api-versions.inc
api-ref/source/v1/custom-config.inc
api-ref/source/v1/index.rst
api-ref/source/v1/parameters.yaml
api-ref/source/v1/search-analyse-logs.inc
api-ref/source/v1/search-instance-callchain.inc
api-ref/source/v1/search-instance-requestids.inc
api-ref/source/v1/search-logs-download.inc
api-ref/source/v1/search-logs.inc
api-ref/source/v1/search-params.inc
api-ref/source/v1/search-typical-logs.inc
api-ref/source/v1/samples/versions-response.json
api-ref/source/v1/samples/custom-config/custom-config-show-response.json
api-ref/source/v1/samples/search-log/search-analyse-logs-show-response.json
api-ref/source/v1/samples/search-log/search-instance-callchain-show-response.json
api-ref/source/v1/samples/search-log/search-instance-request-ids-show-response.json
api-ref/source/v1/samples/search-log/search-logs-download-show-response.json
api-ref/source/v1/samples/search-log/search-logs-show-response.json
api-ref/source/v1/samples/search-log/search-params-show-response.json
api-ref/source/v1/samples/search-log/search-typical-logs-show-response.json
devstack/README.md
devstack/plugin.sh
devstack/settings
devstack/fluentd-conf/td-agent.conf
devstack/fluentd-conf/filter/00-record_transformer.conf
devstack/fluentd-conf/filter/01-rewrite.conf.c
devstack/fluentd-conf/format/apache_access.conf
devstack/fluentd-conf/format/wsgi_access.conf
devstack/fluentd-conf/input/barbican.conf
devstack/fluentd-conf/input/cinder.conf
devstack/fluentd-conf/input/cyborg.conf
devstack/fluentd-conf/input/designate.conf
devstack/fluentd-conf/input/glance.conf
devstack/fluentd-conf/input/heat.conf
devstack/fluentd-conf/input/ironic.conf
devstack/fluentd-conf/input/keystone.conf
devstack/fluentd-conf/input/magnum.conf
devstack/fluentd-conf/input/manila.conf
devstack/fluentd-conf/input/neutron.conf
devstack/fluentd-conf/input/nova.conf
devstack/fluentd-conf/input/octavia.conf
devstack/fluentd-conf/input/palcement.conf
devstack/fluentd-conf/input/senlin.conf
devstack/fluentd-conf/input/swift.conf
devstack/fluentd-conf/input/syslog.conf
devstack/fluentd-conf/input/venus.conf
devstack/fluentd-conf/input/vitrage.conf
devstack/fluentd-conf/input/zun.conf
devstack/fluentd-conf/output/00-local.conf
devstack/fluentd-conf/output/01-es.conf
doc/README.rst
doc/requirements.txt
doc/source/conf.py
doc/source/index.rst
doc/source/contributor/contributing.rst
doc/source/contributor/index.rst
doc/source/contributor/releasenotes.rst
etc/venus/README-venus.conf.sample
etc/venus/api-httpd.conf
etc/venus/api-paste.ini
etc/venus/logging_sample.conf
etc/venus/policy.json
etc/venus/rootwrap.conf
etc/venus/venus.conf
etc/venus/rootwrap.d/venus.filters
openstack_venus.egg-info/PKG-INFO
openstack_venus.egg-info/SOURCES.txt
openstack_venus.egg-info/dependency_links.txt
openstack_venus.egg-info/entry_points.txt
openstack_venus.egg-info/not-zip-safe
openstack_venus.egg-info/requires.txt
openstack_venus.egg-info/top_level.txt
releasenotes/notes/.placeholder
releasenotes/source/conf.py
releasenotes/source/index.rst
releasenotes/source/unreleased.rst
releasenotes/source/zed.rst
tools/flake8wrap.sh
tools/config/venus-config-generator.conf
tools/config/venus-policy-generator.conf
venus/__init__.py
venus/context.py
venus/exception.py
venus/i18n.py
venus/service.py
venus/utils.py
venus/version.py
venus/api/__init__.py
venus/api/common.py
venus/api/extensions.py
venus/api/urlmap.py
venus/api/xmlutil.py
venus/api/contrib/__init__.py
venus/api/middleware/__init__.py
venus/api/middleware/auth.py
venus/api/middleware/env.py
venus/api/middleware/fault.py
venus/api/middleware/sizelimit.py
venus/api/openstack/__init__.py
venus/api/openstack/wsgi.py
venus/api/schemas/atom-link.rng
venus/api/schemas/v1.1/extension.rng
venus/api/schemas/v1.1/extensions.rng
venus/api/v1/__init__.py
venus/api/v1/router.py
venus/api/v1/views/__init__.py
venus/api/v1/views/versions.py
venus/cmd/__init__.py
venus/cmd/api.py
venus/cmd/manage.py
venus/common/__init__.py
venus/common/utils.py
venus/conf/__init__.py
venus/conf/api.py
venus/conf/common.py
venus/conf/core.py
venus/conf/db.py
venus/conf/elasticsearch.py
venus/conf/profiler.py
venus/db/__init__.py
venus/hacking/__init__.py
venus/hacking/checks.py
venus/locale/venus-log-info.pot
venus/locale/venus-log-warning.pot
venus/locale/venus.pot
venus/modules/__init__.py
venus/modules/custom_config/__init__.py
venus/modules/custom_config/controller.py
venus/modules/search/__init__.py
venus/modules/search/action.py
venus/modules/search/controller.py
venus/modules/search/es_template.py
venus/modules/search/search_lib.py
venus/modules/version/__init__.py
venus/modules/version/versions.py
venus/objects/__init__.py
venus/objects/base.py
venus/openstack/__init__.py
venus/openstack/common/README
venus/openstack/common/__init__.py
venus/openstack/common/_i18n.py
venus/openstack/common/gettextutils.py
venus/openstack/common/config/__init__.py
venus/openstack/common/config/generator.py
venus/task/__init__.py
venus/task/adapter.py
venus/task/timer.py
venus/task/core/__init__.py
venus/task/core/delete_es_index_task.py
venus/tests/__init__.py
venus/tests/test_hacking.py
venus/tests/functional/__init__.py
venus/tests/unit/__init__.py
venus/tests/unit/fakes.py
venus/tests/unit/api/__init__.py
venus/tests/unit/api/test_search_action.py
venus/tests/unit/api/test_search_controller.py
venus/wsgi/__init__.py
venus/wsgi/common.py
venus/wsgi/eventlet_server.py
venus/wsgi/wsgi.py
venus/api/__init__.py
venus/api/common.py
venus/api/extensions.py
venus/api/urlmap.py
venus/api/xmlutil.py
venus/api/contrib/__init__.py
venus/api/middleware/__init__.py
venus/api/middleware/auth.py
venus/api/middleware/env.py
venus/api/middleware/fault.py
venus/api/middleware/sizelimit.py
venus/api/openstack/__init__.py
venus/api/openstack/wsgi.py
venus/api/v1/__init__.py
venus/api/v1/router.py
venus/api/v1/views/__init__.py
venus/api/v1/views/versions.py
venus/cmd/__init__.py
venus/cmd/api.py
venus/cmd/manage.py
venus/common/__init__.py
venus/common/utils.py
venus/conf/__init__.py
venus/conf/api.py
venus/conf/common.py
venus/conf/core.py
venus/conf/db.py
venus/conf/elasticsearch.py
venus/conf/profiler.py
venus/db/__init__.py
venus/db/base.py
venus/db/migration.py
venus/db/sqlalchemy/__init__.py
venus/db/sqlalchemy/api.py
venus/db/sqlalchemy/migrate_repo/__init__.py
venus/db/sqlalchemy/migrate_repo/manage.py
venus/db/sqlalchemy/migrate_repo/versions/001_venus_init.py
venus/db/sqlalchemy/migrate_repo/versions/__init__.py
venus/hacking/__init__.py
venus/hacking/checks.py
venus/modules/__init__.py
venus/modules/custom_config/__init__.py
venus/modules/custom_config/controller.py
venus/modules/search/__init__.py
venus/modules/search/action.py
venus/modules/search/controller.py
venus/modules/search/es_template.py
venus/modules/search/search_lib.py
venus/modules/version/__init__.py
venus/modules/version/versions.py
venus/objects/__init__.py
venus/objects/base.py
venus/openstack/__init__.py
venus/openstack/common/__init__.py
venus/openstack/common/_i18n.py
venus/openstack/common/gettextutils.py
venus/openstack/common/config/__init__.py
venus/openstack/common/config/generator.py
venus/task/__init__.py
venus/task/adapter.py
venus/task/timer.py
venus/task/core/__init__.py
venus/task/core/delete_es_index_task.py
venus/tests/__init__.py
venus/tests/test_hacking.py
venus/tests/functional/__init__.py
venus/tests/unit/__init__.py
venus/tests/unit/fakes.py
venus/tests/unit/api/__init__.py
venus/tests/unit/api/test_search_action.py
venus/tests/unit/api/test_search_controller.py
venus/wsgi/__init__.py
venus/wsgi/common.py
venus/wsgi/eventlet_server.py
venus/wsgi/wsgi.py

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,7 @@
[console_scripts]
venus-api = venus.cmd.api:main
venus-manager = venus.cmd.manage:main
[venus.database.migration_backend]
sqlalchemy = oslo_db.sqlalchemy.migration

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,37 @@
pbr!=2.1.0,>=0.11
pecan!=1.0.2,!=1.0.3,!=1.0.4,!=1.2,>=1.0.0
WSME>=0.10.1
eventlet>=0.26.0
oslo.i18n>=1.5.0
oslo.log>=5.0.0
oslo.context>=2.9.0
oslo.messaging>=10.3.0
oslo.concurrency>=3.26.0
oslo.service!=1.28.1,>=1.0.0
oslo.db>=10.0.0
os-resource-classes>=0.5.0
oslo.upgradecheck>=0.1.0
oslo.utils>=4.5.0
oslo.versionedobjects>=1.31.2
osprofiler>=3.4.0
SQLAlchemy!=1.1.5,!=1.1.6,!=1.1.7,!=1.1.8,>=0.9.0
alembic>=0.8.10
stevedore>=1.5.0
keystonemiddleware>=4.17.0
jsonpatch!=1.20,>=1.16
psutil>=3.2.2
python-glanceclient>=2.3.0
cursive>=0.2.1
microversion_parse>=0.2.1
openstacksdk>=0.46.0
elasticsearch<3.0.0,>=2.0.0
apscheduler>=3.6.0
retrying>=1.3.3
lxml>=4.6.2
PyMySQL>=0.7.11
[:(python_version=='3.6')]
oslo.log>=4.2.1
[:(python_version=='3.7')]
oslo.log>=4.2.1

View File

@ -0,0 +1 @@
venus

View File

@ -34,3 +34,4 @@ elasticsearch>=2.0.0,<3.0.0 # Apache-2.0
apscheduler>=3.6.0 # MIT License apscheduler>=3.6.0 # MIT License
retrying>=1.3.3 retrying>=1.3.3
lxml>=4.6.2 lxml>=4.6.2
PyMySQL>=0.7.11

View File

@ -28,3 +28,6 @@ packages =
console_scripts = console_scripts =
venus-manager = venus.cmd.manage:main venus-manager = venus.cmd.manage:main
venus-api = venus.cmd.api:main venus-api = venus.cmd.api:main
venus.database.migration_backend =
sqlalchemy = oslo_db.sqlalchemy.migration

View File

@ -22,6 +22,7 @@ import os
import sys import sys
from oslo_config import cfg from oslo_config import cfg
from oslo_db.sqlalchemy import migration
from oslo_log import log as logging from oslo_log import log as logging
from venus.conf import CONF from venus.conf import CONF
@ -31,6 +32,12 @@ from venus import objects
from venus.task import timer from venus.task import timer
from venus import version from venus import version
from venus import context
from venus import db
from venus.db import migration as db_migration
from venus.db.sqlalchemy import api as db_api
i18n.enable_lazy() i18n.enable_lazy()
@ -220,8 +227,39 @@ class TaskCommands(object):
timer.init_advanced_timer() timer.init_advanced_timer()
class DbCommands(object):
"""Class for managing the database."""
def __init__(self):
pass
@args('version', nargs='?', default=None,
help='Database version')
def sync(self, version=None):
"""Sync the database up to the most recent version."""
return db_migration.db_sync(version)
def version(self):
"""Print the current database version."""
print(migration.db_version(db_api.get_engine(),
db_migration.MIGRATE_REPO_PATH,
db_migration.INIT_VERSION))
@args('age_in_days', type=int,
help='Purge deleted rows older than age in days')
def purge(self, age_in_days):
"""Purge deleted rows older than a given age from venus tables."""
age_in_days = int(age_in_days)
if age_in_days <= 0:
print(_("Must supply a positive, non-zero value for age"))
exit(1)
ctxt = context.get_admin_context()
db.purge_deleted_rows(ctxt, age_in_days)
CATEGORIES = { CATEGORIES = {
'config': ConfigCommands, 'config': ConfigCommands,
'db': DbCommands,
'logs': GetLogCommands, 'logs': GetLogCommands,
'shell': ShellCommands, 'shell': ShellCommands,
'version': VersionCommands, 'version': VersionCommands,

View File

@ -17,6 +17,7 @@ from oslo_config import cfg
from venus.conf import api from venus.conf import api
from venus.conf import common from venus.conf import common
from venus.conf import core from venus.conf import core
from venus.conf import db
from venus.conf import elasticsearch from venus.conf import elasticsearch
from venus.conf import profiler from venus.conf import profiler
@ -27,3 +28,4 @@ common.register_opts(CONF)
core.register_opts(CONF) core.register_opts(CONF)
elasticsearch.register_opts(CONF) elasticsearch.register_opts(CONF)
profiler.register_opts(CONF) profiler.register_opts(CONF)
db.register_opts(CONF)

25
venus/conf/db.py Normal file
View File

@ -0,0 +1,25 @@
# Copyright 2020 Inspur
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from oslo_config import cfg
from oslo_db import options
db_driver_opt = cfg.StrOpt('db_driver',
default='venus.db',
help='Driver to use for database access')
def register_opts(conf):
options.set_defaults(conf, connection='sqlite:///$state_path/venus.sqlite')
conf.register_opt(db_driver_opt)

18
venus/db/__init__.py Normal file
View File

@ -0,0 +1,18 @@
# Copyright 2010 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""
DB abstraction for Venus
"""

39
venus/db/base.py Normal file
View File

@ -0,0 +1,39 @@
# Copyright 2020 Inspur
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""Base class for classes that need modular database access."""
from oslo_config import cfg
from oslo_utils import importutils
db_driver_opt = cfg.StrOpt('db_driver',
default='venus.db',
help='Driver to use for database access')
CONF = cfg.CONF
CONF.register_opt(db_driver_opt)
class Base(object):
"""DB driver is injected in the init method."""
def __init__(self, db_driver=None):
# NOTE(mriedem): Without this call, multiple inheritance involving
# the db Base class does not work correctly.
super(Base, self).__init__()
if not db_driver:
db_driver = CONF.db_driver
self.db = importutils.import_module(db_driver) # pylint: disable=C0103
self.db.dispose_engine()

58
venus/db/migration.py Normal file
View File

@ -0,0 +1,58 @@
# Copyright 2020 Inspur
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""Database setup and migration commands."""
import os
import threading
from oslo_config import cfg
from oslo_db import options
from stevedore import driver
from venus.db.sqlalchemy import api as db_api
INIT_VERSION = 000
_IMPL = None
_LOCK = threading.Lock()
options.set_defaults(cfg.CONF)
MIGRATE_REPO_PATH = os.path.join(
os.path.abspath(os.path.dirname(__file__)),
'sqlalchemy',
'migrate_repo',
)
def get_backend():
global _IMPL
if _IMPL is None:
with _LOCK:
if _IMPL is None:
_IMPL = driver.DriverManager(
"venus.database.migration_backend",
cfg.CONF.database.backend).driver
return _IMPL
def db_sync(version=None, init_version=INIT_VERSION, engine=None):
"""Migrate the database to `version` or the most recent version."""
if engine is None:
engine = db_api.get_engine()
return get_backend().db_sync(engine=engine,
abs_path=MIGRATE_REPO_PATH,
version=version,
init_version=init_version)

View File

161
venus/db/sqlalchemy/api.py Normal file
View File

@ -0,0 +1,161 @@
# Copyright 2020 Inspur
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""Implementation of SQLAlchemy backend."""
import sqlalchemy
import sys
import threading
import warnings
from oslo_config import cfg
from oslo_db import options
from oslo_db.sqlalchemy import session as db_session
from oslo_log import log as logging
import osprofiler.sqlalchemy
from venus import exception
from venus.i18n import _
CONF = cfg.CONF
CONF.import_group("profiler", "venus.service")
log = logging.getLogger(__name__)
options.set_defaults(CONF, connection='sqlite:///$state_path/venus.sqlite')
_LOCK = threading.Lock()
_FACADE = None
def _create_facade_lazily():
global _LOCK
with _LOCK:
global _FACADE
if _FACADE is None:
_FACADE = db_session.EngineFacade(
CONF.database.connection,
**dict(CONF.database)
)
if CONF.profiler.profiler_enabled:
if CONF.profiler.trace_sqlalchemy:
osprofiler.sqlalchemy.add_tracing(sqlalchemy,
_FACADE.get_engine(),
"db")
return _FACADE
def get_engine():
facade = _create_facade_lazily()
return facade.get_engine()
def get_session(**kwargs):
facade = _create_facade_lazily()
return facade.get_session(**kwargs)
def dispose_engine():
get_engine().dispose()
_DEFAULT_QUOTA_NAME = 'default'
def get_backend():
"""The backend is this module itself."""
return sys.modules[__name__]
def is_admin_context(context):
"""Indicates if the request context is an administrator."""
if not context:
warnings.warn(_('Use of empty request context is deprecated'),
DeprecationWarning)
raise Exception('die')
return context.is_admin
def is_user_context(context):
"""Indicates if the request context is a normal user."""
if not context:
return False
if context.is_admin:
return False
if not context.user_id or not context.project_id:
return False
return True
def authorize_project_context(context, project_id):
"""Ensures a request has permission to access the given project."""
if is_user_context(context):
if not context.project_id:
raise exception.NotAuthorized()
elif context.project_id != project_id:
raise exception.NotAuthorized()
def authorize_user_context(context, user_id):
"""Ensures a request has permission to access the given user."""
if is_user_context(context):
if not context.user_id:
raise exception.NotAuthorized()
elif context.user_id != user_id:
raise exception.NotAuthorized()
def authorize_quota_class_context(context, class_name):
"""Ensures a request has permission to access the given quota class."""
if is_user_context(context):
if not context.quota_class:
raise exception.NotAuthorized()
elif context.quota_class != class_name:
raise exception.NotAuthorized()
def require_admin_context(f):
"""Decorator to require admin request context.
The first argument to the wrapped function must be the context.
"""
def wrapper(*args, **kwargs):
if not is_admin_context(args[0]):
raise exception.AdminRequired()
return f(*args, **kwargs)
return wrapper
def require_context(f):
"""Decorator to require *any* user or admin context.
This does no authorization for user or project access matching, see
:py:func:`authorize_project_context` and
:py:func:`authorize_user_context`.
The first argument to the wrapped function must be the context.
"""
def wrapper(*args, **kwargs):
if not is_admin_context(args[0]) and not is_user_context(args[0]):
raise exception.NotAuthorized()
return f(*args, **kwargs)
return wrapper

View File

@ -0,0 +1,4 @@
This is a database migration repository.
More information at
http://code.google.com/p/sqlalchemy-migrate/

View File

@ -0,0 +1,24 @@
# Copyright 2020 Inspur
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import os
from migrate.versioning.shell import main
from venus.db.sqlalchemy import migrate_repo
if __name__ == '__main__':
main(debug='False',
repository=os.path.abspath(os.path.dirname(migrate_repo.__file__)))

View File

@ -0,0 +1,20 @@
[db_settings]
# Used to identify which repository this database is versioned under.
# You can use the name of your project.
repository_id=venus
# The name of the database table used to track the schema version.
# This name shouldn't already be used by your project.
# If this is changed once a database is under version control, you'll need to
# change the table name in each database too.
version_table=migrate_version
# When committing a change script, Migrate will attempt to generate the
# sql for all supported databases; normally, if one of them fails - probably
# because you don't have that database installed - it is ignored and the
# commit continues, perhaps ending successfully.
# Databases in this list MUST compile successfully during a commit, or the
# entire commit will fail. List the databases your application will actually
# be using to ensure your updates to that database work properly.
# This must be a list; example: ['postgres','sqlite']
required_dbs=[]

View File

@ -0,0 +1,85 @@
# Copyright 2020 Inspur
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""WSGI Routers for the Identity service."""
import sqlalchemy as sql
from sqlalchemy.orm import sessionmaker
def upgrade(migrate_engine):
meta = sql.MetaData()
meta.bind = migrate_engine
t_mo_regitster_task = sql.Table(
't_mo_regitster_task',
meta,
sql.Column('Id', sql.Integer, nullable=False,
primary_key=True),
sql.Column('task_name', sql.String(255), nullable=True,
primary_key=False),
sql.Column('host_name', sql.String(255), nullable=True,
primary_key=False),
sql.Column('update_time', sql.DateTime, nullable=True,
primary_key=False, default='0000-00-00 00:00:00'),
sql.Column('created_at', sql.DateTime,
nullable=True, primary_key=False),
sql.Column('updated_at', sql.DateTime,
nullable=True, primary_key=False),
sql.Column('deleted', sql.String(1),
nullable=True, primary_key=False),
sql.Column('deleted_at', sql.DateTime,
nullable=True, primary_key=False),
mysql_engine='InnoDB',
mysql_charset='utf8')
t_mo_regitster_task.create(migrate_engine, checkfirst=True)
new_data = {
'Id': '1',
'task_name': 'delete_es_index',
'host_name': '',
'update_time': '1900-01-01 00:00:00'
}
maker = sessionmaker(bind=migrate_engine)
session = maker()
t_mo_regitster_task = sql.Table('t_mo_regitster_task', meta, autoload=True)
row = t_mo_regitster_task.insert().values(**new_data)
session.execute(row)
session.commit()
t_mo_custom_config = sql.Table(
't_mo_custom_config',
meta,
sql.Column('id', sql.String(64), primary_key=True),
sql.Column('value', sql.String(10240), nullable=False),
sql.Column('update_time', sql.DateTime),
mysql_engine='InnoDB',
mysql_charset='utf8')
t_mo_custom_config.create(migrate_engine, checkfirst=True)
new_data = {
'id': 'es_index_length',
'value': '30',
'update_time': '1900-01-01 00:00:00'
}
maker = sessionmaker(bind=migrate_engine)
session = maker()
t_mo_custom_config = sql.Table('t_mo_custom_config', meta, autoload=True)
row = t_mo_custom_config.insert().values(**new_data)
session.execute(row)
session.commit()
session.close()