浏览代码

status-client noch einmal verfeinert

Global Cube 2 年之前
父节点
当前提交
5e8d2066bd

+ 4 - 1
.vscode/settings.json

@@ -15,5 +15,8 @@
     "python.linting.enabled": true,
     "python.testing.pytestArgs": [
         "tests"
-    ]
+    ],
+    "files.associations": {
+        "*.mac": "vbs"
+    }
 }

二进制
gctools/VBS/list-datasources-C11.MCX


+ 9 - 14
gctools/VBS/list-datasources-C11.mac

@@ -14,8 +14,7 @@ Sub Main ()
 
     folder = "C:\GlobalCube\System\AUDEV_CARIT\Models"
     filename = "s_offene_auftraege.pyj"
-    rem filename = "f_belege.pyj"
-    rem publish = "C:\GAPS\Portal\System\Cube_out\temp"
+    logfile = "C:\GlobalCube\Tasks\config\models\s_offene_auftraege.pyj.log"
 
     folder = GetField(Command, 1, ",")
     filename = GetField(Command, 2, ",")
@@ -25,12 +24,17 @@ Sub Main ()
     Set objModel = objApp.OpenModel(folder + "\" + filename)
    
     Open logfile for Output as #1
-    rem Print objModel.DataSources.Count
+
+    Set objCube = objModel.Cubes.Item(1)
+    Write #1, objCube.MDCFile
+
+    Write #1, "--"
     For i = 1 to objModel.DataSources.Count
         Set objDataSource = objModel.DataSources.Item(i)
 
         If objDataSource.Type = 38 Then
             rem Package
+            Write #1, "[", objDataSource.Name, "]"
             For j = 1 to objDataSource.Queries.Count
                 Set objQuery = objDataSource.Queries.Item(j)
                 Write #1, objQuery.Name 
@@ -42,19 +46,10 @@ Sub Main ()
         Else
            Write #1, objDataSource.Name
         End If     
-
-        rem If objDataSource.Type = 4 Then
-           rem Print objDataSource.SQLExpression
-        rem End If
-        rem Print "--"
     Next
-    Write #1, "--"
-    Set objCube = objModel.Cubes.Item(1)
-    Write #1, objCube.MDCFile
-    Close #1
-   
+
+    Close #1   
     objModel.Close
-    rem objApp.Quit
     Set objQuery = Nothing
     Set objDataSource = Nothing
     Set objModel = Nothing

+ 7 - 5
gctools/config.py

@@ -25,7 +25,7 @@ class Cognos7Config:
 
 
 def joinpath(path, *other):
-    return str(Path(path).joinpath(*other))
+    return str(Path(path).joinpath(*other)).lower()
 
 
 class Config:
@@ -39,11 +39,11 @@ class Config:
         self._cfg = {}
 
         self.tools_dir = Path(os.curdir).absolute()
-        self.tasks_dir = str(self.tools_dir.parent)
+        self.tasks_dir = str(self.tools_dir.parent).lower()
         if self.tools_dir.parent.name.lower() != 'tasks':
             # development
             self.tools_dir = self.tools_dir.joinpath('gctools')
-            self.portal_dir = 'C:\\GlobalCube'
+            self.portal_dir = 'c:\\globalcube'
             if not Path(self.portal_dir).exists():
                 self.portal_dir = joinpath(self.tools_dir, 'Portal')
         else:
@@ -57,7 +57,9 @@ class Config:
         self.xml_dir = joinpath(self.tasks_dir, 'config')
         self.log_dir = joinpath(self.tasks_dir, 'logs')
 
-        with open(joinpath(self.tasks_dir, ini), 'r') as stream:
+        if ':' not in ini:
+            ini = joinpath(self.tasks_dir, ini)
+        with open(ini, 'r') as stream:
             for line in stream.readlines():
                 if '=' in line:
                     key, value = line.split('=')
@@ -96,7 +98,7 @@ class Config:
 
     def cognos7_config(self):
         self.cognos7 = Cognos7Config(
-            program_dir=self._cfg.get('COGNOS', 'C:\\Program Files (x86)\\Cognos\\cer5\\bin'),
+            program_dir=self._cfg.get('COGNOS', 'c:\\program files (x86)\\cognos\\cer5\\bin'),
             iqd_dir=joinpath(self.system_dir, 'IQD'),
             models_dir=joinpath(self.system_dir, 'Models'),
             cube_dir=joinpath(self.system_dir, 'Cube_out'),

+ 31 - 0
gctools/db_info.py

@@ -0,0 +1,31 @@
+import pyodbc
+
+
+class DatabaseInfo:
+    conn: pyodbc.Connection
+
+    def __init__(self):
+        self._conn = pyodbc.connect("DSN=GC;UID=sa;PWD=Mffu3011#")
+
+    def databases(self):
+        res = self._conn.execute("SELECT name FROM master.sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')")
+        return res.fetchall()
+
+    def table_size(self, database):
+        self._conn.execute(f"USE {database}")
+        res = self._conn.execute("""
+            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
+            INNER JOIN sys.partitions AS p ON i.object_id = p.object_id AND i.index_id = p.index_id
+            INNER JOIN sys.allocation_units AS a ON p.partition_id = a.container_id
+            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
+            ORDER BY 1, 2, 3""")
+        return res.fetchall()

二进制
gctools/dist/VBS/list-datasources-C11.MCX


+ 0 - 62
gctools/dist/VBS/list-datasources-C11.mac

@@ -1,62 +0,0 @@
-Dim objApp As Object
-Dim objModel As Object
-Dim objDataSource As Object
-Dim objQuery As Object
-Dim objCube As Object
-
-Dim filename as String
-Dim folder as String
-Dim logfile As String
-
-
-Sub Main ()
-    On Error Resume Next
-
-    folder = "C:\GlobalCube\System\AUDEV_CARIT\Models"
-    filename = "s_offene_auftraege.pyj"
-    rem filename = "f_belege.pyj"
-    rem publish = "C:\GAPS\Portal\System\Cube_out\temp"
-
-    folder = GetField(Command, 1, ",")
-    filename = GetField(Command, 2, ",")
-    logfile = GetField(Command, 3, ",")
-
-    Set objApp = CreateObject("IBMCognosTransformer.ApplicationCtrl.1")
-    Set objModel = objApp.OpenModel(folder + "\" + filename)
-   
-    Open logfile for Output as #1
-    rem Print objModel.DataSources.Count
-    For i = 1 to objModel.DataSources.Count
-        Set objDataSource = objModel.DataSources.Item(i)
-
-        If objDataSource.Type = 38 Then
-            rem Package
-            For j = 1 to objDataSource.Queries.Count
-                Set objQuery = objDataSource.Queries.Item(j)
-                Write #1, objQuery.Name 
-            Next
-            Exit For
-        End If
-        If objDataSource.Type = 6 Then
-           Write #1, objDataSource.LocalPath
-        Else
-           Write #1, objDataSource.Name
-        End If     
-
-        rem If objDataSource.Type = 4 Then
-           rem Print objDataSource.SQLExpression
-        rem End If
-        rem Print "--"
-    Next
-    Write #1, "--"
-    Set objCube = objModel.Cubes.Item(1)
-    Write #1, objCube.MDCFile
-    Close #1
-   
-    objModel.Close
-    rem objApp.Quit
-    Set objQuery = Nothing
-    Set objDataSource = Nothing
-    Set objModel = Nothing
-    Set objApp = Nothing
-End Sub

+ 0 - 6
gctools/dist/fehlermeldung.bat

@@ -1,6 +0,0 @@
-@call "%~dp0config.bat" 0 > nul
-
-echo * Untersuche Cubes und Workflow auf Fehler
-%PHP%\php Tools\run.php fehlerbericht %TASKS%\logs %KUNDE% %XML%\info\info.json %ZEIT% %1
-echo.
-status_client.exe

二进制
gctools/dist/status_client.exe


+ 1 - 1
gctools/path_info.py

@@ -64,7 +64,7 @@ class PathInfo:
     def write_logfile(self, logfile):
         with open(logfile, 'w') as fwh:
             infos = [';'.join(line) for line in self.file_list]
-            fwh.write('name;size;ctime;mtime;read;write;blocked;process')
+            fwh.write('name;size;ctime;mtime;read;write;blocked;process\n')
             fwh.write('\n'.join(infos))
 
     def zip_to_file(self, zip_file):

+ 3 - 0
gctools/status_client.bat

@@ -0,0 +1,3 @@
+cd /d %~dp0
+pyinstaller -F --path %~dp0 status_client.py
+pause

+ 21 - 2
gctools/status_client.py

@@ -1,3 +1,4 @@
+import csv
 import os
 import subprocess
 from pathlib import Path
@@ -6,6 +7,7 @@ from datetime import datetime
 from path_info import PathInfo
 import config
 from ftp_client import FtpClient
+from db_info import DatabaseInfo
 
 
 def run_command(cmd, logfile):
@@ -27,7 +29,8 @@ def shared_files(logfile):
 
 
 def model_datasources(cfg, model_file: Path, logfile):
-    cmd = f'"{cfg.cognos7.program_dir}\\runmac32.exe" "{cfg.tools_dir}\\VBS\\list-datasources-c11.mac" "{model_file.parent}","{model_file.name}","{logfile}"'
+    cmd = f'"{cfg.cognos7.program_dir}\\runmac32.exe" "{cfg.tools_dir}\\VBS\\list-datasources-c11.mac" ' \
+          + f'"{model_file.parent}","{model_file.name}","{logfile}"'
     p = subprocess.Popen(cmd)
     p.wait()
 
@@ -38,6 +41,20 @@ def datasources_all_models(cfg: config.Config):
         model_datasources(cfg, model_file, cfg.tasks_dir + '\\config\\models\\' + model_file.name + '.log')
 
 
+def database_info(cfg: config.Config):
+    dbinfo = DatabaseInfo()
+    result = []
+    for db in dbinfo.databases():
+        result.extend(dbinfo.table_size(db[0]))
+    csv_file = cfg.tasks_dir + '\\logs\\db_info.csv'
+    with open(csv_file, 'w', encoding='latin-1', newline='') as fwh:
+        wr = csv.writer(fwh, delimiter=';')
+        wr.writerow(['DatabaseName', 'SchemaName', 'TableName', 'RowCounts', 'TotalSpaceKB', 'UsedSpaceKB', 'UnusedSpaceKB', 'LastChanged'])
+        for row in result:
+            wr.writerow(row)
+    return result
+
+
 def zip_to_file(base_dir, zip_file):
     filter = ['config/*', 'config/info/*', 'config/models/*', 'logs/*', '*.ini', '*.bat']
 
@@ -56,7 +73,9 @@ if __name__ == '__main__':
     # Laufende Prozesse
     task_manager(cfg.tasks_dir + '\\logs\\tasklist.csv')
     # aktuelle Freigabe-Sessions
-    shared_files(cfg.tasks_dir + '\\logs\\tasklist.csv')
+    shared_files(cfg.tasks_dir + '\\logs\\openfiles.csv')
+    # Tabellengrößen
+    database_info(cfg)
 
     datasources_all_models(cfg)
     # Liste aller Dateien im GAPS-Verzeichnis

+ 1 - 1
gctools/status_client.spec

@@ -5,7 +5,7 @@ block_cipher = None
 
 
 a = Analysis(['status_client.py'],
-             pathex=['C:\\Projekte\\Python\\gctools'],
+             pathex=['C:\\Projekte\\Python\\gctools\\'],
              binaries=[],
              datas=[],
              hiddenimports=[],