%PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
Server IP : 188.40.95.74 / Your IP : 216.73.216.205 Web Server : Apache System : Linux cp01.striminghost.net 3.10.0-1160.119.1.el7.tuxcare.els13.x86_64 #1 SMP Fri Nov 22 06:29:45 UTC 2024 x86_64 User : vlasotin ( 1054) PHP Version : 5.6.40 Disable Function : NONE MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/lib/python2.7/site-packages/leapp/utils/audit/ |
Upload File : |
from leapp.utils.audit import dict_factory, get_connection def _fetch_table_for_context(db, table, context): cursor = db.execute(''' SELECT * FROM {table} WHERE context = ? '''.format(table=table), (context,)) cursor.row_factory = dict_factory while True: row = cursor.fetchone() if not row: break yield row del cursor def _row_tuple(row, *fields): return tuple(row[name] for name in fields or row.keys()) def _dup_host(db, newcontext, oldcontext): lookup = {} for row in _fetch_table_for_context(db, 'host', oldcontext): # id, context, hostname row_id, hostname = _row_tuple(row, 'id', 'hostname') cursor = db.execute('INSERT INTO host (context, hostname) VALUES(?, ?)', (newcontext, hostname)) lookup[row_id] = cursor.lastrowid return lookup def _dup_data_source(db, host, newcontext, oldcontext): lookup = {} for row in _fetch_table_for_context(db, 'data_source', oldcontext): # id, context, hostname row_id, host_id, actor, phase = _row_tuple(row, 'id', 'host_id', 'actor', 'phase') cursor = db.execute('INSERT INTO data_source (context, host_id, actor, phase) VALUES(?, ?, ?, ?)', (newcontext, host[host_id], actor, phase)) lookup[row_id] = cursor.lastrowid return lookup def _dup_message(db, data_source, newcontext, oldcontext): lookup = {} for row in _fetch_table_for_context(db, 'message', oldcontext): # id, context, data_source_id, stamp, topic, type, message_data_hash row_id, data_source_id, stamp, topic, type_, message_data_hash = _row_tuple( row, 'id', 'data_source_id', 'stamp', 'topic', 'type', 'message_data_hash') cursor = db.execute( 'INSERT INTO message (context, data_source_id, stamp, topic, type, message_data_hash) ' ' VALUES(?, ?, ?, ?, ?, ?)', (newcontext, data_source[data_source_id], stamp, topic, type_, message_data_hash)) lookup[row_id] = cursor.lastrowid return lookup def _dup_audit(db, message, data_source, newcontext, oldcontext): lookup = {} for row in _fetch_table_for_context(db, 'audit', oldcontext): # id, context, event, stamp, data_source_id, message_id, data row_id, event, stamp, data_source_id, message_id, data = _row_tuple( row, 'id', 'event', 'stamp', 'data_source_id', 'message_id', 'data') if message_id is not None: message_id = message[message_id] cursor = db.execute( 'INSERT INTO audit (context, event, stamp, data_source_id, message_id, data) VALUES(?, ?, ?, ?, ?, ?)', (newcontext, event, stamp, data_source[data_source_id], message_id, data)) lookup[row_id] = cursor.lastrowid return lookup def _dup_entity(db, newcontext, oldcontext): for row in _fetch_table_for_context(db, 'entity', oldcontext): # id context kind name metadata_hash row_id, kind, name, metadata_hash = _row_tuple(row, 'id', 'kind', 'name', 'metadata_hash') db.execute( 'INSERT INTO entity (context, kind, name, metadata_hash) VALUES(?, ?, ?, ?)', (newcontext, kind, name, metadata_hash)) def _dup_dialog(db, data_source, newcontext, oldcontext): for row in _fetch_table_for_context(db, 'dialog', oldcontext): # id context scope data data_source_id row_id, scope, data, data_source_id = _row_tuple(row, 'id', 'scope', 'data', 'data_source_id') db.execute( 'INSERT INTO dialog (context, scope, data, data_source_id) VALUES(?, ?, ?, ?)', (newcontext, scope, data, data_source[data_source_id])) def clone_context(oldcontext, newcontext, use_db=None): # Enter transaction - In case of any exception automatic rollback is issued # and it is automatically committed if there was no exception with get_connection(use_db) as db: # First clone host entries host = _dup_host(db=db, newcontext=newcontext, oldcontext=oldcontext) # Next clone data_source entries and use the lookup table generated by the host duplication data_source = _dup_data_source(db=db, host=host, newcontext=newcontext, oldcontext=oldcontext) # Next clone message entries and use the lookup table generated by the data_source duplication message = _dup_message(db=db, data_source=data_source, newcontext=newcontext, oldcontext=oldcontext) # Last clone message entries and use the lookup table generated by the data_source and message duplications _dup_audit(db=db, data_source=data_source, message=message, newcontext=newcontext, oldcontext=oldcontext) _dup_entity(db=db, oldcontext=oldcontext, newcontext=newcontext) _dup_dialog(db=db, data_source=data_source, oldcontext=oldcontext, newcontext=newcontext)