mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
140 lines
4.6 KiB
Python
Executable File
140 lines
4.6 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
# depends:
|
|
# ^ pymongo # install via: easy_install pymongo
|
|
# behaviour:
|
|
# ^ the script will "move" the collections if source and target server are
|
|
# the same but will "copy" (dump/restore) if source and target servers are
|
|
# different
|
|
|
|
import subprocess
|
|
import sys
|
|
from collections import OrderedDict
|
|
from urllib import quote_plus
|
|
|
|
from pymongo import MongoClient
|
|
|
|
from_host = '127.0.0.1'
|
|
from_port = '27017'
|
|
from_db = '11'
|
|
from_auth_db = 'cgrates' # Auth db on source server
|
|
from_user = 'cgrates'
|
|
from_pass = ''
|
|
|
|
to_host = '127.0.0.1'
|
|
to_port = '27017'
|
|
to_db = '10'
|
|
to_auth_db = "cgrates" # Auth db on target server
|
|
to_user = 'cgrates'
|
|
to_pass = ''
|
|
|
|
ignore_empty_cols = True
|
|
# Do not migrate collections with 0 document count.
|
|
# Works only if from/to is on same host.
|
|
|
|
# Overwrite target collections flag.
|
|
# Works only if from/to is on same host.
|
|
# If from/to hosts are different we use mongorestore
|
|
# which overwrites by default.
|
|
drop_target = False
|
|
|
|
dump_folder = 'dump'
|
|
|
|
# same server
|
|
if from_host == to_host and from_port == to_port:
|
|
print('Migrating on same server...')
|
|
mongo_from_url = 'mongodb://%s:%s@%s:%s/%s' % (
|
|
from_user,
|
|
quote_plus(from_pass),
|
|
from_host,
|
|
from_port,
|
|
from_auth_db
|
|
)
|
|
if from_pass == '': # disabled auth
|
|
mongo_from_url = 'mongodb://%s:%s/%s' % (
|
|
from_host,
|
|
from_port,
|
|
from_db
|
|
)
|
|
client = MongoClient(mongo_from_url)
|
|
|
|
db = client[from_db]
|
|
cols = db.collection_names()
|
|
|
|
# collections found
|
|
if len(cols) > 0:
|
|
print('Found %d collections on source. Moving...' % len(cols))
|
|
i = 0
|
|
for col in cols:
|
|
i += 1
|
|
if(
|
|
not ignore_empty_cols or
|
|
(ignore_empty_cols and db[col].count() > 0)
|
|
):
|
|
print(
|
|
'Moving collection %s (%d of %d)...' % (
|
|
col, i, len(cols)
|
|
)
|
|
)
|
|
try:
|
|
client.admin.command(
|
|
OrderedDict(
|
|
[
|
|
(
|
|
'renameCollection',
|
|
from_db + '.' + col
|
|
),
|
|
(
|
|
'to',
|
|
to_db + '.' + col
|
|
),
|
|
(
|
|
'dropTarget',
|
|
drop_target
|
|
)
|
|
]
|
|
)
|
|
)
|
|
except:
|
|
e = sys.exc_info()[0]
|
|
print(e)
|
|
else:
|
|
print(
|
|
'Skipping empty collection %s (%d of %d)...' % (
|
|
col, i, len(cols)
|
|
)
|
|
)
|
|
# no collections found
|
|
else:
|
|
print('No collections in source database.')
|
|
|
|
# different servers
|
|
else:
|
|
print('Migrating between different servers...')
|
|
print('Dumping...')
|
|
out = subprocess.check_output([
|
|
'mongodump',
|
|
'--host', '%s' % from_host,
|
|
'-u', '%s' % from_user,
|
|
'-p', '%s' % from_pass,
|
|
'--authenticationDatabase', '%s' % from_auth_db,
|
|
'--db', '%s' % from_db,
|
|
'--port', '%s' % from_port,
|
|
'-o', '%s' % dump_folder,
|
|
], stderr=subprocess.STDOUT)
|
|
print('Dump complete.')
|
|
|
|
print('Restoring...')
|
|
out = subprocess.check_output([
|
|
'mongorestore',
|
|
'--host', '%s' % to_host,
|
|
'-u', '%s' % to_user,
|
|
'-p', '%s' % to_pass,
|
|
'--authenticationDatabase', '%s' % to_auth_db,
|
|
'--db', '%s' % to_db,
|
|
'--port', '%s' % to_port,
|
|
'--drop', '%s/%s' % (dump_folder, from_db),
|
|
], stderr=subprocess.STDOUT)
|
|
print('Restore complete.')
|
|
print('Migration complete.')
|