

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Funzioni di libreria disponibili per Node.js canary
<a name="Library_function_Nodejs"></a>

Questa sezione descrive le funzioni di libreria disponibili per gli script Canary che utilizzano il runtime Node.js.

**Topics**
+ [

## addExecutionError(ErrorMessage, es.);
](#Library_function_Nodejs_addExecutionError_Nodecanary)
+ [

## getCanaryName();
](#Library_function_Nodejs_getCanaryName)
+ [

## getCanaryArn();
](#Library_function_Nodejs_Nodecanary)
+ [

## getCanaryUserAgentString();
](#Library_function_Nodejs_getCanaryUserAgentString_Nodecanary)
+ [

## getRuntimeVersion();
](#Library_function_Nodejs_getRuntimeVersion_Nodecanary)
+ [

## getLogLevel();
](#Library_function_Nodejs_getLogLevel_Nodecanary)
+ [

## setLogLevel();
](#Library_function_Nodejs_setLogLevel_Nodecanary)
+ [

## ExecuteStep (StepName, [ functionToExecuteStepConfig])
](#Library_function_Nodejs_executestep_Nodecanary)
+ [

## executeHttpStep(StepName, RequestOptions, [callback], [StepConfig])
](#Library_function_Nodejs_executeHttpStep)

## addExecutionError(ErrorMessage, es.);
<a name="Library_function_Nodejs_addExecutionError_Nodecanary"></a>

`errorMessage` descrive l'errore e `ex` è l'eccezione che si verifica

Puoi utilizzare `addExecutionError` per impostare gli errori di esecuzione per il tuo canary. Fa fallire il canary senza interrompere l'esecuzione dello script. Inoltre, non influisce sui tuoi parametri `successPercent`.

È necessario tenere traccia degli errori come errori di esecuzione solo se non sono importanti per indicare il successo o il fallimento dello script canary.

Di seguito è illustrato un esempio dell'uso dell'elemento `addExecutionError`. Stai monitorando la disponibilità del tuo endpoint e acquisendo screenshot dopo che la pagina è stata caricata. Poiché l'errore di acquisizione di uno screenshot non determina la disponibilità dell'endpoint, puoi rilevare eventuali errori riscontrati durante l'acquisizione di screenshot e aggiungerli come errori di esecuzione. I parametri di disponibilità indicheranno comunque che l'endpoint è attivo e funzionante, ma lo stato del canary verrà contrassegnato come non riuscito. Il seguente blocco di codice di esempio rileva tale errore e lo aggiunge come errore di esecuzione.

```
try {await synthetics.executeStep(stepName, callbackFunc);} catch(ex) {synthetics.addExecutionError('Unable to take screenshot ', ex);}
```

## getCanaryName();
<a name="Library_function_Nodejs_getCanaryName"></a>

Restituisce il nome del canary.

## getCanaryArn();
<a name="Library_function_Nodejs_Nodecanary"></a>

Restituisce l'ARN del canary.

## getCanaryUserAgentString();
<a name="Library_function_Nodejs_getCanaryUserAgentString_Nodecanary"></a>

Restituisce l'agente utente personalizzato del canary.

## getRuntimeVersion();
<a name="Library_function_Nodejs_getRuntimeVersion_Nodecanary"></a>

Questa funzione è disponibile nella versione runtime `syn-nodejs-3.0` e successive. Restituisce la versione di runtime di Synthetics del canary. Ad esempio, il valore restituito potrebbe essere `syn-nodejs-3.0`.

## getLogLevel();
<a name="Library_function_Nodejs_getLogLevel_Nodecanary"></a>

Recupera il livello di log corrente per la libreria Synthetics. I valori possibili sono i seguenti:
+ `0`: Debug
+ `1`: Info
+ `2`: Warn
+ `3`: Error

Esempio:

```
let logLevel = synthetics.getLogLevel();
```

## setLogLevel();
<a name="Library_function_Nodejs_setLogLevel_Nodecanary"></a>

Imposta il livello di log per la libreria Synthetics. I valori possibili sono i seguenti:
+ `0`: Debug
+ `1`: Info
+ `2`: Warn
+ `3`: Error

Esempio:

```
synthetics.setLogLevel(0);
```

## ExecuteStep (StepName, [ functionToExecuteStepConfig])
<a name="Library_function_Nodejs_executestep_Nodecanary"></a>

Esegue il passaggio fornito, avvolgendolo con le metriche di durata. start/pass/fail logging and pass/fail

La funzione `executeStep` svolge anche le operazioni seguenti:
+ Registra l'inizio del passaggio
+ Avvia un timer
+ Esegue la funzione fornita
+ Quando la funzione ritorna normalmente, conta come passaggio. Se la funzione viene generata, viene considerata fallita
+ Termina il timer
+ Registra se il passaggio è riuscito o non è riuscito
+ Emette la `stepName SuccessPercent` metrica, 100 per il passaggio o 0 per l'errore
+ Emette il`stepName Duration metric`, con un valore basato sull'ora di inizio e di fine del passo
+ Restituisce ciò che ha functionToExecute restituito o rigetta ciò che ha lanciato ` functionToExecute`
+ Aggiunge un riepilogo dell'esecuzione delle fasi al rapporto di Canary

 **Esempio** 

```
await synthetics.executeStep(stepName, async function () {
    return new Promise((resolve, reject) => {
        const req = https.request(url, (res) => {
            console.log(`Status: ${res.statusCode}`);
            if (res.statusCode >= 400) {
                reject(new Error(`Request failed with status ${res.statusCode} for ${url}`));
            } else {
                resolve();
            }
        });

        req.on('error', (err) => {
            reject(new Error(`Request failed for ${url}: ${err.message}`));
        });

        req.end();
    });
});
```

## executeHttpStep(StepName, RequestOptions, [callback], [StepConfig])
<a name="Library_function_Nodejs_executeHttpStep"></a>

Esegue la richiesta HTTP fornita come fase e pubblica `SuccessPercent` (pass/fail) e parametri `Duration`.

**executeHttpStep**utilizza automaticamente funzioni native HTTP o HTTPS, a seconda del protocollo specificato nella richiesta.

Questa funzione aggiunge anche un riepilogo dell'esecuzione delle fasi al report del canary. Il riepilogo include dettagli su ogni richiesta HTTP, ad esempio:
+ Ora di inizio
+ Ora di fine
+ Stato (PASSED/FAILED)
+ Motivo dell'errore, se non è riuscita
+ dettagli della chiamata HTTP come request/response header, body, codice di stato, messaggio di stato e tempi delle prestazioni. 

**Topics**
+ [

### Parameters
](#Library_function_Nodejs_executeHttpStep_parameters_Nodecanary)
+ [

### Esempi di utilizzo executeHttpStep
](#Library_function_Nodejs_executeHttpStep_examples_Nodecanary)

### Parameters
<a name="Library_function_Nodejs_executeHttpStep_parameters_Nodecanary"></a>

 **StepName () *String*** 

Specifica il nome della fase. Questo nome viene utilizzato anche per pubblicare le CloudWatch metriche relative a questo passaggio.

 **requestOptions () *Object or String*** 

Il valore di questo parametro può essere un URL, una stringa URL o un oggetto. Se si tratta di un oggetto, deve essere un insieme di opzioni configurabili per effettuare una richiesta HTTP. Supporta tutte le opzioni in [ http.request(options[, callback])](https://nodejs.org/api/http.html#http_http_request_options_callback) nella documentazione di Node.js.

Oltre a queste opzioni Node.js, **requestOptions** supporta il parametro aggiuntivo `body`. Puoi utilizzare il parametro `body` per trasferire i dati come corpo della richiesta.

 **richiamata () *response*** 

(Facoltativo) Questa è una funzione utente che viene richiamata con la risposta HTTP. La risposta è del tipo [Class: http. IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage).

 **StepConfig () *object*** 

(Facoltativo) Utilizza questo parametro per sostituire le configurazioni Synthetics globali con una configurazione diversa per questa fase.

### Esempi di utilizzo executeHttpStep
<a name="Library_function_Nodejs_executeHttpStep_examples_Nodecanary"></a>

La seguente serie di esempi si basa l'uno sull'altro per illustrare i vari usi di questa opzione.

Questo primo esempio configura i parametri della richiesta. Puoi passare un URL come **RequestOptions:**

```
let requestOptions = 'https://www.amazon.com';
```

Oppure puoi trasferire una serie di opzioni:

```
let requestOptions = {
        'hostname': 'myproductsEndpoint.com',
        'method': 'GET',
        'path': '/test/product/validProductName',
        'port': 443,
        'protocol': 'https:'
    };
```

L'esempio seguente crea una funzione di callback che accetta una risposta. Per impostazione predefinita, se non si specifica il **callback**, CloudWatch Synthetics verifica che lo stato sia compreso tra 200 e 299 inclusi.

```
// Handle validation for positive scenario
    const callback = async function(res) {
        return new Promise((resolve, reject) => {
            if (res.statusCode < 200 || res.statusCode > 299) {
                throw res.statusCode + ' ' + res.statusMessage;
            }
     
            let responseBody = '';
            res.on('data', (d) => {
                responseBody += d;
            });
     
            res.on('end', () => {
                // Add validation on 'responseBody' here if required. For ex, your status code is 200 but data might be empty
                resolve();
            });
        });
    };
```

L'esempio successivo crea una configurazione per questo passaggio che sovrascrive la configurazione globale di Synthetics CloudWatch . La configurazione della fase in questo esempio consente le intestazioni della richiesta, le intestazioni della risposta, il corpo della richiesta (dopo i dati) e il corpo della risposta nel report e di limitare i valori di intestazione “X-Amz-Security-Token” e “Authorization”. Per impostazione predefinita, questi valori non vengono inclusi nel report per motivi di sicurezza. Se scegli di includerli, i dati vengono archiviati solo nel bucket S3.

```
// By default headers, post data, and response body are not included in the report for security reasons. 
// Change the configuration at global level or add as step configuration for individual steps
let stepConfig = {
    includeRequestHeaders: true, 
    includeResponseHeaders: true,
    restrictedHeaders: ['X-Amz-Security-Token', 'Authorization'], // Restricted header values do not appear in report generated.
    includeRequestBody: true,
    includeResponseBody: true
};
```

Questo ultimo esempio passa la richiesta a **executeHttpStep**e assegna un nome alla fase.

```
await synthetics.executeHttpStep('Verify GET products API', requestOptions, callback, stepConfig);
```

**Con questo set di esempi, CloudWatch Synthetics aggiunge i dettagli di ogni passaggio del rapporto e produce metriche per ogni passaggio utilizzando StepName.**

 Vedrai i parametri `successPercent` e `duration` per la fase `Verify GET products API`. Puoi monitorare le prestazioni delle API monitorando i parametri per le fasi delle chiamate API. 

Per uno script completo di esempio che utilizza queste funzioni, consulta [Canary dell'API in più fasi](CloudWatch_Synthetics_Canaries_Samples.md#CloudWatch_Synthetics_Canaries_Samples_APIsteps).