diff --git a/laravel-app/app/Http/Controllers/DashboardController.php b/laravel-app/app/Http/Controllers/DashboardController.php
index 30cca09..e50ee66 100644
--- a/laravel-app/app/Http/Controllers/DashboardController.php
+++ b/laravel-app/app/Http/Controllers/DashboardController.php
@@ -18,20 +18,12 @@ class DashboardController extends Controller
{
$stats = $this->statsService->getDashboardStats();
$dailyUsage = $this->statsService->getDailyUsageChart(30);
- $topUsers = $this->statsService->getTopUsers(5);
$providerStats = $this->statsService->getUsageByProvider(30);
- $modelStats = $this->statsService->getUsageByModel(30);
- $costTrends = $this->statsService->getCostTrends(30);
- $errorStats = $this->statsService->getErrorStats(30);
return view('dashboard', compact(
'stats',
'dailyUsage',
- 'topUsers',
- 'providerStats',
- 'modelStats',
- 'costTrends',
- 'errorStats'
+ 'providerStats'
));
}
diff --git a/laravel-app/app/Models/GatewayUser.php b/laravel-app/app/Models/GatewayUser.php
index 34edb0c..b5c344e 100644
--- a/laravel-app/app/Models/GatewayUser.php
+++ b/laravel-app/app/Models/GatewayUser.php
@@ -52,6 +52,11 @@ class GatewayUser extends Model implements Authenticatable
return $this->hasMany(UsageLog::class, 'gateway_user_id', 'user_id');
}
+ public function llmRequests()
+ {
+ return $this->hasMany(LlmRequest::class, 'gateway_user_id', 'user_id');
+ }
+
// Scopes
public function scopeActive($query)
{
diff --git a/laravel-app/app/Models/LlmRequest.php b/laravel-app/app/Models/LlmRequest.php
index a494ba6..343097b 100644
--- a/laravel-app/app/Models/LlmRequest.php
+++ b/laravel-app/app/Models/LlmRequest.php
@@ -8,7 +8,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
class LlmRequest extends Model
{
protected $fillable = [
- 'user_id',
+ 'gateway_user_id',
'provider',
'model',
'request_payload',
@@ -41,9 +41,9 @@ class LlmRequest extends Model
'http_status' => 'integer',
];
- public function user(): BelongsTo
+ public function gatewayUser(): BelongsTo
{
- return $this->belongsTo(User::class);
+ return $this->belongsTo(GatewayUser::class, 'gateway_user_id', 'user_id');
}
public function isSuccess(): bool
diff --git a/laravel-app/app/Models/User.php b/laravel-app/app/Models/User.php
index 541cebc..273c2f9 100644
--- a/laravel-app/app/Models/User.php
+++ b/laravel-app/app/Models/User.php
@@ -69,12 +69,4 @@ class User extends Authenticatable
{
return $this->hasMany(UserProviderCredential::class);
}
-
- /**
- * Get the user's LLM requests
- */
- public function llmRequests()
- {
- return $this->hasMany(LlmRequest::class);
- }
}
diff --git a/laravel-app/app/Services/StatisticsService.php b/laravel-app/app/Services/StatisticsService.php
index 2841c78..7b610a2 100644
--- a/laravel-app/app/Services/StatisticsService.php
+++ b/laravel-app/app/Services/StatisticsService.php
@@ -3,7 +3,7 @@
namespace App\Services;
use App\Models\LlmRequest;
-use App\Models\User;
+use App\Models\GatewayUser;
use App\Models\UserProviderCredential;
use Illuminate\Support\Facades\DB;
@@ -15,8 +15,9 @@ class StatisticsService
public function getDashboardStats(): array
{
return [
- 'total_users' => User::count(),
- 'active_credentials' => UserProviderCredential::where('is_active', true)->count(),
+ 'total_gateway_users' => GatewayUser::count(),
+ 'active_gateway_users' => GatewayUser::where('blocked', false)->count(),
+ 'blocked_gateway_users' => GatewayUser::where('blocked', true)->count(),
'total_requests_today' => LlmRequest::whereDate('created_at', today())->count(),
'total_spend_today' => LlmRequest::whereDate('created_at', today())->sum('total_cost') ?? 0,
'total_tokens_today' => LlmRequest::whereDate('created_at', today())->sum('total_tokens') ?? 0,
@@ -73,11 +74,11 @@ class StatisticsService
}
/**
- * Get top users by spend
+ * Get top gateway users by spend
*/
public function getTopUsers(int $limit = 10)
{
- return User::select('users.*')
+ return GatewayUser::select('gateway_users.*')
->withCount('llmRequests')
->withSum('llmRequests as total_cost', 'total_cost')
->withSum('llmRequests as total_tokens', 'total_tokens')
@@ -91,18 +92,18 @@ class StatisticsService
*/
public function getRecentActivity(int $limit = 20)
{
- return LlmRequest::with('user')
+ return LlmRequest::with('gatewayUser')
->orderByDesc('created_at')
->limit($limit)
->get();
}
/**
- * Get user statistics
+ * Get gateway user statistics
*/
- public function getUserStatistics(int $userId, int $days = 30)
+ public function getGatewayUserStatistics(string $gatewayUserId, int $days = 30)
{
- return LlmRequest::where('user_id', $userId)
+ return LlmRequest::where('gateway_user_id', $gatewayUserId)
->where('created_at', '>=', now()->subDays($days))
->where('status', 'success')
->selectRaw('
diff --git a/laravel-app/resources/views/budgets/create.blade.php b/laravel-app/resources/views/budgets/create.blade.php
deleted file mode 100644
index 0db825d..0000000
--- a/laravel-app/resources/views/budgets/create.blade.php
+++ /dev/null
@@ -1,113 +0,0 @@
- No budget templates found. Create your first budget template to get started. No users assigned to this budget yet.
- Create Budget Template
-
-
- Edit Budget Template
-
-
- Budget Templates
-
-
- Create Budget Template
-
-
-
-
-
-
-
-
-
- @foreach($budgets as $budget)
-
- Budget ID
-
-
- Max Budget
-
-
- Duration
-
-
- Assigned Users
-
-
- Created
-
-
- Actions
-
-
-
- @endforeach
-
-
- {{ $budget->budget_id }}
-
-
- {{ $budget->max_budget_formatted }}
-
-
- {{ $budget->duration_human }}
-
-
-
- {{ $budget->gateway_users_count }} users
-
-
-
- {{ $budget->created_at->format('M d, Y') }}
-
-
- View
- Edit
-
-
-
- Budget Details
-
- Budget Information
-
-
- Assigned Users ({{ $budget->gatewayUsers()->count() }})
-
- @if($budget->gatewayUsers()->count() > 0)
-
-
-
- @else
-
-
-
-
- @foreach($budget->gatewayUsers as $user)
- User ID
- Alias
- Current Spend
- Budget Started
- Next Reset
- Actions
-
-
- @endforeach
-
-
- {{ $user->user_id }}
-
-
- {{ $user->alias ?? '-' }}
-
-
-
- {{ $user->spend_formatted }}
-
- / {{ $budget->max_budget_formatted }}
-
-
- {{ $user->budget_started_at?->format('M d, Y') ?? '-' }}
-
-
- {{ $user->next_budget_reset_at?->format('M d, Y') ?? 'Never' }}
-
-
- View
-
- Assign Users to Budget
-
-
-
Total Users
+Gateway Users
- {{ number_format($stats['total_users']) }} + {{ number_format($stats['total_gateway_users']) }}
-- {{ $stats['active_credentials'] }} active credentials +
+ {{ $stats['active_gateway_users'] }} active
- {{ $user->name }} -
-- {{ number_format($user->llm_requests_count ?? 0) }} requests -
-- ${{ number_format($user->total_cost ?? 0, 2) }} -
-- {{ number_format($user->total_tokens ?? 0) }} tokens -
-- No usage data yet -
- @endforelse -| Model | -Provider | -Requests | -Tokens | -Cost | ++ Provider + | ++ Requests + | ++ Total Cost + | ++ Total Tokens + |
|---|---|---|---|---|---|---|---|---|
| - {{ $model->model }} - | -- - {{ ucfirst($model->provider) }} + | + + {{ $provider->provider }} | -- {{ number_format($model->count) }} + | + {{ number_format($provider->count) }} | -- {{ number_format($model->tokens ?? 0) }} + | + ${{ number_format($provider->total_cost, 2) }} | -- ${{ number_format($model->total_cost ?? 0, 4) }} + | + {{ number_format($provider->total_tokens) }} |
| - No usage data yet + | + No data available yet | |||||||