Skip to content

Commit 3dd5c41

Browse files
author
punkouter25
committed
Add comprehensive debugging to track bulk repository add issue
1 parent 420c07c commit 3dd5c41

File tree

3 files changed

+105
-11
lines changed

3 files changed

+105
-11
lines changed

src/PoRepoLineTracker.Api/Program.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,14 +341,32 @@ public static WebApplication CreateWebApplication(string[] args)
341341
{
342342
try
343343
{
344-
Log.Information("Adding {Count} repositories via bulk endpoint.", repositories?.Count() ?? 0);
344+
Log.Information("=== BULK REPOSITORY ADD ENDPOINT CALLED ===");
345+
Log.Information("Request body received: {IsNull}", repositories == null ? "NULL" : "NOT NULL");
346+
347+
var repoList = repositories?.ToList() ?? new List<PoRepoLineTracker.Application.Models.BulkRepositoryDto>();
348+
Log.Information("Number of repositories in request: {Count}", repoList.Count);
349+
350+
// Log each repository in detail
351+
for (int i = 0; i < repoList.Count; i++)
352+
{
353+
var repo = repoList[i];
354+
Log.Information("API Request Repo [{Index}]: Owner='{Owner}', RepoName='{RepoName}', CloneUrl='{CloneUrl}'",
355+
i, repo?.Owner ?? "NULL", repo?.RepoName ?? "NULL", repo?.CloneUrl ?? "NULL");
356+
}
345357

358+
Log.Information("Sending AddMultipleRepositoriesCommand to MediatR with {Count} repositories", repoList.Count);
346359
var addedRepositories = await mediator.Send(new PoRepoLineTracker.Application.Features.Repositories.Commands.AddMultipleRepositoriesCommand(repositories ?? Enumerable.Empty<PoRepoLineTracker.Application.Models.BulkRepositoryDto>()));
360+
361+
var addedList = addedRepositories.ToList();
362+
Log.Information("MediatR returned {Count} repositories", addedList.Count);
363+
Log.Information("Repositories returned: {Repos}", string.Join(", ", addedList.Select(r => $"{r.Owner}/{r.Name}")));
364+
347365
return Results.Ok(addedRepositories);
348366
}
349367
catch (Exception ex)
350368
{
351-
Log.Error(ex, "Error adding multiple repositories");
369+
Log.Error(ex, "EXCEPTION in bulk repository endpoint: {Message}. Stack: {StackTrace}", ex.Message, ex.StackTrace);
352370
return Results.Problem($"Error adding repositories: {ex.Message}", statusCode: (int)HttpStatusCode.InternalServerError);
353371
}
354372
})

