Compare commits
11 Commits
live-table
...
dean/usage
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
35c7c23ba9 | ||
|
|
40c4b82a59 | ||
| 9ebe2e61df | |||
|
|
6f356f9535 | ||
|
|
5c0ff8c31b | ||
|
|
582c20170d | ||
| dc02fd8387 | |||
| ef4782fc14 | |||
| 905a1ca6db | |||
| 6f63189703 | |||
| 958057764c |
258
src/index.tsx
258
src/index.tsx
@@ -260,6 +260,15 @@ export type ClusterAssignmentInput = {
|
||||
userId?: InputMaybe<Scalars["Int"]["input"]>;
|
||||
};
|
||||
|
||||
export type CohortStatsGql = {
|
||||
__typename?: "CohortStatsGQL";
|
||||
activated7d: Scalars["Int"]["output"];
|
||||
activatedNotPaid7d: Scalars["Int"]["output"];
|
||||
paid7d: Scalars["Int"]["output"];
|
||||
signups: Scalars["Int"]["output"];
|
||||
weekStart: Scalars["Date"]["output"];
|
||||
};
|
||||
|
||||
export type CommentGql = {
|
||||
__typename?: "CommentGQL";
|
||||
id: Scalars["Int"]["output"];
|
||||
@@ -2299,6 +2308,20 @@ export type FloatRangeFilter = {
|
||||
lessThanInclusive?: Scalars["Boolean"]["input"];
|
||||
};
|
||||
|
||||
export type FunnelStatsGql = {
|
||||
__typename?: "FunnelStatsGQL";
|
||||
activationActivated: Scalars["Int"]["output"];
|
||||
activationCohort: Scalars["Int"]["output"];
|
||||
eraPaying: Scalars["Int"]["output"];
|
||||
eraSignups: Scalars["Int"]["output"];
|
||||
freemiumEpoch: Scalars["Date"]["output"];
|
||||
newPaid7d: Scalars["Int"]["output"];
|
||||
newPaid30d: Scalars["Int"]["output"];
|
||||
payingUsers: Scalars["Int"]["output"];
|
||||
retentionPrevActive: Scalars["Int"]["output"];
|
||||
retentionReturned: Scalars["Int"]["output"];
|
||||
};
|
||||
|
||||
export type GameTypeTagMetric = {
|
||||
__typename?: "GameTypeTagMetric";
|
||||
madeShots: Scalars["Int"]["output"];
|
||||
@@ -3018,6 +3041,12 @@ export type ProcessingFailedErr = {
|
||||
processing: VideoProcessingGql;
|
||||
};
|
||||
|
||||
export type ProcessingStatusCountGql = {
|
||||
__typename?: "ProcessingStatusCountGQL";
|
||||
count: Scalars["Int"]["output"];
|
||||
status: Scalars["String"]["output"];
|
||||
};
|
||||
|
||||
export enum ProcessingStatusEnum {
|
||||
Created = "CREATED",
|
||||
Failed = "FAILED",
|
||||
@@ -3065,6 +3094,7 @@ export type Query = {
|
||||
getShotsWithMetadata: GetShotsResult;
|
||||
getStorageStatus?: Maybe<StorageStatusGql>;
|
||||
getTableState: TableStateGql;
|
||||
getUsageStats: UsageStatsGql;
|
||||
getUser?: Maybe<UserGql>;
|
||||
getUserRelationshipsMatching: UserRelationshipsResult;
|
||||
getUserSubscriptionStatus: UserSubscriptionStatusGql;
|
||||
@@ -3229,6 +3259,10 @@ export type QueryGetTableStateArgs = {
|
||||
useHomography?: InputMaybe<HomographyInputGql>;
|
||||
};
|
||||
|
||||
export type QueryGetUsageStatsArgs = {
|
||||
days?: Scalars["Int"]["input"];
|
||||
};
|
||||
|
||||
export type QueryGetUserArgs = {
|
||||
userId: Scalars["Int"]["input"];
|
||||
};
|
||||
@@ -3338,6 +3372,14 @@ export type QuotaStatusGql = {
|
||||
tierName: Scalars["String"]["output"];
|
||||
};
|
||||
|
||||
export type RgbColorGql = {
|
||||
__typename?: "RGBColorGQL";
|
||||
b: Scalars["Int"]["output"];
|
||||
g: Scalars["Int"]["output"];
|
||||
hex: Scalars["String"]["output"];
|
||||
r: Scalars["Int"]["output"];
|
||||
};
|
||||
|
||||
export enum ReactionEnum {
|
||||
Bullseye = "BULLSEYE",
|
||||
Heart = "HEART",
|
||||
@@ -3803,6 +3845,7 @@ export type SyncAppleSubscriptionResultGql = {
|
||||
export type TableStateGql = {
|
||||
__typename?: "TableStateGQL";
|
||||
homography?: Maybe<HomographyInfoGql>;
|
||||
identifierToColor: Array<Maybe<RgbColorGql>>;
|
||||
identifierToPosition: Array<Array<Scalars["Float"]["output"]>>;
|
||||
};
|
||||
|
||||
@@ -3935,6 +3978,37 @@ export type UploadStreamGql = {
|
||||
uploadsCompleted: Scalars["Int"]["output"];
|
||||
};
|
||||
|
||||
export type UsageStatsDailyGql = {
|
||||
__typename?: "UsageStatsDailyGQL";
|
||||
activeUsers: Scalars["Int"]["output"];
|
||||
day: Scalars["Date"]["output"];
|
||||
newUsers: Scalars["Int"]["output"];
|
||||
sessions: Scalars["Int"]["output"];
|
||||
shots: Scalars["Int"]["output"];
|
||||
};
|
||||
|
||||
export type UsageStatsGql = {
|
||||
__typename?: "UsageStatsGQL";
|
||||
cohorts: Array<CohortStatsGql>;
|
||||
daily: Array<UsageStatsDailyGql>;
|
||||
funnel: FunnelStatsGql;
|
||||
processingLast24h: Array<ProcessingStatusCountGql>;
|
||||
totalRuns: Scalars["Int"]["output"];
|
||||
totalShots: Scalars["Int"]["output"];
|
||||
totalUsers: Scalars["Int"]["output"];
|
||||
totalVideos: Scalars["Int"]["output"];
|
||||
windows: Array<UsageStatsWindowGql>;
|
||||
};
|
||||
|
||||
export type UsageStatsWindowGql = {
|
||||
__typename?: "UsageStatsWindowGQL";
|
||||
activeUsers: Scalars["Int"]["output"];
|
||||
label: Scalars["String"]["output"];
|
||||
newUsers: Scalars["Int"]["output"];
|
||||
sessions: Scalars["Int"]["output"];
|
||||
shots: Scalars["Int"]["output"];
|
||||
};
|
||||
|
||||
export type UserGql = {
|
||||
__typename?: "UserGQL";
|
||||
activeVideoId?: Maybe<Scalars["Int"]["output"]>;
|
||||
@@ -6736,6 +6810,10 @@ export type GetTableStateQuery = {
|
||||
getTableState: {
|
||||
__typename?: "TableStateGQL";
|
||||
identifierToPosition: Array<Array<number>>;
|
||||
identifierToColor: Array<{
|
||||
__typename?: "RGBColorGQL";
|
||||
hex: string;
|
||||
} | null>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -6752,6 +6830,10 @@ export type GetLiveTableStateQuery = {
|
||||
tableState: {
|
||||
__typename?: "TableStateGQL";
|
||||
identifierToPosition: Array<Array<number>>;
|
||||
identifierToColor: Array<{
|
||||
__typename?: "RGBColorGQL";
|
||||
hex: string;
|
||||
} | null>;
|
||||
homography?: {
|
||||
__typename?: "HomographyInfoGQL";
|
||||
id: number;
|
||||
@@ -7378,6 +7460,63 @@ export type DeleteTagsMutation = {
|
||||
deleteTags: boolean;
|
||||
};
|
||||
|
||||
export type GetUsageStatsQueryVariables = Exact<{
|
||||
days?: Scalars["Int"]["input"];
|
||||
}>;
|
||||
|
||||
export type GetUsageStatsQuery = {
|
||||
__typename?: "Query";
|
||||
getUsageStats: {
|
||||
__typename?: "UsageStatsGQL";
|
||||
totalUsers: number;
|
||||
totalVideos: number;
|
||||
totalShots: number;
|
||||
totalRuns: number;
|
||||
funnel: {
|
||||
__typename?: "FunnelStatsGQL";
|
||||
freemiumEpoch: any;
|
||||
eraSignups: number;
|
||||
eraPaying: number;
|
||||
activationCohort: number;
|
||||
activationActivated: number;
|
||||
payingUsers: number;
|
||||
newPaid7d: number;
|
||||
newPaid30d: number;
|
||||
retentionPrevActive: number;
|
||||
retentionReturned: number;
|
||||
};
|
||||
cohorts: Array<{
|
||||
__typename?: "CohortStatsGQL";
|
||||
weekStart: any;
|
||||
signups: number;
|
||||
activated7d: number;
|
||||
paid7d: number;
|
||||
activatedNotPaid7d: number;
|
||||
}>;
|
||||
windows: Array<{
|
||||
__typename?: "UsageStatsWindowGQL";
|
||||
label: string;
|
||||
newUsers: number;
|
||||
activeUsers: number;
|
||||
sessions: number;
|
||||
shots: number;
|
||||
}>;
|
||||
daily: Array<{
|
||||
__typename?: "UsageStatsDailyGQL";
|
||||
day: any;
|
||||
newUsers: number;
|
||||
activeUsers: number;
|
||||
sessions: number;
|
||||
shots: number;
|
||||
}>;
|
||||
processingLast24h: Array<{
|
||||
__typename?: "ProcessingStatusCountGQL";
|
||||
status: string;
|
||||
count: number;
|
||||
}>;
|
||||
};
|
||||
};
|
||||
|
||||
export type GetProfileImageUploadLinkMutationVariables = Exact<{
|
||||
fileExt?: InputMaybe<Scalars["String"]["input"]>;
|
||||
}>;
|
||||
@@ -14417,6 +14556,9 @@ export const GetTableStateDocument = gql`
|
||||
useHomography: $useHomography
|
||||
) {
|
||||
identifierToPosition
|
||||
identifierToColor {
|
||||
hex
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
@@ -14495,6 +14637,9 @@ export const GetLiveTableStateDocument = gql`
|
||||
frameIndex
|
||||
tableState {
|
||||
identifierToPosition
|
||||
identifierToColor {
|
||||
hex
|
||||
}
|
||||
homography {
|
||||
...HomographyInfo
|
||||
}
|
||||
@@ -15646,6 +15791,119 @@ export type DeleteTagsMutationOptions = Apollo.BaseMutationOptions<
|
||||
DeleteTagsMutation,
|
||||
DeleteTagsMutationVariables
|
||||
>;
|
||||
export const GetUsageStatsDocument = gql`
|
||||
query getUsageStats($days: Int! = 30) {
|
||||
getUsageStats(days: $days) {
|
||||
funnel {
|
||||
freemiumEpoch
|
||||
eraSignups
|
||||
eraPaying
|
||||
activationCohort
|
||||
activationActivated
|
||||
payingUsers
|
||||
newPaid7d
|
||||
newPaid30d
|
||||
retentionPrevActive
|
||||
retentionReturned
|
||||
}
|
||||
cohorts {
|
||||
weekStart
|
||||
signups
|
||||
activated7d
|
||||
paid7d
|
||||
activatedNotPaid7d
|
||||
}
|
||||
totalUsers
|
||||
totalVideos
|
||||
totalShots
|
||||
totalRuns
|
||||
windows {
|
||||
label
|
||||
newUsers
|
||||
activeUsers
|
||||
sessions
|
||||
shots
|
||||
}
|
||||
daily {
|
||||
day
|
||||
newUsers
|
||||
activeUsers
|
||||
sessions
|
||||
shots
|
||||
}
|
||||
processingLast24h {
|
||||
status
|
||||
count
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
/**
|
||||
* __useGetUsageStatsQuery__
|
||||
*
|
||||
* To run a query within a React component, call `useGetUsageStatsQuery` and pass it any options that fit your needs.
|
||||
* When your component renders, `useGetUsageStatsQuery` returns an object from Apollo Client that contains loading, error, and data properties
|
||||
* you can use to render your UI.
|
||||
*
|
||||
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
|
||||
*
|
||||
* @example
|
||||
* const { data, loading, error } = useGetUsageStatsQuery({
|
||||
* variables: {
|
||||
* days: // value for 'days'
|
||||
* },
|
||||
* });
|
||||
*/
|
||||
export function useGetUsageStatsQuery(
|
||||
baseOptions?: Apollo.QueryHookOptions<
|
||||
GetUsageStatsQuery,
|
||||
GetUsageStatsQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useQuery<GetUsageStatsQuery, GetUsageStatsQueryVariables>(
|
||||
GetUsageStatsDocument,
|
||||
options,
|
||||
);
|
||||
}
|
||||
export function useGetUsageStatsLazyQuery(
|
||||
baseOptions?: Apollo.LazyQueryHookOptions<
|
||||
GetUsageStatsQuery,
|
||||
GetUsageStatsQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useLazyQuery<GetUsageStatsQuery, GetUsageStatsQueryVariables>(
|
||||
GetUsageStatsDocument,
|
||||
options,
|
||||
);
|
||||
}
|
||||
export function useGetUsageStatsSuspenseQuery(
|
||||
baseOptions?: Apollo.SuspenseQueryHookOptions<
|
||||
GetUsageStatsQuery,
|
||||
GetUsageStatsQueryVariables
|
||||
>,
|
||||
) {
|
||||
const options = { ...defaultOptions, ...baseOptions };
|
||||
return Apollo.useSuspenseQuery<
|
||||
GetUsageStatsQuery,
|
||||
GetUsageStatsQueryVariables
|
||||
>(GetUsageStatsDocument, options);
|
||||
}
|
||||
export type GetUsageStatsQueryHookResult = ReturnType<
|
||||
typeof useGetUsageStatsQuery
|
||||
>;
|
||||
export type GetUsageStatsLazyQueryHookResult = ReturnType<
|
||||
typeof useGetUsageStatsLazyQuery
|
||||
>;
|
||||
export type GetUsageStatsSuspenseQueryHookResult = ReturnType<
|
||||
typeof useGetUsageStatsSuspenseQuery
|
||||
>;
|
||||
export type GetUsageStatsQueryResult = Apollo.QueryResult<
|
||||
GetUsageStatsQuery,
|
||||
GetUsageStatsQueryVariables
|
||||
>;
|
||||
export const GetProfileImageUploadLinkDocument = gql`
|
||||
mutation getProfileImageUploadLink($fileExt: String = ".png") {
|
||||
getProfileImageUploadLink(fileExt: $fileExt) {
|
||||
|
||||
@@ -9,6 +9,9 @@ query GetTableState(
|
||||
useHomography: $useHomography
|
||||
) {
|
||||
identifierToPosition
|
||||
identifierToColor {
|
||||
hex
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +21,9 @@ query GetLiveTableState($videoId: Int!) {
|
||||
frameIndex
|
||||
tableState {
|
||||
identifierToPosition
|
||||
identifierToColor {
|
||||
hex
|
||||
}
|
||||
homography {
|
||||
...HomographyInfo
|
||||
}
|
||||
|
||||
45
src/operations/usage_stats.gql
Normal file
45
src/operations/usage_stats.gql
Normal file
@@ -0,0 +1,45 @@
|
||||
query getUsageStats($days: Int! = 30) {
|
||||
getUsageStats(days: $days) {
|
||||
funnel {
|
||||
freemiumEpoch
|
||||
eraSignups
|
||||
eraPaying
|
||||
activationCohort
|
||||
activationActivated
|
||||
payingUsers
|
||||
newPaid7d
|
||||
newPaid30d
|
||||
retentionPrevActive
|
||||
retentionReturned
|
||||
}
|
||||
cohorts {
|
||||
weekStart
|
||||
signups
|
||||
activated7d
|
||||
paid7d
|
||||
activatedNotPaid7d
|
||||
}
|
||||
totalUsers
|
||||
totalVideos
|
||||
totalShots
|
||||
totalRuns
|
||||
windows {
|
||||
label
|
||||
newUsers
|
||||
activeUsers
|
||||
sessions
|
||||
shots
|
||||
}
|
||||
daily {
|
||||
day
|
||||
newUsers
|
||||
activeUsers
|
||||
sessions
|
||||
shots
|
||||
}
|
||||
processingLast24h {
|
||||
status
|
||||
count
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -100,6 +100,7 @@ type Query {
|
||||
countRespectsLimit: Boolean! = false
|
||||
): [ShotGQL!]!
|
||||
getShotsByIds(ids: [Int!]!): [ShotGQL!]!
|
||||
getUsageStats(days: Int! = 30): UsageStatsGQL!
|
||||
getUser(userId: Int!): UserGQL
|
||||
doesUsernameExist(candidateUsername: String!): Boolean!
|
||||
getLoggedInUser: UserGQL
|
||||
@@ -1020,6 +1021,14 @@ type PlayerClusterShotGQL {
|
||||
type TableStateGQL {
|
||||
identifierToPosition: [[Float!]!]!
|
||||
homography: HomographyInfoGQL
|
||||
identifierToColor: [RGBColorGQL]!
|
||||
}
|
||||
|
||||
type RGBColorGQL {
|
||||
r: Int!
|
||||
g: Int!
|
||||
b: Int!
|
||||
hex: String!
|
||||
}
|
||||
|
||||
input HomographyInputGQL {
|
||||
@@ -1160,6 +1169,60 @@ input CreatedAfter @oneOf {
|
||||
createdAt: DateTime
|
||||
}
|
||||
|
||||
type UsageStatsGQL {
|
||||
funnel: FunnelStatsGQL!
|
||||
totalUsers: Int!
|
||||
totalVideos: Int!
|
||||
totalShots: Int!
|
||||
totalRuns: Int!
|
||||
cohorts: [CohortStatsGQL!]!
|
||||
windows: [UsageStatsWindowGQL!]!
|
||||
daily: [UsageStatsDailyGQL!]!
|
||||
processingLast24h: [ProcessingStatusCountGQL!]!
|
||||
}
|
||||
|
||||
type FunnelStatsGQL {
|
||||
freemiumEpoch: Date!
|
||||
eraSignups: Int!
|
||||
eraPaying: Int!
|
||||
activationCohort: Int!
|
||||
activationActivated: Int!
|
||||
payingUsers: Int!
|
||||
newPaid7d: Int!
|
||||
newPaid30d: Int!
|
||||
retentionPrevActive: Int!
|
||||
retentionReturned: Int!
|
||||
}
|
||||
|
||||
type CohortStatsGQL {
|
||||
weekStart: Date!
|
||||
signups: Int!
|
||||
activated7d: Int!
|
||||
paid7d: Int!
|
||||
activatedNotPaid7d: Int!
|
||||
}
|
||||
|
||||
type UsageStatsWindowGQL {
|
||||
label: String!
|
||||
newUsers: Int!
|
||||
activeUsers: Int!
|
||||
sessions: Int!
|
||||
shots: Int!
|
||||
}
|
||||
|
||||
type UsageStatsDailyGQL {
|
||||
day: Date!
|
||||
newUsers: Int!
|
||||
activeUsers: Int!
|
||||
sessions: Int!
|
||||
shots: Int!
|
||||
}
|
||||
|
||||
type ProcessingStatusCountGQL {
|
||||
status: String!
|
||||
count: Int!
|
||||
}
|
||||
|
||||
type UserRelationshipsResult {
|
||||
inquiringUser: UserGQL!
|
||||
relationships: [UserRelationship!]!
|
||||
|
||||
Reference in New Issue
Block a user