diff --git a/inventory_provider/tasks/ims_worker.py b/inventory_provider/tasks/ims_worker.py index 5b736e8d1726a3b05c45841f555450efe2f12ffd..34eb6a710072ec2d917f22fda568c5b32073ab86 100644 --- a/inventory_provider/tasks/ims_worker.py +++ b/inventory_provider/tasks/ims_worker.py @@ -1,5 +1,11 @@ +import csv import json import logging +import subprocess +import tempfile +from datetime import datetime +from enum import IntFlag +from pathlib import Path from inventory_provider.db import ims_data from inventory_provider.db.ims import IMS @@ -15,7 +21,7 @@ logger = logging.getLogger(__name__) @app.task(base=InventoryTask, bind=True) def update_lg_routers_ims(self): - logger.debug('>>> update_lg_routers_ims - MOVED') + logger.debug('>>> update_lg_routers_ims') r = get_next_redis(InventoryTask.config) for k in r.scan_iter('ims:lg:*'): @@ -27,3 +33,55 @@ def update_lg_routers_ims(self): r.set(f'ims:lg:{router["equipment name"]}', json.dumps(router)) logger.debug('<<< update_lg_routers_ims') + + +class OTRSFiles(IntFlag): + CUSTOMER_COMPANIES = 1 + CUSTOMER_USERS = 2 + + +@app.task(base=InventoryTask, bind=True) +def export_data_for_otrs(self, files_to_export=None): + if files_to_export: + files_to_export = OTRSFiles(files_to_export) + else: + files_to_export = set(OTRSFiles) + + logger.debug('>>> export_data_for_otrs_ims') + ims_config = InventoryTask.config["ims"] + otrs_config = InventoryTask.config["otrs-export"] + + command_template = 'rsync -aP --rsh="ssh -l {user} -p 22 -i {key_file}" {source_dir}/* {destination}' # noqa + + with tempfile.TemporaryDirectory() as temp_dir: + temp_path = Path(temp_dir) + ds = IMS( + ims_config['api'], + ims_config['username'], + ims_config['password']) + + prefix = datetime.now().strftime('%Y%m%d') + '_' + + if OTRSFiles.CUSTOMER_COMPANIES in files_to_export: + cus_co_path = temp_path.joinpath(f'{prefix}customer_company.csv') + with open(cus_co_path, 'w+') as f: + logger.debug('\n\n1\n\n') + writer = csv.writer(f, delimiter='^') + writer.writerows(ims_data.otrs_get_customer_company_rows(ds)) + logger.debug('\n\n2\n\n') + + if OTRSFiles.CUSTOMER_USERS in files_to_export: + cus_usr_path = temp_path.joinpath(f'{prefix}customer_user.csv') + with open(cus_usr_path, 'w+') as f: + writer = csv.writer(f, delimiter='^') + writer.writerows(ims_data.otrs_get_customer_users_rows(ds)) + + command = command_template.format( + user=otrs_config['username'], + key_file=otrs_config['private-key'], + source_dir=temp_dir, + destination=otrs_config['destination'] + ) + subprocess.run(command, shell=True, check=True) + + logger.debug('<<< export_data_for_otrs_ims')