Conseil
Cette leçon fait partie d’un cours qui vous apprend à créer une application New Relic à partir de zéro. Si vous ne l’avez pas déjà fait, consultez la présentation.
Chaque leçon du cours s'appuie sur la précédente, alors assurez-vous d'avoir terminé la dernière leçon, Accéder à NerdStorageVault depuis votre nerdlet, avant de commencer celle-ci.
Dans les leçons précédentes, vous avez découvert un service tiers que vous pouvez utiliser pour récupérer des données d'annulation fictives pour le graphique Total cancellations per version dans votre application New Relic. Même si les données de ce service sont fausses, la véritable valeur de cette leçon est d'apprendre comment vous pouvez utiliser des services tiers pour fournir des données à votre application New Relic.
Si vous faites une demande au service fictif avec des données d'annulation (https://api.nerdsletter.net/cancellations) vous verrez une réponse rejetant votre demande avec un message indiquant « Non autorisé » :
$curl https://api.nerdsletter.net/cancellationsUnauthorized
Cela est dû au fait que l'API Nerdsletter nécessite un en-tête Authorization
. Plus précisément, vous devez transmettre un jeton porteur de ABC123
pour obtenir un accès autorisé à ses données. Si vous faites une demande au service avec l'en-tête Authorization: Bearer ABC123
, vous obtiendrez une réponse réussie avec les données d'annulation simulées :
$curl https://api.nerdsletter.net/cancellations -H 'Authorization: Bearer ABC123'{"a": 15, "b": 78}
Dans la dernière leçon, vous avez utilisé NerdGraph
pour stocker ce jeton d'API dans le datastore NerdStorageVault
de votre application New Relic. Vous avez également transmis le jeton à votre composant TotalCancellations
et enregistré son utilisation dans la console de votre navigateur. Dans cette leçon, vous suivez cette instruction log avec une véritable demande à l'API Nerdsletter à l'aide de votre jeton d'autorisation. Ensuite, vous fournissez les données de cette ressource externe à votre graphique Total cancellations per version .
Accédez au répertoire third-party-services/ab-test du référentiel de cours:
$cd nru-programmability-course/third-party-services/ab-test
Ce répertoire contient le code que nous attendons de votre application à ce stade du cours. En naviguant vers le bon répertoire au début de chaque leçon, vous laissez votre code personnalisé derrière vous, vous protégeant ainsi du transport de code incorrect d'une leçon à l'autre.
Dans nerdlets/ab-test-nerdlet/total-cancellations.js
, faites une demande à api.nerdsletter.net
avec votre jeton API. Enregistrez les résultats dans l'état et utilisez cet état dans render()
:
import React from 'react';import { HeadingText, PieChart } from 'nr1';
export default class TotalCancellations extends React.Component { constructor() { super(...arguments);
this.state = { cancellations: [], lastToken: null } }
generateChartData(data) { const cancellationsA = data ? data.a : 0; const cancellationsB = data ? data.b : 0;
return [ { metadata: { id: 'cancellations-A', name: 'Version A', viz: 'main', color: 'blue', }, data: [ { y: cancellationsA }, ], }, { metadata: { id: 'cancellations-B', name: 'Version B', viz: 'main', color: 'green', }, data: [ { y: cancellationsB }, ], }, ] }
componentDidUpdate() { if (this.props.token && this.props.token != this.state.lastToken) { console.log(`Requesting data with api token ${this.props.token}`)
fetch( "https://api.nerdsletter.net/cancellations", {headers: {"Authorization": `Bearer ${this.props.token}`}} ).then( (response) => { if (response.status == 200) { return response.json() } else if (response.status == 401) { console.error("Incorrect auth header") } else { console.error(response.text()) } } ).then( (data) => { if (data) { this.setState({ cancellations: this.generateChartData(data), lastToken: this.props.token }) } } ) } }
render() { return <div> <HeadingText className="chartHeader"> Total cancellations per version </HeadingText> <PieChart data={this.state.cancellations} fullWidth /> </div> }}
Dans ce code, vous initialisez TotalCancellations.state.cancellations
avec zéro pour la valeur y de chaque série au lieu des valeurs précédemment codées en dur. Cela permet de représenter de manière plus réaliste ce que le graphique doit afficher si votre application New Relic n'a pas demandé avec succès des données à l'API Nerdsletter. Ensuite, vous utilisez la fonction fetch()
de Javascript pour effectuer une requête HTTP à l'API Nerdsletter. Vous transmettez ensuite votre jeton dans l'en-tête Authorization
de la requête. Si la demande réussit, vous mettez à jour les données d'annulation dans TotalCancellations.state
afin que ces données soient reflétées dans la méthode de rendu du composant.
Accédez à la racine de votre Nerdpack à nru-programmability-course/third-party-service/ab-test
.
Générez un nouvel UUID pour votre Nerdpack :
$nr1 nerdpack:uuid -gf
Étant donné que vous avez cloné le référentiel de cours qui contenait un Nerdpack existant, vous devez générer votre propre identifiant unique. Cet UUID mappe votre Nerdpack à votre compte New Relic. Il permet également à votre application de faire requests Nerdgraph au nom de votre compte.
Présentez votre demande localement :
$nr1 nerdpack:serve
Accédez à https://one.newrelic.com?nerdpacks=local et affichez votre application sous Apps > Your apps.
Si votre jeton dans NerdStorageVault
n'est pas « ABC123 », votre console affichera une erreur indiquant « En-tête d'authentification incorrect ».
Si vous définissez le jeton sur « ABC123 », le nombre Total cancellations per version est mis à jour pour afficher les valeurs du service tiers.
Conseil
Si quelque chose ne fonctionne pas, utilisez les outils de débogage de votre navigateur pour essayer d'identifier le problème.
Assurez-vous de :
- J'ai copié correctement le code de la leçon
- Générer un nouvel UUID
- Remplacé toutes les instances de
<YOUR NEW RELIC ACCOUNT ID>
dans votre projet par votre identifiant de compteNew Relic actuel
Une fois que vous avez terminé, arrêtez de diffuser votre application New Relic en appuyant sur CTRL+C
dans la fenêtre de terminal de votre serveur local.
Bon travail ! Vous avez parcouru un long chemin depuis la première fois que vous avez exécuté nr1 nerdpack:create
.
Vous avez créé huit graphiques avec des styles différents et les avez fournis avec des données dynamiques provenant de plusieurs sources. Vous avez découvert le SDK New Relic et utilisé bon nombre de ses composants. Vous avez même collecté des données auprès d'un service tiers et les avez mélangées de manière transparente avec vos données New Relic pour fournir un aperçu complet des performances des versions concurrentes de votre test A/B les unes par rapport aux autres.
À partir de là, il ne reste plus qu'un seul ensemble d'API dans le SDK New Relic que vous n'avez pas encore mis la main sur : les API de plateforme. Ils vous seront utiles pour améliorer la convivialité de votre application New Relic.
Conseil
Cette leçon fait partie d’un cours qui vous apprend à créer une application New Relic à partir de zéro. Passez à la leçon suivante : ajoutez PlatformStateContext à votre nerdlet.