src/PoRepoLineTracker.Application/Features/Repositories/Commands/AddMultipleRepositoriesCommandHandler.cs

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,52 @@ public AddMultipleRepositoriesCommandHandler(
2323

2424
public async Task<IEnumerable<GitHubRepository>> Handle(AddMultipleRepositoriesCommand request, CancellationToken cancellationToken)
2525
{
26-
_logger.LogInformation("Adding {Count} repositories to the system.", request.Repositories.Count());
26+
_logger.LogInformation("=== START AddMultipleRepositoriesCommandHandler ===");
27+
_logger.LogInformation("Received request to add {Count} repositories", request.Repositories.Count());
28+
29+
// Log each repository in the request
30+
var repoList = request.Repositories.ToList();
31+
for (int i = 0; i < repoList.Count; i++)
32+
{
33+
var repo = repoList[i];
34+
_logger.LogInformation("Repository [{Index}]: Owner='{Owner}', Name='{RepoName}', CloneUrl='{CloneUrl}'",
35+
i, repo.Owner ?? "NULL", repo.RepoName ?? "NULL", repo.CloneUrl ?? "NULL");
36+
}
2737

2838
var addedRepositories = new List<GitHubRepository>();
2939

3040
foreach (var repo in request.Repositories)
3141
{
3242
try
3343
{
44+
_logger.LogInformation("Processing repository: {Owner}/{Name}", repo.Owner, repo.RepoName);
45+
46+
// Validate repository data
47+
if (string.IsNullOrWhiteSpace(repo.Owner))
48+
{
49+
_logger.LogWarning("Skipping repository with empty Owner. RepoName={RepoName}", repo.RepoName ?? "NULL");
50+
continue;
51+
}
52+
53+
if (string.IsNullOrWhiteSpace(repo.RepoName))
54+
{
55+
_logger.LogWarning("Skipping repository with empty RepoName. Owner={Owner}", repo.Owner ?? "NULL");
56+
continue;
57+
}
58+
3459
// Check if repository already exists
60+
_logger.LogInformation("Checking if repository {Owner}/{Name} already exists...", repo.Owner, repo.RepoName);
3561
var existingRepo = await _repositoryDataService.GetRepositoryByOwnerAndNameAsync(repo.Owner, repo.RepoName);
3662
if (existingRepo != null)
3763
{
38-
_logger.LogInformation("Repository {Owner}/{Name} already exists, skipping.", repo.Owner, repo.RepoName);
64+
_logger.LogInformation("Repository {Owner}/{Name} already exists with ID {Id}, adding to result list.",
65+
repo.Owner, repo.RepoName, existingRepo.Id);
3966
addedRepositories.Add(existingRepo);
4067
continue;
4168
}
4269

4370
// Create new repository
71+
_logger.LogInformation("Creating new repository entity for {Owner}/{Name}", repo.Owner, repo.RepoName);
4472
var newRepo = new GitHubRepository
4573
{
4674
Id = Guid.NewGuid(),
@@ -50,25 +78,35 @@ public async Task<IEnumerable<GitHubRepository>> Handle(AddMultipleRepositoriesC
5078
LastAnalyzedCommitDate = DateTime.MinValue // Default value
5179
};
5280

81+
_logger.LogInformation("Saving repository {Owner}/{Name} to database with ID {Id}",
82+
newRepo.Owner, newRepo.Name, newRepo.Id);
5383
await _repositoryDataService.AddRepositoryAsync(newRepo);
84+
85+
_logger.LogInformation("Successfully saved repository {Owner}/{Name}. Adding to result list.",
86+
newRepo.Owner, newRepo.Name);
5487
addedRepositories.Add(newRepo);
5588

56-
_logger.LogInformation("Successfully added repository {Owner}/{Name} with ID {Id}. Dispatching AnalyzeRepositoryCommitsCommand.",
89+
_logger.LogInformation("Dispatching AnalyzeRepositoryCommitsCommand for repository {Owner}/{Name} (ID: {Id})",
5790
newRepo.Owner, newRepo.Name, newRepo.Id);
5891

5992
// Dispatch command to analyze the newly added repository
6093
await _mediator.Send(new AnalyzeRepositoryCommitsCommand(newRepo.Id), cancellationToken);
94+
95+
_logger.LogInformation("Analysis command dispatched for repository {Owner}/{Name}", newRepo.Owner, newRepo.Name);
6196
}
6297
catch (Exception ex)
6398
{
64-
_logger.LogError(ex, "Failed to add repository {Owner}/{Name}: {Message}",
65-
repo.Owner, repo.RepoName, ex.Message);
99+
_logger.LogError(ex, "EXCEPTION while adding repository {Owner}/{Name}: {Message}. Stack: {StackTrace}",
100+
repo.Owner ?? "NULL", repo.RepoName ?? "NULL", ex.Message, ex.StackTrace);
66101
// Continue with other repositories even if one fails
67102
}
68103
}
69104

70-
_logger.LogInformation("Successfully added {Count} out of {Total} repositories.",
105+
_logger.LogInformation("=== COMPLETED AddMultipleRepositoriesCommandHandler ===");
106+
_logger.LogInformation("Final result: Successfully added {Count} out of {Total} repositories.",
71107
addedRepositories.Count, request.Repositories.Count());
108+
_logger.LogInformation("Repository IDs added: {Ids}",
109+
string.Join(", ", addedRepositories.Select(r => $"{r.Owner}/{r.Name} ({r.Id})")));
72110

73111
return addedRepositories;
74112
}

src/PoRepoLineTracker.Client/Pages/AddRepository.razor

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,17 @@
245245

246246
try
247247
{
248+
Logger.LogInformation("=== START AddSelectedRepositories ===");
249+
Logger.LogInformation("Number of selected repositories: {Count}", pageState.SelectedRepositories.Count);
250+
251+
// Log each selected repository
252+
for (int i = 0; i < pageState.SelectedRepositories.Count; i++)
253+
{
254+
var repo = pageState.SelectedRepositories[i];
255+
Logger.LogInformation("Selected Repo [{Index}]: FullName='{FullName}', CloneUrl='{CloneUrl}'",
256+
i, repo.FullName, repo.CloneUrl);
257+
}
258+
248259
// Step 1: Prepare repository data (25%)
249260
pageState.SetProgress($"Preparing {pageState.SelectedRepositories.Count} repositories...", 25);
250261
StateHasChanged();
@@ -253,6 +264,9 @@
253264
var repositoriesToAdd = pageState.SelectedRepositories.Select(repo =>
254265
{
255266
var fullNameParts = repo.FullName.Split('/');
267+
Logger.LogInformation("Splitting FullName '{FullName}' into Owner='{Owner}' and RepoName='{RepoName}'",
268+
repo.FullName, fullNameParts[0], fullNameParts[1]);
269+
256270
return new BulkRepositoryDto
257271
{
258272
Owner = fullNameParts[0],
@@ -261,14 +275,21 @@
261275
};
262276
}).ToList();
263277

264-
Logger.LogInformation("About to add {Count} repositories: {Repositories}",
265-
repositoriesToAdd.Count,
266-
string.Join(", ", repositoriesToAdd.Select(r => $"{r.Owner}/{r.RepoName}")));
278+
Logger.LogInformation("Prepared {Count} repositories for API call", repositoriesToAdd.Count);
279+
280+
// Log detailed info about what we're sending
281+
for (int i = 0; i < repositoriesToAdd.Count; i++)
282+
{
283+
var repo = repositoriesToAdd[i];
284+
Logger.LogInformation("Sending Repo [{Index}]: Owner='{Owner}', RepoName='{RepoName}', CloneUrl='{CloneUrl}'",
285+
i, repo.Owner, repo.RepoName, repo.CloneUrl);
286+
}
267287

268288
// Step 2: Adding to database (50%)
269289
pageState.SetProgress("Adding repositories to database...", 50);
270290
StateHasChanged();
271291

292+
Logger.LogInformation("Making POST request to /api/repositories/bulk with {Count} repositories", repositoriesToAdd.Count);
272293
var response = await Http.PostAsJsonAsync("/api/repositories/bulk", repositoriesToAdd);
273294

274295
Logger.LogInformation("Bulk repository add response: Status={StatusCode}", response.StatusCode);
@@ -280,8 +301,25 @@
280301
StateHasChanged();
281302
await Task.Delay(500);
282303

304+
Logger.LogInformation("Reading response content as JSON...");
283305
var addedRepos = await response.Content.ReadFromJsonAsync<List<GitHubRepository>>();
284306

307+
Logger.LogInformation("API returned {Count} repositories", addedRepos?.Count ?? 0);
308+
309+
if (addedRepos != null && addedRepos.Any())
310+
{
311+
for (int i = 0; i < addedRepos.Count; i++)
312+
{
313+
var repo = addedRepos[i];
314+
Logger.LogInformation("Returned Repo [{Index}]: {Owner}/{Name} (ID: {Id})",
315+
i, repo.Owner, repo.Name, repo.Id);
316+
}
317+
}
318+
else
319+
{
320+
Logger.LogWarning("API returned ZERO repositories! This is the problem!");
321+
}
322+
285323
// Step 4: Complete (100%)
286324
pageState.SetProgress("Complete! Repositories are now being analyzed.", 100);
287325
StateHasChanged();

0 commit comments

Comments
 (0)