Explorar el Código

Neuer Versuch mit status-client

gc-server3 hace 1 mes
padre
commit
79174cfc42

+ 4 - 6
status_client/db_info.py

@@ -1,11 +1,11 @@
 import pyodbc
 
+from database.model import DsnConfig
 
-class DatabaseInfo:
-    conn: pyodbc.Connection
 
+class DatabaseInfo:
     def __init__(self):
-        self._conn = pyodbc.connect("DSN=GC;UID=sa;PWD=Mffu3011#")
+        self._conn = pyodbc.connect(DsnConfig().conn_string_pyodbc)
 
     def databases(self):
         res = self._conn.execute(
@@ -19,8 +19,6 @@ class DatabaseInfo:
             """
             SELECT db_name() as DatabaseName, s.name AS SchemaName, t.name AS TableName, p.rows AS RowCounts,
                 SUM(a.total_pages) * 8 AS TotalSpaceKB,
-                SUM(a.used_pages) * 8 AS UsedSpaceKB,
-                (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
                 u.last_user_update AS LastChanged
             FROM sys.tables AS t
             INNER JOIN sys.indexes AS i ON t.object_id = i.object_id
@@ -29,7 +27,7 @@ class DatabaseInfo:
             LEFT OUTER JOIN sys.schemas AS s ON t.schema_id = s.schema_id
             LEFT OUTER JOIN sys.dm_db_index_usage_stats AS u ON t.object_id = u.object_id
             WHERE (t.name NOT LIKE 'dt%') AND (t.is_ms_shipped = 0) AND (i.object_id > 255)
-            GROUP BY s.name, t.name, p.rows
+            GROUP BY s.name, t.name, p.rows, u.last_user_update
             ORDER BY 1, 2, 3"""
         )
         return res.fetchall()

+ 5 - 4
status_client/ftp_client.py

@@ -1,8 +1,9 @@
+import warnings
+from dataclasses import dataclass
+from pathlib import Path
+
 import plac
 import pysftp
-from pathlib import Path
-from dataclasses import dataclass
-import warnings
 
 
 @dataclass
@@ -21,7 +22,7 @@ class FtpClient:
         # cfg = json.load(open(self.base_dir.joinpath('ftp_config.json'), 'r'))
         # self.ftp_cfg = FtpConfig(**cfg)
         # self.ftp_cfg = FtpConfig("ftp.global-cube.com", "p33781016-vm", "Gcbs12ma-vm2020!!", "/")
-        self.ftp_cfg = FtpConfig("ftp.global-cube.com", "u1339416173", "dihob#ratuy5kub%", "/")
+        self.ftp_cfg = FtpConfig("ftp1.global-cube.com", "u1339416173", "dihob#ratuy5kub%", "/")
         warnings.filterwarnings("ignore")
 
     @plac.pos("filename", "", type=str)

+ 4 - 3
status_client/path_info.py

@@ -1,8 +1,9 @@
-from datetime import datetime
 import os
 import zipfile
-from pathlib import Path
+from datetime import datetime
 from os import path
+from pathlib import Path
+
 import psutil
 
 
@@ -59,7 +60,7 @@ class PathInfo:
         file_info = [
             str(filename),
             str(st.st_size),
-            datetime.fromtimestamp(st.st_ctime).isoformat(timespec="seconds"),
+            datetime.fromtimestamp(st.st_birthtime).isoformat(timespec="seconds"),
             datetime.fromtimestamp(st.st_mtime).isoformat(timespec="seconds"),
             readable,
             writable,

+ 4 - 4
status_client/process_monitor.py

@@ -1,9 +1,9 @@
-import psutil
-from datetime import datetime
-import pandas as pd
-import time
 import os
+import time
+from datetime import datetime
 
+import pandas as pd
+import psutil
 
 sort_by = "memory_usage"
 columns = [

+ 37 - 15
status_client/status_client.py

@@ -1,5 +1,6 @@
 import csv
 import os
+import re
 import subprocess
 import zipfile
 from datetime import datetime
@@ -17,12 +18,27 @@ def run_command(cmd, logfile):
         p.wait()
 
 
-def task_scheduler(logfile):
-    run_command('schtasks /query /v /fo CSV | find ".bat"', logfile)
+def task_scheduler(logfile, portal_dir):
+    run_command("schtasks /query /v /fo CSV", logfile)
+    logfile_filter = lambda line: portal_dir.lower() in line.lower()  # noqa: E731
+    filter_logfile(logfile, logfile_filter)
+
+
+def filter_logfile(logfile, logfile_filter):
+    logfile_temp = logfile + ".temp"
+    Path(logfile_temp).unlink(missing_ok=True)
+    Path(logfile).rename(logfile_temp)
+    with open(logfile_temp, "r", encoding="cp850") as frh:
+        with open(logfile, "w", encoding="latin-1", newline="") as fwh:
+            fwh.write(frh.readline())  # header
+            fwh.writelines(line for line in frh.readlines() if logfile_filter(line))
+    # os.remove(logfile_temp)
 
 
 def task_manager(logfile):
     run_command("tasklist /fo CSV", logfile)
+    logfile_filter = lambda line: not re.search(r"chrome|msedge|svchost|conhost", line, re.IGNORECASE)  # noqa: E731
+    filter_logfile(logfile, logfile_filter)
 
 
 def shared_files(logfile):
@@ -54,14 +70,12 @@ def database_info(cfg: config.Config, csv_file):
         wr = csv.writer(fwh, delimiter=";")
         wr.writerow(
             [
-                "DatabaseName",
-                "SchemaName",
-                "TableName",
-                "RowCounts",
-                "TotalSpaceKB",
-                "UsedSpaceKB",
-                "UnusedSpaceKB",
-                "LastChanged",
+                "database_name",
+                "schema_name",
+                "table_name",
+                "row_count",
+                "total_space_kb",
+                "last_changed",
             ]
         )
         for row in result:
@@ -70,12 +84,19 @@ def database_info(cfg: config.Config, csv_file):
 
 
 def zip_to_file(base_dir, zip_file):
-    filter = ["config/*", "config/info/*", "config/models/*", "logs/*", "*.ini", "*.bat"]
+    filter = [
+        "Tasks/config/*",
+        "Tasks/config/info/*",
+        "Tasks/config/models/*",
+        "Tasks/logs/*",
+        "Tasks/*.ini",
+        "Tasks/*.bat",
+    ]
 
     with zipfile.ZipFile(zip_file, "w", compression=zipfile.ZIP_DEFLATED, compresslevel=9) as zip:
         for f in filter:
             for e in Path(base_dir).glob(f):
-                if ".zip" not in e.name:
+                if e.is_file() and ".zip" not in e.name:
                     zip.write(e, e.relative_to(base_dir))
 
 
@@ -83,11 +104,11 @@ def system_check():
     cfg = config.Config()
 
     # Aufgabenplanung aktueller Stand
-    task_scheduler(cfg.log_dir + "\\schtasks.csv.log")
+    task_scheduler(cfg.log_dir + "\\schtasks.csv.log", cfg.portal_dir)
     # Laufende Prozesse
     task_manager(cfg.log_dir + "\\tasklist.csv.log")
     # aktuelle Freigabe-Sessions
-    shared_files(cfg.log_dir + "\\openfiles.csv.log")
+    # shared_files(cfg.log_dir + "\\openfiles.csv.log")
     # Tabellengrößen
     database_info(cfg, cfg.log_dir + "\\db_info.csv.log")
 
@@ -101,7 +122,8 @@ def system_check():
     # Logdateien aus Tasks/logs und System/prot
     timestamp = datetime.now().strftime("%Y-%m-%d_%H%M%S")
     zip_file = f"{cfg.tasks_dir}\\logs\\zip\\{cfg.kunde_safe}_{timestamp}.zip"
-    zip_to_file(cfg.tasks_dir, zip_file)
+    os.makedirs(Path(zip_file).parent, exist_ok=True)
+    zip_to_file(cfg.portal_dir, zip_file)
 
     # Upload auf FTP
     FtpClient().upload(zip_file)