Maison  >  Article  >  développement back-end  >  statistiques de demande de gin golang

statistiques de demande de gin golang

WBOY
WBOYoriginal
2023-05-14 17:20:07976parcourir

Avec le développement d'applications Web, la demande des gens en matière de performances et d'optimisation du code est également de plus en plus élevée. Dans ce cas, le suivi des demandes et les statistiques deviennent particulièrement importants. Cet article expliquera comment utiliser le framework Golang et Gin pour implémenter la fonction de statistiques de requête.

Contexte

Dans les applications Web, des problèmes de performances peuvent survenir dans les situations suivantes :

  • Requêtes fréquentes dans la base de données
  • Latence excessive du réseau
  • Délais d'expiration des demandes
  • Trop de requêtes simultanées

Dans ce cas Dans ce cas, les statistiques et l'affichage visuel des demandes peuvent nous aider à identifier rapidement les problèmes et à prendre les mesures appropriées.

Comment compter les requêtes

Tout d'abord, nous devons définir un middleware pour enregistrer toutes les informations de requête transitant par le serveur. Pour chaque demande, nous devons enregistrer les informations suivantes :

  • Chemin de la demande
  • Méthode HTTP
  • Heure de début de la demande
  • Heure de fin de la demande
  • Durée de la demande
  • Code d'état de la demande

Avec le framework Gin, nous pouvons définir une fonction pour exécuter ce middleware. Tout d'abord, nous devons exécuter le gestionnaire entrant, puis enregistrer les informations de la demande :

func RequestStats() gin.HandlerFunc {
    return func(c *gin.Context) {
        t := time.Now()

        c.Next()

        latency := time.Since(t)

        status := c.Writer.Status()
        path := c.Request.URL.Path
        method := c.Request.Method

        log.Printf("[GIN] %s %s %d %v", method, path, status, latency)
    }
}

Dans cette fonction, nous utilisons la fonction log.Printf() pour imprimer les informations de la demande. Maintenant, nous pouvons ajouter ce middleware au moteur Gin :

router := gin.Default()
router.Use(RequestStats())

De cette façon, nous enregistrerons toutes les informations de demande lorsque le middleware sera exécuté pour chaque requête.

Statistiques visuelles des demandes

Pour afficher les statistiques des demandes aux utilisateurs, nous pouvons utiliser l'interface Web. Dans ce cas, le modèle de conception MVC (Model-View-Controller) est particulièrement adapté à l’utilisation. Dans ce cas, le contrôleur est responsable du traitement de toutes les requêtes Web et de la détermination des données à récupérer du modèle et de la manière de les présenter. Les vues sont responsables de la présentation des données.

La première étape consiste à définir le contrôleur. Le contrôleur lira les statistiques de requête stockées dans le fichier et les transmettra à la vue pour le rendu :

func GetStats(c *gin.Context) {
    data, err := ioutil.ReadFile("stats.txt")
    if err != nil {
        c.String(http.StatusInternalServerError, fmt.Sprintf("Error reading file: %v", err))
        return
    }

    c.HTML(http.StatusOK, "stats.html", gin.H{
        "title": "Request Statistics",
        "data":  string(data),
    })
}

Dans cette méthode de contrôleur, nous lisons d'abord les statistiques de requête du fichier. Les données sont ensuite transmises sous forme de chaîne au moteur de modèle pour le rendu.

L'étape suivante consiste à définir la vue. Nous pouvons utiliser HTML et CSS pour créer de belles interfaces utilisateur :

<!DOCTYPE html>
<html>
    <head>
        <title>{{.title}}</title>
        <style>
            table {
                border-collapse: collapse;
                width: 100%;
            }

            th, td {
                text-align: left;
                padding: 8px;
            }

            th {
                background-color: #4CAF50;
                color: white;
            }

            tr:nth-child(even){background-color: #f2f2f2}
        </style>
    </head>
    <body>
        <h2>{{.title}}</h2>
        <table>
            <tr>
                <th>HTTP Method</th>
                <th>Request Path</th>
                <th>Status Code</th>
                <th>Latency</th>
            </tr>
            {{range split .data "
"}}
            {{with split . " "}}
            <tr>
                <td>{{index . 0}}</td>
                <td>{{index . 1}}</td>
                <td>{{index . 2}}</td>
                <td>{{index . 3}}</td>
            </tr>
            {{end}}
            {{end}}
        </table>
    </body>
</html>

Dans ce modèle, nous utilisons HTML et CSS pour créer un tableau permettant d'afficher les données de la demande.

Enfin, nous devons associer le contrôleur à un itinéraire et l'enregistrer dans le moteur Gin :

router.GET("/stats", GetStats)

Maintenant, nous avons un système de statistiques de requête et pouvons utiliser la page Web pour afficher les résultats statistiques à l'utilisateur.

Conclusion

Les statistiques de demande sont une fonction importante d'une application Web qui peut nous aider à identifier les problèmes de performances courants dans les applications Web en enregistrant des informations telles que les méthodes HTTP, les chemins de demande, les codes d'état des demandes, les durées des demandes, etc. Dans cet article, nous utilisons le langage Golang et le framework Gin pour implémenter les statistiques de requêtes, et utilisons HTML et CSS pour présenter les données. Cette implémentation est relativement simple et facile à maintenir, et peut nous aider à localiser rapidement les problèmes avec les applications Web.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Que peut faire Golang ?Article suivant:Que peut faire Golang ?