Back to "Adding Umami Tracking Client Nuget Package"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

ASP.NET Nuget Umami

Adding Umami Tracking Client Nuget Package

Wednesday, 28 August 2024

Introduzione

Ora ho il cliente Umami; Dovrei l'impacchettare e renderlo disponibile come package Nuget. È un processo abbastanza semplice, ma ci sono alcune cose di cui essere consapevoli.

Creare il Nuget Package

La versione

Ho deciso di copiare. Khalid e usare l'excellente package minver alla versione del mio package Nuget. Questo è un semplice package che usa la targhetta della versione git per determinare il numero di versione.

Per usarlo ho semplicemente aggiunto il seguente: Umami.Net.csproj file:

    <PropertyGroup>
    <MinVerTagPrefix>v</MinVerTagPrefix>
</PropertyGroup>

In questo modo posso etichettare la mia versione con un v e il pacchetto sarà corretto.

 git tag v0.0.8       
 git push origin v0.0.8

Metterò questo tag, allora ho una configurazione di GitHub Action per aspettare quel tag e costruire il package Nuget.

Costruire il Nuget Package

Ho un'azione GitHub che costruisce il pacco Nuget e lo spinge al riposito del pacco Git Hub. Questo è un semplice processo che usa dotnet pack il comando per costruire il paquet e poi il dotnet nuget push il comando per spingerlo al riposito nuget.

name: Publish Umami.NET
on:
  push:
    tags:
      - 'v*.*.*'  # This triggers the action for any tag that matches the pattern v1.0.0, v2.1.3, etc.

jobs:
  publish:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v3

    - name: Setup .NET
      uses: actions/setup-dotnet@v3
      with:
        dotnet-version: '8.x' # Specify the .NET version you need

    - name: Restore dependencies
      run: dotnet restore ./Umami.Net/Umami.Net.csproj

    - name: Build project
      run: dotnet build --configuration Release ./Umami.Net/Umami.Net.csproj --no-restore

    - name: Pack project
      run: dotnet pack --configuration Release ./Umami.Net/Umami.Net.csproj --no-build --output ./nupkg

    - name: Publish to NuGet
      run: dotnet nuget push ./nupkg/*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.UMAMI_NUGET_API_KEY }}
      env:
        NUGET_API_KEY: ${{ secrets.UMAMI_NUGET_API_KEY }}

Adding Readme and Icon

Questo è abbastanza semplice, aggiungo un README.md file alla radice del progetto e a icon.png file alla radice del progetto. README.md il file viene usato come descrizione del package e della icon.png il file è usato come icono del package.

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <LangVersion>12</LangVersion>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>

        <IsPackable>true</IsPackable>
        <PackageId>Umami.Net</PackageId>
        <Authors>Scott Galloway</Authors>
        <PackageIcon>icon.png</PackageIcon>
        <RepositoryUrl>https://github.com/scottgal/mostlylucidweb/tree/main/Umami.Net</RepositoryUrl>
        <PackageLicenseExpression>MIT</PackageLicenseExpression>
        <PackageTags>web</PackageTags>
        <PackageReadmeFile>README.md</PackageReadmeFile>
        <Description>
           Adds a simple Umami endpoint to your ASP.NET Core application.
        </Description>
    </PropertyGroup>

Nel mio file README.md ho un link al riposito GitHub e una descrizione del package.

Riprodotto sotto:

Umami.Net

Questo è un .NET Core client per l'API di tracciamento Umami. È basato sul cliente Umami Node, ,. Qui..

Potete vedere come creare Umami come contenitore di docker. Qui.. Potete leggere più dettagli sulla creazione di ' sul mio blog. Qui..

Per usare questo cliente servono le following appsettings.json configuration:

{
  "Analytics":{
    "UmamiPath" : "https://umamilocal.mostlylucid.net",
    "WebsiteId" : "32c2aa31-b1ac-44c0-b8f3-ff1f50403bee"
  },
}

Dove? UmamiPath è il percorso verso l'instance Umami e WebsiteId è l'ID del sito web che volete tracciare.

Per usare il cliente dovete aggiungere le following cose. Program.cs:

using Umami.Net;

services.SetupUmamiClient(builder.Configuration);

Questo aggiungerà il cliente Umami alla raccolta dei servizi.

Si può usare il cliente in due modi:

  1. Si inietta. UmamiClient All'interno della vostra classe e chiamate il Track metodo:
 // Inject UmamiClient umamiClient
 await umamiClient.Track("Search", new UmamiEventData(){{"query", encodedQuery}});
  1. Utilizzate la UmamiBackgroundSender per tracciare gli eventi nello sfondo ( questo usa un IHostedService per mandare eventi in fondo):
 // Inject UmamiBackgroundSender umamiBackgroundSender
await umamiBackgroundSender.Track("Search", new UmamiEventData(){{"query", encodedQuery}});

Il cliente spedirà l'evento all'API Umami e sarà archiviato.

L'informazione figura nella parte dispositiva. UmamiEventData è un vocabolario di coppie di valori chiave che verranno inviate all'API Umami come dati dell'evento.

Ci sono inoltre più metodi di basso livello che possono essere usati per inviare eventi all'API Umami.

In entrambi i casi. UmamiClient e UmamiBackgroundSender Potete chiamare il seguente metodo.



 Send(UmamiPayload? payload = null, UmamiEventData? eventData = null,
        string eventType = "event")

Se non passate in una UmamiPayload object, il cliente ne creerà uno per voi usando la WebsiteId dagli appsettings.json.

    public  UmamiPayload GetPayload(string? url = null, UmamiEventData? data = null)
    {
        var httpContext = httpContextAccessor.HttpContext;
        var request = httpContext?.Request;

        var payload = new UmamiPayload
        {
            Website = settings.WebsiteId,
            Data = data,
            Url = url ?? httpContext?.Request?.Path.Value,
            IpAddress = httpContext?.Connection?.RemoteIpAddress?.ToString(),
            UserAgent = request?.Headers["User-Agent"].FirstOrDefault(),
            Referrer = request?.Headers["Referer"].FirstOrDefault(),
           Hostname = request?.Host.Host,
        };
        
        return payload;
    }

Potete vedere che questo si occupa di UmamiPayload L'oggetto con il WebsiteId dagli appsettings.json, Url, IpAddress, UserAgent, Referrer e Hostname da una parte, e dall'altra. HttpContext.

NOTA: EventType può essere solo M SK1event" o "identifyMSC4 secondo l'API di UmamiMNK5

Conclusione

Perciò's è che ora potete installare Umami.Net da Nuget e usarlo nella vostra ASP .NET Core applicationM SK3 Spero di trovarlo utileMSC4 IMST5Continuerò a tweaking e ad aggiungere test nei futuri post.

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.