NOTE: Apart from
(and even then it's questionable, I'm Scottish). These are machine translated in languages I don't read. If they're terrible please contact me.
You can see how this translation was done in this article.
Wednesday, 28 August 2024
//Less than a minute
Τώρα έχω τον πελάτη Umami, πρέπει να το πακετάρω και να το κάνω διαθέσιμο ως πακέτο Nuget. Αυτή είναι μια αρκετά απλή διαδικασία, αλλά υπάρχουν μερικά πράγματα που πρέπει να γνωρίζουμε.
Αποφάσισα να αντιγράψω. ΚαλίντCity name (optional, probably does not need a translation) και χρησιμοποιήστε το εξαιρετικό πακέτο Minver για να εκδώσετε το πακέτο Nuget μου. Αυτό είναι ένα απλό πακέτο που χρησιμοποιεί την ετικέτα έκδοσης git για να καθορίσει τον αριθμό έκδοσης.
Για να το χρησιμοποιήσω απλά πρόσθεσα τα ακόλουθα στην Umami.Net.csproj
αρχείο:
<PropertyGroup>
<MinVerTagPrefix>v</MinVerTagPrefix>
</PropertyGroup>
Έτσι μπορώ να βάλω ετικέτα στην εκδοχή μου. v
και το πακέτο θα εκδοθεί σωστά.
git tag v0.0.8
git push origin v0.0.8
Θα ωθήσει αυτή την ετικέτα, τότε έχω ένα GitHub Action setup να περιμένει για την ετικέτα και να χτίσει το πακέτο Nuget.
Έχω μια δράση GitHub που φτιάχνει το πακέτο Nuget και το σπρώχνει στο αποθετήριο του πακέτου GitHub. Αυτή είναι μια απλή διαδικασία που χρησιμοποιεί την dotnet pack
εντολή για την κατασκευή του πακέτου και στη συνέχεια η dotnet nuget push
Εντολές να το πιέσουμε στο αποθετήριο των Νιούγκετ.
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 }}
Αυτό είναι πολύ απλό, προσθέτω ένα README.md
αρχείο στη ρίζα του έργου και icon.png
αρχείο στη ρίζα του έργου. Η README.md
το αρχείο χρησιμοποιείται ως περιγραφή του πακέτου και icon.png
το αρχείο χρησιμοποιείται ως το εικονίδιο για το πακέτο.
<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>
Στο αρχείο README.md έχω ένα σύνδεσμο με το αποθετήριο GitHub και μια περιγραφή του πακέτου.
Αναπαράγονται παρακάτω:
Αυτό είναι ένα.NET Core πελάτη για την παρακολούθηση Umami API. Βασίζεται στον πελάτη του κόμβου Umami, ο οποίος μπορεί να βρεθεί Ορίστε..
Μπορείτε να δείτε πώς να ρυθμίσετε Umami ως δοχείο docker Ορίστε.. Μπορείτε να διαβάσετε περισσότερες λεπτομέρειες σχετικά με τη δημιουργία του στο blog μου Ορίστε..
Για να χρησιμοποιήσετε αυτόν τον πελάτη χρειάζεστε τις ακόλουθες ρυθμίσεις.json:
{
"Analytics":{
"UmamiPath" : "https://umamilocal.mostlylucid.net",
"WebsiteId" : "32c2aa31-b1ac-44c0-b8f3-ff1f50403bee"
},
}
Πού; UmamiPath
είναι το μονοπάτι για την περίπτωσή σας Umami και WebsiteId
είναι η ταυτότητα της ιστοσελίδας που θέλετε να παρακολουθείτε.
Για να χρησιμοποιήσετε τον πελάτη θα πρέπει να προσθέσετε τα ακόλουθα Program.cs
:
using Umami.Net;
services.SetupUmamiClient(builder.Configuration);
Αυτό θα προσθέσει τον πελάτη Umami στη συλλογή υπηρεσιών.
Μπορείτε στη συνέχεια να χρησιμοποιήσετε τον πελάτη με δύο τρόπους:
UmamiClient
στην τάξη σας και να καλέσετε το Track
μέθοδος: // Inject UmamiClient umamiClient
await umamiClient.Track("Search", new UmamiEventData(){{"query", encodedQuery}});
UmamiBackgroundSender
να παρακολουθείτε τα γεγονότα στο παρασκήνιο (αυτό χρησιμοποιεί ένα IHostedService
για την αποστολή γεγονότων στο παρασκήνιο: // Inject UmamiBackgroundSender umamiBackgroundSender
await umamiBackgroundSender.Track("Search", new UmamiEventData(){{"query", encodedQuery}});
Ο πελάτης θα στείλει την εκδήλωση στο API Umami και θα αποθηκευτεί.
Η UmamiEventData
είναι ένα λεξικό των ζευγών βασικών τιμών που θα σταλούν στο Umami API ως τα δεδομένα γεγονότων.
Υπάρχουν επιπλέον πιο χαμηλές μέθοδοι που μπορούν να χρησιμοποιηθούν για την αποστολή γεγονότων στο Umami API.
Και στις δύο περιπτώσεις... UmamiClient
και UmamiBackgroundSender
Μπορείτε να καλέσετε την ακόλουθη μέθοδο.
Send(UmamiPayload? payload = null, UmamiEventData? eventData = null,
string eventType = "event")
Αν δεν περάσεις σε ένα UmamiPayload
αντικείμενο, ο πελάτης θα δημιουργήσει ένα για σας χρησιμοποιώντας το WebsiteId
από τα ορεκτικά. Τζέισον.
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;
}
Μπορείς να δεις ότι αυτό έχει πληθυσμό... UmamiPayload
αντικείμενο με το WebsiteId
από τις ομορφιές. json, το Url
, IpAddress
, UserAgent
, Referrer
και Hostname
από την HttpContext
.
ΣΗΜΕΙΩΣΗ: Το eventType μπορεί να είναι μόνο "event" ή "idify" σύμφωνα με το Umami API.
Έτσι, αυτό είναι που μπορείτε τώρα να εγκαταστήσετε Umami.Net από Nuget και να το χρησιμοποιήσετε σε ASP.NET Core εφαρμογή σας. Ελπίζω να το βρεις χρήσιμο. Θα συνεχίσω να ψάχνω και να προσθέτω εξετάσεις σε μελλοντικές θέσεις.