Active Support est une partie de Rails qui fournit des extensions de langage Ruby, des utilitaires et d'autres choses. L'une des choses qu'il inclut est une API d'instrumentation qui peut être utilisée à l'intérieur d'une application pour mesurer certaines actions qui se produisent dans le code Ruby, telles que celles à l'intérieur d'une application Rails ou du framework lui-même. Cependant, il n'est pas limité à Rails. Il peut être utilisé indépendamment dans d'autres scripts Ruby si nécessaire.
Dans ce guide, vous apprendrez comment utiliser l'API d'instrumentation d'Active Support pour mesurer des événements à l'intérieur de Rails et d'autres codes Ruby.
Après avoir lu ce guide, vous saurez :
Ce que l'instrumentation peut fournir.
Comment ajouter un abonné à un crochet.
Comment afficher les durées à partir de l'instrumentation dans votre navigateur.
Les crochets à l'intérieur du framework Rails pour l'instrumentation.
Comment créer une implémentation d'instrumentation personnalisée.
L'API d'instrumentation fournie par Active Support permet aux développeurs de fournir des crochets auxquels d'autres développeurs peuvent se connecter. Il y en a plusieurs dans le framework Rails. Avec cette API, les développeurs peuvent choisir d'être notifiés lorsque certains événements se produisent à l'intérieur de leur application ou d'un autre morceau de code Ruby.
Par exemple, il y a un crochet fourni dans Active Record qui est appelé à chaque fois qu'Active Record utilise une requête SQL sur une base de données. Ce crochet pourrait être abonné et utilisé pour suivre le nombre de requêtes pendant une certaine action. Il y a un autre crochet autour du traitement d'une action d'un contrôleur. Cela pourrait être utilisé, par exemple, pour suivre la durée d'une action spécifique.
Vous pouvez même créer vos propres événements à l'intérieur de votre application auxquels vous pourrez vous abonner ultérieurement.
Si vous êtes préoccupé par l'exactitude de started et finished pour calculer un temps écoulé précis, utilisez ActiveSupport::Notifications.monotonic_subscribe. Le bloc donné recevra les mêmes arguments que ci-dessus, mais started et finished auront des valeurs avec un temps monotone précis au lieu du temps du calendrier.
Définir tous ces arguments de bloc à chaque fois peut être fastidieux. Vous pouvez facilement créer un ActiveSupport::Notifications::Event
à partir des arguments de bloc comme ceci :
Vous pouvez également vous abonner à des événements correspondant à une expression régulière. Cela vous permet de vous abonner à
plusieurs événements à la fois. Voici comment vous abonner à tout ce qui concerne ActionController :
ActiveSupport::Notifications.subscribe(/action_controller/)do|*args|# inspecter tous les événements ActionControllerend
Rails implémente la norme Server Timing pour rendre les informations de durée disponibles dans le navigateur web. Pour l'activer, modifiez votre configuration d'environnement (généralement development.rb car c'est le plus utilisé en développement) pour inclure ce qui suit :
config.server_timing=true
Une fois configuré (y compris le redémarrage de votre serveur), vous pouvez accéder au volet Outils de développement de votre navigateur, puis sélectionner Réseau et recharger votre page. Vous pouvez ensuite sélectionner n'importe quelle requête vers votre serveur Rails, et vous verrez les durées du serveur dans l'onglet des durées. Pour un exemple de cela, consultez la documentation Firefox.
Dans le framework Ruby on Rails, plusieurs crochets sont fournis pour des événements courants. Ces événements et leurs charges utiles sont détaillés ci-dessous.
La clé :cache_hits est incluse uniquement si la collection est rendue avec cached: true.
ruby
{
identifier: "/Users/adam/projects/notifications/app/views/posts/_post.html.erb",
count: 3,
cache_hits: 0
}
Ajouter vos propres événements est également facile. Active Support s'occupera de
tout le travail lourd pour vous. Il suffit d'appeler ActiveSupport::Notifications.instrument avec un name, payload et un bloc.
La notification sera envoyée après que le bloc se termine. Active Support générera les temps de début et de fin,
et ajoutera l'ID unique de l'instrumenteur. Toutes les données transmises à l'appel instrument feront
partie de la charge utile.
Voici un exemple :
ActiveSupport::Notifications.instrument"my.custom.event",this: :datado# effectuez vos actions personnalisées iciend
Maintenant, vous pouvez écouter cet événement avec :
Vous pouvez également appeler instrument sans passer de bloc. Cela vous permet d'utiliser l'infrastructure d'instrumentation pour d'autres utilisations de messagerie.
Vous devez suivre les conventions de Rails lors de la définition de vos propres événements. Le format est : event.library. Si votre application envoie des tweets, vous devez créer un événement nommé tweet.twitter.
Retour d'information
Vous êtes encouragé à contribuer à l'amélioration de la qualité de ce guide.
Veuillez contribuer si vous trouvez des fautes de frappe ou des erreurs factuelles.
Pour commencer, vous pouvez lire notre contribution à la documentation section.
Vous pouvez également trouver du contenu incomplet ou des informations qui ne sont pas à jour.
Veuillez ajouter toute documentation manquante pour la version principale. Assurez-vous de vérifier
Edge Guides d'abord pour vérifier
si les problèmes ont déjà été résolus ou non sur la branche principale.
Consultez les Directives des guides Ruby on Rails
pour le style et les conventions.
Si pour une raison quelconque vous repérez quelque chose à corriger mais ne pouvez pas le faire vous-même, veuillez
ouvrir un problème.
Et enfin, toute discussion concernant la documentation de Ruby on Rails
est la bienvenue sur le Forum officiel de Ruby on Rails.