Beispielanwendung für das Exportieren von Prüfdaten
Diese Beispielanwendung ist ein ThingWorx SchedulerThing, das die SSH File Transfer Protocol (SFTP)-Erweiterung aus dem Bereich "Tools" des ThingWorx Marketplace verwendet, um die exportierten Prüfdatensätze an einen Remote-SFTP-Server zu übertragen.Sie können das SchedulerThing so konfigurieren, dass es zur der Zeit und mit der Häufigkeit ausgeführt wird, die am besten für Ihre Umgebung geeignet ist. Das SchedulerThing hat eine Eigenschaft namens lastExportDate, die bei jedem erfolgreichen Export aktualisiert wird.
Das ThingWorx Prüfungsuntersystem verwaltet den Export von Prüfungseinträgen wie in der folgenden Abbildung dargestellt und unten beschrieben:
Prüfdaten, die von der Plattform generiert werden, werden in der ThingWorx Datenbank persistent gemacht. Diese Daten können nach Prüfkategorie und Datumsbereich abgefragt und gefiltert werden. Die Menge der Daten im Online-Speicher ist auf die für den DaysOnline-Parameter des Prüfungsuntersystems konfigurierte Aufbewahrungszeit beschränkt.
Online-Prüfdaten werden in regelmäßigen Abständen archiviert, basierend auf der für das AuditArchiveScheduler-Ding angegebenen Frequenz. Prüfdaten werden in regelmäßigen Abständen bereinigt, basierend auf der für das PurgeAuditScheduler-Ding angegebenen Frequenz. Standardmäßig werden beide Operationen alle 24 Stunden ausgeführt.
Beim Exportieren von Prüfdatensätzen mithilfe dieser Beispielanwendung schließt der ExportAuditData-Dienst einen Aufruf ein, um die aktuellen Online-Prüfdaten zu archivieren. Dieser Aufruf stellt sicher, dass die exportierten Prüfdaten keine Lücken für Prüfeinträge aufweisen, die generiert, aber noch nicht archiviert wurden.
Installation und Konfiguration der Erweiterung
Um die SFTP-Erweiterung zu installieren und zu konfigurieren, befolgen Sie diese Schritte:
1. Laden Sie die "SSH File Transfer Protocol"-Erweiterung und das Benutzerhandbuch für die Erweiterung im ThingWorx Marketplace herunter.
2. Befolgen Sie die Anweisungen im englischen Handbuch ThingWorx SFTP Extension User Guide (Benutzerhandbuch zu ThingWorx SFTP-Erweiterung), um die Erweiterung zu installieren.
3. Erstellen Sie in ThingWorx Composer ein neues SFTP-Ding, und wählen Sie das SFTPRepositoryTemplate aus, das mit der Erweiterung importiert wurde. Konfigurieren Sie auf der Seite Konfiguration für das SFTP-Ding den Speicherort und die Anmeldeinformationen für den gewünschten Server. Im Benutzerhandbuch für die Erweiterung finden Sie Details.
4. Erstellen Sie in Composer ein neues Ding, das die Scheduler-Dingvorlage verwendet. Fahren Sie mit dem nächsten Abschnitt fort, um diesen Scheduler einzurichten.
Setup des SFTP Audit Exporter Scheduler
Konfigurieren Sie den neuen Scheduler wie folgt:
1. Konfigurieren Sie auf der Seite Allgemeine Informationen die folgenden Eigenschaften:
Name – SFTPAuditExporter
Dingvorlage – Scheduler
2. Fügen Sie auf der Seite Eigenschaften die folgenden Eigenschaften hinzu:
Eigenschaft
BaseType
Dingvorlage
HasDefaultValue
Persistent
lastExportDate
DATETIME
N/A
Ausgewählt, Standardwert ist 1/1/1970 00:00:00
Ausgewählt
targetRepository
THINGNAME
FileRepository
N/A
Ausgewählt
sftpThing
THINGNAME
SftpRepositoryTemplate
N/A
Ausgewählt
sftpDirectory
STRING
N/A
Ausgewählt, Standardwert ist *.*
Ausgewählt
3. Fügen Sie auf der Seite Abonnements die folgenden Informationen und den folgenden Code für das Abonnement hinzu:
Quelle – Lassen Sie dieses Feld leer.
Ereignis – Geben Sie ScheduledEvent an.
Aktiviert – Aktivieren Sie dieses Kontrollkästchen.
Skript – Fügen Sie den Code aus dem unten gezeigten Codeblock hinzu.
Hier ist das Skript, das in das Feld Skript kopiert werden muss:

// Sample script for a scheduleThing that will periodically call the ExportAuditData service on the
// AuditSubsystem to capture audit records prior to those records aging off the system.
// These then are transferred to an external SFTP server using the SFTP Thingworx Extension.

logger.info("Audit export starting");

// Property validation checks
if (me.sftpThing == undefined) {
throw "sftpThing property not set. Cannot continue.";
}
if (me.targetRepository == undefined) {
throw "targetRepository property not set. Cannot continue.";
}
if (me.sftpDirectory == undefined || me.sftpDirectory == null || me.sftpDirectory == "") {
// set a default value if not setup previously.
me.sftpDirectory = ".";
}

