Große CMS-Dateien finden

Mit der folgenden Tcl-Prozedur, findLargeBlobs, können Sie CMS-Dateien finden, die viel Speicherplatz verbrauchen, beispielsweise, um deren archivierte Versionen zu löschen. Sie können die Prozedur folgendermaßen einbinden:

  1. Speichern Sie den unten angegebenen Tcl-Code in einer Datei (beispielsweise findLargeBlobs.tcl) im FionaDir/instance/InstanceDir/script/cm/clientCmds-Verzeichnis ab, wobei FionaDir Ihr Fiona-Installationsverzeichnis und InstanceDir Ihr Instanzenverzeichnis ist. Beim nächsten Start des CM wird diese Datei automatisch geladen, so dass die Prozedur verfügbar ist. Wenn Sie den CM nicht neu starten möchten, lesen Sie das Skript wie unten beschrieben mit dem source-Befehl manuell ein.

  2. Öffnen Sie in der zu untersuchenden CMS-Instanz den Tcl-Client, indem Sie im bin-Verzeichnis ./client aufrufen, und stellen Sie mit connect eine Verbindung zum CM her:

    ./client
    connect hostname port username password

    Beispiel: connect localhost 3001 root demo

  3. Wenn die Prozedur beim Start nicht automatisch geladen wurde, weil sie sich nicht im oben genannten Verzeichnis befindet, laden Sie sie bitte manuell:

    source FionaDir/instance/InstanceDir/script/cm/clientCmds/findLargeBlobs.tcl

    Ersetzen Sie die Platzhalter FionaDir und InstanceDir wieder durch den bei Ihnen verwendeten Namen des Fiona-Installationsverzeichnisses bzw. des Instanzenverzeichnisses.

  4. Sie können jetzt die Prozedur aufrufen. Geben Sie als erstes Argument den Pfad oder die ID des Ordners an, bei dem die Suche beginnen soll. Als zweites Argument geben Sie bitte die höchste Anzahl Bytes an, die unberücksichtigt bleiben soll. Beispiel:

    findLargeBlobs /myContentFolder 32768

    Dieser Aufruf findet CMS-Dateien, die größer als 32 KB sind und sich im CMS-Ordner /myContentFolder oder in der Hierarchie darunter befinden.

  5. Das Ergebnis finden Sie in der Datei FionaDir/instance/InstanceDir/tmp/largeBlobs.log, wobei die Platzhalter wieder durch Ihre tatsächlichen Verzeichnisnamen ersetzt werden müssen.

    In der Ausgabe finden Sie Größenangaben zu den Arbeitsversionen und den freigegebenen Versionen sowie die Gesamtanzahl der betreffenden Version. Die Ausgabe hat das folgende Format:

    /myContentFolder/SubFolder/FileName
      editedBlobLength: 45239
      releasedBlobLength: 44387
      versions: 2

Code der Prozedur findLargeBlobs

proc findLargeBlobs {pathOrId maxSize} {
  if {[catch {findObjectId $pathOrId} msg]} {
      error "$msg"
  } else {
    set objId $msg

    set fh [open [app get tmpDir]/largeBlobs.log w+]

    foreach o [objWherePath $objId] {                         
      set edited [obj withId $o get isEdited] 
      set released [obj withId $o get isReleased]
      set versions [llength [obj withId $o get contentIds]]
      if {$edited} {
        if {[obj withId $o editedContent get blobLength] > $maxSize} {
           set editedBlobLength [obj withId $o editedContent get blobLength]
        }
      }

      if {$released} {
        if {[obj withId $o releasedContent get blobLength] > $maxSize} {
           set releasedBlobLength [obj withId $o releasedContent get blobLength]
        }
      }

      if {[info exists editedBlobLength] || [info exists releasedBlobLength]} {
        puts $fh [obj withId $o get path]
        if {[info exists editedBlobLength]} {
          puts $fh "  editedBlobLength: $editedBlobLength"
        }
        if {[info exists releasedBlobLength]} {
          puts $fh "  releasedBlobLength: $releasedBlobLength"
        }
        puts $fh "  versions: $versions"
      }
      flush $fh
      catch {unset editedBlobLength}
      catch {unset releasedBlobLength}
    }

    close $fh
  }
}