<?php namespace Laravel\Pulse\Contracts; use Carbon\CarbonInterval; use Illuminate\Support\Collection; interface Storage { /** * Store the items. * * @param \Illuminate\Support\Collection<int, \Laravel\Pulse\Entry|\Laravel\Pulse\Value> $items */ public function store(Collection $items): void; /** * Trim the storage. */ public function trim(): void; /** * Purge the storage. * * @param list<string> $types */ public function purge(?array $types = null): void; /** * Retrieve values for the given type. * * @param list<string> $keys * @return \Illuminate\Support\Collection<string, object{ * timestamp: int, * key: string, * value: string * }> */ public function values(string $type, ?array $keys = null): Collection; /** * Retrieve aggregate values for plotting on a graph. * * @param list<string> $types * @param 'count'|'min'|'max'|'sum'|'avg' $aggregate * @return \Illuminate\Support\Collection<string, \Illuminate\Support\Collection<string, \Illuminate\Support\Collection<string, int|null>>> */ public function graph(array $types, string $aggregate, CarbonInterval $interval): Collection; /** * Retrieve aggregate values for the given type. * * @param 'count'|'min'|'max'|'sum'|'avg'|list<'count'|'min'|'max'|'sum'|'avg'> $aggregates * @return \Illuminate\Support\Collection<int, object{ * key: string, * min?: int, * max?: int, * sum?: int, * avg?: int, * count?: int * }> */ public function aggregate( string $type, string|array $aggregates, CarbonInterval $interval, ?string $orderBy = null, string $direction = 'desc', int $limit = 101, ): Collection; /** * Retrieve aggregate values for the given types. * * @param string|list<string> $types * @param 'count'|'min'|'max'|'sum'|'avg' $aggregate * @return \Illuminate\Support\Collection<int, object> */ public function aggregateTypes( string|array $types, string $aggregate, CarbonInterval $interval, ?string $orderBy = null, string $direction = 'desc', int $limit = 101, ): Collection; /** * Retrieve an aggregate total for the given types. * * @param string|list<string> $types * @param 'count'|'min'|'max'|'sum'|'avg' $aggregate * @return float|\Illuminate\Support\Collection<string, int> */ public function aggregateTotal( array|string $types, string $aggregate, CarbonInterval $interval, ): float|Collection; }