var exportEndTime = new Date();
var uploadDirFormatted = dateFormat(exportEndTime, "yyyy-MM"); // store in directories by month

var exportParams = {
startDate: me.lastExportDate, // Start after the last successsful export
endDate: exportEndTime, // Use the end time recorded above
targetRepositoryName: me.targetRepository, // destination repository from the scheduler's properties

// Set the targetPath to custom folder for exporting. The files will be deleted from this folder on
// completion of the export.
targetPath: "scheduledExport",

// Add the current date to the targetFileName
// The targetFileName must be unique. The ExportAuditData service will not overwrite an existing file.
targetFileName: "AuditArchive-" + dateFormat(exportEndTime, "yyyy-MM-dd-HHmm"),

// The locale for the exported audit messages. If undefined, the system default is used
locale: undefined
};

try {

Subsystems["AuditSubsystem"].ExportAuditData(exportParams);

// The export to the target repository now needs to be transferred to an external location.
// This example uses the SFTP Extension to transfer to a remote SFTP server.
// The location and credentials for the SFTP server are configured on the SFTP Thing.

// Check to make sure the destination directory exists as the SFTP server will not auto create it.
var checkDirParams = {
path: me.sftpDirectory
};
var findDirObj = {
name: uploadDirFormatted
};
if (Things[me.sftpThing].ListDirectories(checkDirParams).Find(findDirObj) == undefined) {
var createDirParams = {
path: me.sftpDirectory + "/" + uploadDirFormatted
};
Things[me.sftpThing].CreateFolder(createDirParams);
}

var uploadParams = {
FileRepository: me.targetRepository,
RepoFilePath: exportParams.targetPath + "/" + exportParams.targetFileName + ".zip",
RemoteFilePath: me.sftpDirectory + "/" + uploadDirFormatted + "/" + exportParams.targetFileName + ".zip"
};
Things[me.sftpThing].UploadFile(uploadParams);

// Upon successfully storing the export file, update the start time
// breadcrumb to the time the export was started.
me.lastExportDate = exportEndTime;

} catch (err) {
logger.error("Failed to export the auditing records: " + err);
} finally {
// Delete the temporary export file from the local repository
var deleteFileParams = {
path: exportParams.targetPath + "/" + exportParams.targetFileName + ".zip"
};
Things[me.targetRepository].DeleteFile(deleteFileParams);
}
logger.info("Audit export completed");
Konfiguration
Der SFTPAuditExporter hat die folgenden Konfigurationseigenschaften, die vor der Verwendung festgelegt werden müssen:
targetRepository – Gibt das ThingWorx Ding FileRepository als einen temporären Speicherort für die exportierten Prüfeinträge an. Wenn Prüfungseinträge exportiert werden, stellt diese Anwendung sie lokal vor dem Senden an den konfigurierten SFTP-Server bereit. Sobald die Übertragung abgeschlossen ist, wird die lokale Datei entfernt.
sftpThing – Gibt das SFTP-Ding an, das Sie in Schritt 3 des Installationsabschnitts oben erstellt haben.
sftpDirectory – Gibt das Elternverzeichnis auf dem Remote-SFTP-Server an, in dem die Prüfeintragsdateien gespeichert werden sollen. Vorausgesetzt, dass der Remote-Server ein Standardverzeichnis für jeden Benutzer hat, gibt der Standardwert, *.*, an, dass das Standardverzeichnis verwendet werden sollte. Dieser Wert kann geändert werden, wenn gewünscht.
Zudem kann auf der Seite Konfiguration für diesen Scheduler die Zeitplanzeit gewählt werden, um anzupassen, wann der Export ausgeführt wird. Standardmäßig wird der Zeitplan täglich um Mitternacht ausgeführt.
Operative Hinweise
Wenn die Prüfeinträge auf dem Remote-SFTP-Server gespeichert sind, werden die gespeicherten Dateien wie folgt benannt: AuditArchive-<Jahr>-<Monat>-<Tag>-<Stunde><Minute>.zip, wobei die Zeit angibt, wann die Archivdatei erstellt wurde. Jede Zip-Datei enthält eine einzelne JSON-formatierte Datei mit den lokalisierten Prüfdatensätzen. Die Archivdateien sind in Unterverzeichnissen nach Monat organisiert, wobei die Benennungskonvention <Jahr>-<Monat> verwendet wird. Beispiel: 2019-08.
Um das Gebietsschema für die Prüfeinträge zu ändern, bearbeiten Sie das Scheduler-Skript, und legen Sie das Feld locale in der Definition für exportParams fest.
* 
Standardmäßig ist die Einstellung für das Skript-Timeout für die ThingWorx Plattform 30 Sekunden. Wenn das Skript länger ausgeführt wird, beendet die Plattform die Ausführung. Ein ThingWorx Administrator kann das Skript-Timeout im Abschnitt "Basic Settings" der Konfigurationsdatei platform-settings.json konfigurieren. Siehe auch platform-settings.json – Konfigurationsdetails.