Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add telemetry #30

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
Open

Conversation

roshan
Copy link

@roshan roshan commented Mar 7, 2025

A port of clerk/clerk-sdk-java#53 to C#.

Example messages
Mar 06 16:10:37 --> {"event":"METHOD_CALLED","it":"development","method":"GetUserList","sdk":"Clerk:Clerk.BackendAPI","sdkv":"0.6.1.0"}
Mar 06 16:10:38 [server] event: connection (socket#26)
Mar 06 16:10:38 [socket#26] event: resume
Mar 06 16:10:38 [socket#26] event: data
Mar 06 16:10:38 --> POST / HTTP/1.1
Mar 06 16:10:38 --> Host: localhost:3000
Mar 06 16:10:38 --> Content-Type: application/json; charset=utf-8
Mar 06 16:10:38 --> Content-Length: 138
Mar 06 16:10:38 -->
Mar 06 16:10:38 --> {"event":"METHOD_SUCCEEDED","it":"development","method":"GetUserList","sdk":"Clerk:Clerk.BackendAPI","sdkv":"0.6.1.0","status_code":"200"}
Example hook exerciser
using System;
using System.Linq;
using System.Threading.Tasks;
using Clerk.BackendAPI;

namespace TestClerkCSharp
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var apiKey = "sk_test_D0BcXJScgo4bad1GSfaCmVbo9jqZvW2msRc5P61l0q";
            
            Console.WriteLine("=== Testing with Clerk.BackendAPI ===");
            
            try
            {
                var spk = new ClerkBackendApi(bearerAuth: apiKey);

                var users = await spk.Users.ListAsync();
                if (users?.UserList != null)
                {
                    Console.WriteLine($"Found {users.UserList.Count} users:");
                    foreach (var user in users.UserList)
                    {
                        Console.WriteLine($"- User ID: {user.Id}, Email: {user.EmailAddresses?.FirstOrDefault()?.ToString() ?? "No email"}, Created: {user.CreatedAt}");
                    }
                }
                else
                {
                    Console.WriteLine("No users found or UserList is null.");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}");
            }
        }
    }
}

Summary

We're adding

  • Three Speakeasy hooks:
    • Not SDKInit because that isn't yet supported for us because we can't get to the sk yet
  • A random sampler that filters out 90% of events
  • A deduplication sampler that ensures that a single process only fires one event per day
  • Skipping via CLERK_TELEMETRY_DISABLED=1
  • Debugging via CLERK_TELEMETRY_DEBUG=1
  • A few unit tests for each of the bits.
  • A minor switch to not use the async keyword on the existing hook since it propagates a warning but you can just use Task.from to wrap it in the format we want

Slightly related change

It would be useful for the C# generated code to type SecuritySource better in the HookContext because we have a type-check and cast to do at runtime right now.

Output

Debug Logs
➜  test-clerk-csharp git:(main) ✗ CLERK_TELEMETRY_DEBUG=1 dotnet run
=== Testing with Clerk.BackendAPI ===
{"event":"METHOD_CALLED","it":"development","method":"GetUserList","sdk":"Clerk:Clerk.BackendAPI","sdkv":"0.6.1.0"}
{"event":"METHOD_SUCCEEDED","it":"development","method":"GetUserList","sdk":"Clerk:Clerk.BackendAPI","sdkv":"0.6.1.0","status_code":"200"}
Found 1 users:
- User ID: user_2tpc6ErDIdl5f52i6iFbVcRXxKe, Email: Clerk.BackendAPI.Models.Components.EmailAddress, Created: 1741052278846
HTTP Echo Server Logs
Mar 06 16:17:12 --> {"event":"METHOD_CALLED","it":"development","method":"GetUserList","sdk":"Clerk:Clerk.BackendAPI","sdkv":"0.6.1.0"}
Mar 06 16:17:13 [server] event: connection (socket#28)
Mar 06 16:17:13 [socket#28] event: resume
Mar 06 16:17:13 [socket#28] event: data
Mar 06 16:17:13 --> POST / HTTP/1.1
Mar 06 16:17:13 --> Host: localhost:3000
Mar 06 16:17:13 --> Content-Type: application/json; charset=utf-8
Mar 06 16:17:13 --> Content-Length: 138
Mar 06 16:17:13 -->
Mar 06 16:17:13 --> {"event":"METHOD_SUCCEEDED","it":"development","method":"GetUserList","sdk":"Clerk:Clerk.BackendAPI","sdkv":"0.6.1.0","status_code":"200"}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant