import { Nullable, ObjectLike } from '@mlytics/core-ts/core/type/basic'; import { TimeSeriesDataLike } from '../../../model/service/metrics'; import { HTTPDownloadRecord, P2PDownloadRecord } from './record'; import { HTTPDownloadAggregationReport, P2PDownloadAggregationReport } from './report'; type DomainMetrics = { id?: string; kind: string; type: string; download: { count: { usage: { dataset: TimeSeriesData[]; pulse: { dataset: TimeSeriesData[]; }; cumulation: { dataset: TimeSeriesData[]; }; }; success: { dataset: TimeSeriesData[]; pulse: { dataset: TimeSeriesData[]; }; cumulation: { dataset: TimeSeriesData[]; }; }; failure: { dataset: TimeSeriesData[]; pulse: { dataset: TimeSeriesData[]; }; cumulation: { dataset: TimeSeriesData[]; }; }; }; outcome: { dataset: TimeSeriesData[]; }; traffic: { dataset: TimeSeriesData[]; pulse: { dataset: TimeSeriesData[]; }; cumulation: { dataset: TimeSeriesData[]; }; }; bandwidth: { dataset: TimeSeriesData[]; wma: { dataset: TimeSeriesData[]; }; }; }; }; type CDNMetrics = DomainMetrics & { id: string; name: string; domain: string; isEnabled: boolean; download: { meanBandwidth: { dataset: TimeSeriesData[]; last: { dataset: TimeSeriesData[]; }; }; meanAvailability: { dataset: TimeSeriesData[]; last: { dataset: TimeSeriesData[]; }; }; currentScore: { dataset: TimeSeriesData[]; last: { dataset: TimeSeriesData[]; }; }; }; }; type OriginMetrics = DomainMetrics; type PeerMetrics = { download: { count: { usage: { dataset: TimeSeriesData[]; pulse: { dataset: TimeSeriesData[]; }; cumulation: { dataset: TimeSeriesData[]; }; }; }; traffic: { dataset: TimeSeriesData[]; pulse: { dataset: TimeSeriesData[]; }; cumulation: { dataset: TimeSeriesData[]; }; }; bandwidth: { dataset: TimeSeriesData[]; wma: { dataset: TimeSeriesData[]; }; }; }; }; type TrackerMetrics = { peerID: Nullable; isAvailable: boolean; }; type NodeMetrics = { peerID: Nullable; isAvailable: boolean; }; type SwarmMetrics = { swarmID: string; swarmURI: string; isAvailable: boolean; users: ObjectLike; }; type UserMetrics = PeerMetrics & { peerID: string; isAvailable: boolean; }; type SourceMetrics = { http: { download: { records: HTTPDownloadRecord[]; }; }; p2p: { download: { records: P2PDownloadRecord[]; }; }; }; type ReportMetrics = { http: { download: { aggregation: { reports: HTTPDownloadAggregationReport[]; }; }; }; p2p: { download: { aggregation: { reports: P2PDownloadAggregationReport[]; }; }; }; }; type TimeSeriesData = TimeSeriesDataLike & { value: Value; }; export { DomainMetrics, CDNMetrics, OriginMetrics, PeerMetrics, TrackerMetrics, NodeMetrics, SwarmMetrics, UserMetrics, SourceMetrics, ReportMetrics, TimeSeriesData };