Esempio di applicazione per l'esportazione dei dati di verifica
Questa applicazione di esempio è un ThingWorx SchedulerThing che utilizza l'estensione SFTP (SSH File Transfer Protocol) dalla sezione Strumenti del ThingWorx Marketplace per eseguire il push dei record di verifica esportati a un server SFTP remoto.È possibile configurare SchedulerThing da eseguire al momento e alla frequenza più adatti al proprio ambiente. SchedulerThing mantiene una proprietà denominata lastExportDate, che viene aggiornata ogni volta che un'esportazione viene eseguita con esito positivo.
Il sottosistema Verifica ThingWorx gestisce l'esportazione delle voci di verifica, come mostrato nella seguente illustrazione e descritto di seguito.
I dati di verifica generati dalla piattaforma vengono resi persistenti nel database ThingWorx. Questi dati possono essere interrogati e filtrati per categoria di verifica e intervallo di date. La quantità di dati nello spazio di archiviazione online è limitata al tempo di conservazione configurato per il parametro DaysOnline del sottosistema Verifica.
I dati di verifica online vengono archiviati periodicamente, in base alla frequenza specificata per l'oggetto AuditArchiveScheduler. I dati di verifica vengono eliminati periodicamente, in base alla frequenza specificata per l'oggetto PurgeAuditScheduler. La frequenza di default per entrambe le operazioni è ogni 24 ore.
Quando si esportano i record di verifica con questa applicazione di esempio, il servizio ExportAuditData include una chiamata per archiviare i dati di verifica online correnti. Questa chiamata garantisce che i dati di verifica esportati non presentino lacune per le voci di verifica generate ma non ancora archiviate.
Installazione e configurazione dell'estensione
Per installare e configurare l'estensione SFTP, attenersi alla procedura descritta di seguito.
1. Scaricare l'estensione "SSH File Transfer Protocol" e la guida per l'utente per l'estensione dal ThingWorx Marketplace.
2. Seguire le istruzioni nella ThingWorx SFTP Extension User Guide per installare l'estensione.
3. Da ThingWorx Composer creare un nuovo oggetto SFTP e selezionare il modello SFTPRepositoryTemplate importato con l'estensione. Nella pagina Configurazione per l'oggetto SFTP configurare la posizione e le credenziali desiderate del server remoto. Per eventuali dettagli, consultare la guida per l'utente per l'estensione.
4. In Composer creare un nuovo oggetto che utilizza il modello di oggetto scheduler. Continuare con la sezione successiva per configurare questo Scheduler.
Impostazione dello Scheduler dello strumento di esportazione di verifica SFTP
Configurare il nuovo Scheduler come indicato di seguito.
1. Nella pagina Informazioni generali, configurare le seguenti proprietà:
Nome - SFTPAuditExporter
Modello di oggetto - Scheduler
2. Nella pagina Proprietà, aggiungere le proprietà riportate di seguito.
Proprietà
Tipo di base
Modello di oggetto
HasDefaultValue
Persistente
lastExportDate
DATETIME
N/D
Selezione, il valore di default è 1/1/1970 00:00:00
Selezione
targetRepository
THINGNAME
FileRepository
N/D
Selezione
sftpThing
THINGNAME
SftpRepositoryTemplate
N/D
Selezione
sftpDirectory
STRING
N/D
Selezione, il valore di default è *.*
Selezione
3. Nella pagina Sottoscrizioni, aggiungere il codice e le informazioni di sottoscrizione diportati di seguito:
Origine - Lasciare questo campo vuoto.
Evento - Specificare ScheduledEvent.
Attivato - Selezionare questa casella di controllo.
Script - Aggiungere il codice del blocco di codice riportato di seguito.
Di seguito è riportato lo script da copiare nel campo 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");
Configurazione
Prima di utilizzare lo strumento di esportazione SFTPAuditExporter, è necessario impostare le relative proprietà di configurazione, riportate di seguito.
targetRepository - Specifica l'oggetto FileRepository ThingWorx da utilizzare come posizione temporanea per le voci di verifica esportate. Quando esporta le voci di verifica, questa applicazione le rappresenta in locale prima di inviarle al server SFTP configurato. Una volta completato il trasferimento, il file locale viene rimosso.
sftpThing - Specifica l'oggetto SFTP creato nel passo 3 della sezione Installazione riportata in precedenza.
sftpDirectory - Specifica la directory principale sul server SFTP remoto in cui archiviare i file delle voci di verifica. Supponendo che il server remoto disponga di una directory di default per ciascun utente, il valore di default, *.*, specifica che è necessario utilizzare la directory di default. Se necessario, questo valore può essere modificato.
Inoltre, nella pagina Configurazione per questo Scheduler, è possibile scegliere l'ora di programmazione per regolare quando eseguire l'esportazione. Per default, la programmazione viene eseguita ogni giorno a mezzanotte.
Note operative
Quando le voci di verifica vengono salvate sul server SFTP remoto, i file salvati saranno denominati AuditArchive-<anno>-<mese>-<giorno>-<ore><minuti>.zip, dove l'ora indica quando è stato creato il file di archivio. Ogni file zip contiene un singolo file in formato JSON con i record di verifica localizzati. I file di archivio sono organizzati in sottodirectory per mese, mediante la convenzione sull'attribuzione dei nomi <anno>-<mese>. Ad esempio, 2019-08.
Per modificare le impostazioni locali utilizzate per le voci di verifica, modificare lo script dello Scheduler e impostare il campo locale nella definizione exportParams.
* 
Per default, l'impostazione di timeout per gli script nella piattaforma ThingWorx è 30 secondi. Se l'esecuzione di uno script richiede più tempo, viene terminata dalla piattaforma. Un amministratore di ThingWorx può configurare il timeout per gli script nella sezione delle impostazioni di base del file di configurazione platform-settings.json. Vedere anche Dettagli di configurazione di platform-settings.json.