Ship production optimization M1-M12.5A: queues, metrics, HTTP observability, and vector search reliability.
Keep similar-ai from tripping the global circuit on a lone URL 502, clamp Qdrant search to 100, and add Server-Timing plus slow-request logging. Studio shared props, Academy S3 exists caching, heat chunking, and Redis/scheduler hygiene stay in this rollout.
This commit is contained in:
@@ -5,8 +5,8 @@ declare(strict_types=1);
|
||||
namespace App\Services;
|
||||
|
||||
use App\Models\Artwork;
|
||||
use App\Models\ArtworkMetricSnapshotHourly;
|
||||
use App\Models\Group;
|
||||
use App\Services\Metrics\ArtworkHourlySnapshotWindow;
|
||||
use App\Models\Leaderboard;
|
||||
use App\Models\Story;
|
||||
use App\Models\StoryLike;
|
||||
@@ -28,6 +28,7 @@ class LeaderboardService
|
||||
|
||||
public function __construct(
|
||||
private readonly GroupReputationService $groupReputation,
|
||||
private readonly ArtworkHourlySnapshotWindow $snapshotWindow,
|
||||
) {
|
||||
}
|
||||
|
||||
@@ -835,29 +836,7 @@ class LeaderboardService
|
||||
|
||||
private function artworkSnapshotDeltas(CarbonImmutable $start): \Illuminate\Database\Query\Builder
|
||||
{
|
||||
return ArtworkMetricSnapshotHourly::query()
|
||||
->from('artwork_metric_snapshots_hourly as snapshots')
|
||||
->where('snapshots.bucket_hour', '>=', $start)
|
||||
->select([
|
||||
'snapshots.artwork_id',
|
||||
DB::raw($this->nonNegativeSnapshotDelta('views_count', 'views_delta')),
|
||||
DB::raw($this->nonNegativeSnapshotDelta('downloads_count', 'downloads_delta')),
|
||||
DB::raw($this->nonNegativeSnapshotDelta('favourites_count', 'favourites_delta')),
|
||||
DB::raw($this->nonNegativeSnapshotDelta('comments_count', 'comments_delta')),
|
||||
])
|
||||
->groupBy('snapshots.artwork_id')
|
||||
->toBase();
|
||||
}
|
||||
|
||||
private function nonNegativeSnapshotDelta(string $column, string $alias): string
|
||||
{
|
||||
$delta = sprintf('MAX(snapshots.%1$s) - MIN(snapshots.%1$s)', $column);
|
||||
|
||||
if (DB::connection()->getDriverName() === 'sqlite') {
|
||||
return sprintf('CASE WHEN %1$s > 0 THEN %1$s ELSE 0 END as %2$s', $delta, $alias);
|
||||
}
|
||||
|
||||
return sprintf('GREATEST(%s, 0) as %s', $delta, $alias);
|
||||
return $this->snapshotWindow->artworkPeriodDeltas($start);
|
||||
}
|
||||
|
||||
private function creatorEntities(array $ids): array
|
||||
|
||||
Reference in New Issue
Block a user