Exemple d'application pour l'exportation des données d'audit
Cet exemple d'application est un objet SchedulerThing ThingWorx qui utilise l'extension SFTP (SSH File Transfer Protocol), disponible dans la section Tools de ThingWorx Marketplace, pour transmettre les données d'audit exportées vers un serveur SFTP distant. Vous pouvez configurer une heure et une fréquence d'exécution de l'objet SchedulerThing adaptées à votre environnement. L'objet SchedulerThing dispose d'une propriété lastExportDate, qui est mise à jour à chaque exportation exécutée avec succès.
Le sous-système d'audit ThingWorx gère l'exportation des entrées d'audit, comme illustré dans la figure suivante et décrit ci-après :
Les données d'audit générées par la plateforme sont conservées dans la base de données ThingWorx. Ces données peuvent être interrogées et filtrées selon une catégorie d'audit et une plage de données. La durée de conservation définie pour le paramètre DaysOnline du sous-système d'audit limite la quantité de données du stockage en ligne.
Les données d'audit en ligne sont archivées périodiquement selon la fréquence spécifiée pour l'objet AuditArchiveScheduler. Les données d'audit sont purgées périodiquement selon la fréquence spécifiée pour l'objet PurgeAuditScheduler. Par défaut, ces opérations sont effectuées toutes les 24 heures.
Lorsque vous exportez des données d'audit à l'aide de cette application, le service ExportAuditData contient un appel pour archiver les données d'audit en ligne actuelles. Cet appel garantit la continuité des données d'audit exportées pour les entrées d'audit générées mais pas encore archivées.
Installation et configuration de l'extension
Pour installer et configurer l'extension SFTP, procédez comme suit :
1. Téléchargez l'extension SFTP (SSH File Transfer Protocol) et le guide de l'utilisateur correspondant depuis ThingWorx Marketplace.
2. Suivez les instructions du manuel anglais ThingWorx SFTP Extension User Guide (Guide de l'utilisateur de l'extension ThingWorx SFTP) pour installer l'extension.
3. Dans ThingWorx Composer, créez un nouvel objet SFTP, puis sélectionnez l'élément SFTPRepositoryTemplate qui a été importé avec l'extension. Sur la page Configuration de l'objet SFTP, configurez l'emplacement et les informations d'identification souhaités du serveur distant. Consultez le guide de l'utilisateur de l'extension pour obtenir des informations.
4. Dans Composer, créez un nouvel objet qui utilise le modèle d'objet planificateur. Passez à la section suivante pour le configurer.
Configuration de SFTP Audit Exporter Scheduler
Configurez le nouveau planificateur comme suit :
1. Sur la page Informations générales, configurez les propriétés suivantes :
Nom : SFTPAuditExporter
Modèle d'objet : Scheduler
2. Sur la page Propriétés, ajoutez les propriétés suivantes :
Propriété
Type de base
Modèle d'objet
HasDefaultValue
Persistance
lastExportDate
DATETIME
N/A
Sélectionnée. La valeur par défaut est 1/1/1970 00:00:00.
Sélectionnée
targetRepository
THINGNAME
FileRepository
N/A
Sélectionnée
sftpThing
THINGNAME
SftpRepositoryTemplate
N/A
Sélectionnée
sftpDirectory
STRING
N/A
Sélectionnée. La valeur par défaut est *.*.
Sélectionnée
3. Sur la page Abonnements, ajoutez les informations d'abonnement et le code suivants :
Source : laissez ce champ vide.
Evénement : spécifiez ScheduledEvent.
Activé : cochez cette case.
Script : ajoutez le code du bloc ci-dessous.
Vous trouverez ci-après le script à copier dans le champ Script :

// 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");
Configuration
Avant d'utiliser l'extension SFTPAuditExporter, vous devez définir les propriétés de configuration suivantes :
targetRepository : spécifie l'objet FileRepository ThingWorx à utiliser en tant qu'emplacement temporaire pour les entrées d'audit exportées. Lors de l'exportation des entrées d'audit, l'application conserve temporairement les données en local avant de les transférer sur le serveur SFTP configuré. Une fois le transfert terminé, le fichier local est supprimé.
sftpThing : spécifie l'objet SFTP que vous avez créé à l'étape 3 de la section d'installation ci-dessus.
sftpDirectory : spécifie le répertoire parent sur le serveur SFTP distant qui servira à stocker les fichiers d'entrée d'audit. En supposant que le serveur distant dispose d'un répertoire par défaut pour chaque utilisateur, la valeur par défaut *.* indique que le répertoire par défaut doit être utilisé. Cette valeur peut être modifiée, si vous le souhaitez.
En outre, sur la page Configuration de ce planificateur, vous pouvez sélectionner l'heure de planification pour déterminer à quel moment effectuer l'exportation. Par défaut, cette opération est exécutée chaque jour à minuit.
Remarques relatives à l'exécution
Lorsque les entrées d'audit sont enregistrées sur le serveur SFTP distant, les fichiers enregistrés sont nommés AuditArchive-<année>-<mois>-<jour>-<heure><minute>.zip, l'heure correspondant à l'heure de création du fichier d'archive. Chaque fichier ZIP inclut un fichier JSON unique contenant les données d'audit localisées. Les fichiers d'archive sont organisés en sous-répertoires, par mois (en suivant le format <année>-<mois>). Par exemple, 2019-08.
Pour modifier les paramètres régionaux utilisés pour les entrées d'audit, modifiez le script du planificateur, puis définissez le champ locale dans la définition exportParams.
* 
Par défaut, le délai d'expiration d'un script sur la plateforme ThingWorx est de 30 secondes. Dès lors qu'un script s'exécute plus longtemps que cela, la plateforme met fin à l'exécution. Un administrateur ThingWorx peut configurer le délai d'expiration des scripts dans la section des paramètres de base du fichier de configuration platform-settings.json. Consultez également la section Détails de la configuration du fichier platform-settings.json.