status_client.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import csv
  2. import os
  3. import subprocess
  4. from pathlib import Path
  5. import zipfile
  6. from datetime import datetime
  7. from path_info import PathInfo
  8. import config
  9. from ftp_client import FtpClient
  10. from db_info import DatabaseInfo
  11. def run_command(cmd, logfile):
  12. with open(logfile, 'wb') as stream:
  13. p = subprocess.Popen(cmd, stdout=stream, stderr=stream)
  14. p.wait()
  15. def task_scheduler(logfile):
  16. run_command('schtasks /query /v /fo CSV', logfile)
  17. def task_manager(logfile):
  18. run_command('tasklist /fo CSV', logfile)
  19. def shared_files(logfile):
  20. run_command('openfiles /Query /fo CSV', logfile)
  21. def model_datasources(cfg, model_file: Path, logfile):
  22. cmd = f'"{cfg.cognos7.program_dir}\\runmac32.exe" "{cfg.tools_dir}\\VBS\\list-datasources-c11.mac" ' \
  23. + f'"{model_file.parent}","{model_file.name}","{logfile}"'
  24. p = subprocess.Popen(cmd)
  25. p.wait()
  26. def datasources_all_models(cfg: config.Config):
  27. os.makedirs(cfg.tasks_dir + '\\config\\models', exist_ok=True)
  28. for model_file in Path(cfg.system_dir + '\\Models').glob('*.pyj'):
  29. model_datasources(cfg, model_file, cfg.tasks_dir + '\\config\\models\\' + model_file.name + '.log')
  30. def database_info(cfg: config.Config):
  31. dbinfo = DatabaseInfo()
  32. result = []
  33. for db in dbinfo.databases():
  34. result.extend(dbinfo.table_size(db[0]))
  35. csv_file = cfg.tasks_dir + '\\logs\\db_info.csv'
  36. with open(csv_file, 'w', encoding='latin-1', newline='') as fwh:
  37. wr = csv.writer(fwh, delimiter=';')
  38. wr.writerow(['DatabaseName', 'SchemaName', 'TableName', 'RowCounts', 'TotalSpaceKB', 'UsedSpaceKB', 'UnusedSpaceKB', 'LastChanged'])
  39. for row in result:
  40. wr.writerow(row)
  41. return result
  42. def zip_to_file(base_dir, zip_file):
  43. filter = ['config/*', 'config/info/*', 'config/models/*', 'logs/*', '*.ini', '*.bat']
  44. with zipfile.ZipFile(zip_file, 'w', compression=zipfile.ZIP_DEFLATED, compresslevel=9) as zip:
  45. for f in filter:
  46. for e in Path(base_dir).glob(f):
  47. if '.zip' not in e.name:
  48. zip.write(e, e.relative_to(base_dir))
  49. if __name__ == '__main__':
  50. cfg = config.Config()
  51. # Aufgabenplanung aktueller Stand
  52. task_scheduler(cfg.tasks_dir + '\\logs\\schtasks.csv')
  53. # Laufende Prozesse
  54. task_manager(cfg.tasks_dir + '\\logs\\tasklist.csv')
  55. # aktuelle Freigabe-Sessions
  56. shared_files(cfg.tasks_dir + '\\logs\\openfiles.csv')
  57. # Tabellengrößen
  58. database_info(cfg)
  59. datasources_all_models(cfg)
  60. # Liste aller Dateien im GAPS-Verzeichnis
  61. # filename;size;cdate;mdate
  62. ti = PathInfo()
  63. ti.check_dir(cfg.portal_dir)
  64. ti.write_logfile(cfg.tasks_dir + '\\logs\\path_info.csv')
  65. # Logdateien aus Tasks/logs und System/prot
  66. timestamp = datetime.now().strftime('%Y-%m-%d_%H%M%S')
  67. zip_file = f"{cfg.tasks_dir}\\logs\\{cfg.kunde_safe}_{timestamp}.zip"
  68. zip_to_file(cfg.tasks_dir, zip_file)
  69. # Upload auf FTP
  70. FtpClient().upload(zip_file)