fetch single metric
This commit is contained in:
parent
a4e9a23d74
commit
db3c27c7f2
13 changed files with 137 additions and 19 deletions
|
|
@ -1116,10 +1116,13 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => {
|
|||
const authContext = await opts.MetricsAuthGuard(req.headers['authorization'])
|
||||
authCtx = authContext
|
||||
stats.guard = process.hrtime.bigint()
|
||||
stats.validate = stats.guard
|
||||
const request = req.body
|
||||
const error = Types.UsageMetricReqValidate(request)
|
||||
stats.validate = process.hrtime.bigint()
|
||||
if (error !== null) return logErrorAndReturnResponse(error, 'invalid request body', res, logger, { ...info, ...stats, ...authContext }, opts.metricsCallback)
|
||||
const query = req.query
|
||||
const params = req.params
|
||||
const response = await methods.GetUsageMetrics({rpcName:'GetUsageMetrics', ctx:authContext })
|
||||
const response = await methods.GetUsageMetrics({rpcName:'GetUsageMetrics', ctx:authContext , req: request})
|
||||
stats.handle = process.hrtime.bigint()
|
||||
res.json({status: 'OK', ...response})
|
||||
opts.metricsCallback([{ ...info, ...stats, ...authContext }])
|
||||
|
|
|
|||
|
|
@ -494,11 +494,11 @@ export default (params: ClientParams) => ({
|
|||
}
|
||||
return { status: 'ERROR', reason: 'invalid response' }
|
||||
},
|
||||
GetUsageMetrics: async (): Promise<ResultError | ({ status: 'OK' }& Types.UsageMetrics)> => {
|
||||
GetUsageMetrics: async (request: Types.UsageMetricReq): Promise<ResultError | ({ status: 'OK' }& Types.UsageMetrics)> => {
|
||||
const auth = await params.retrieveMetricsAuth()
|
||||
if (auth === null) throw new Error('retrieveMetricsAuth() returned null')
|
||||
let finalRoute = '/api/reports/usage'
|
||||
const { data } = await axios.post(params.baseUrl + finalRoute, {}, { headers: { 'authorization': auth } })
|
||||
const { data } = await axios.post(params.baseUrl + finalRoute, request, { headers: { 'authorization': auth } })
|
||||
if (data.status === 'ERROR' && typeof data.reason === 'string') return data
|
||||
if (data.status === 'OK') {
|
||||
const result = data
|
||||
|
|
|
|||
|
|
@ -422,10 +422,11 @@ export default (params: NostrClientParams, send: (to:string, message: NostrRequ
|
|||
}
|
||||
return { status: 'ERROR', reason: 'invalid response' }
|
||||
},
|
||||
GetUsageMetrics: async (): Promise<ResultError | ({ status: 'OK' }& Types.UsageMetrics)> => {
|
||||
GetUsageMetrics: async (request: Types.UsageMetricReq): Promise<ResultError | ({ status: 'OK' }& Types.UsageMetrics)> => {
|
||||
const auth = await params.retrieveNostrMetricsAuth()
|
||||
if (auth === null) throw new Error('retrieveNostrMetricsAuth() returned null')
|
||||
const nostrRequest: NostrRequest = {}
|
||||
nostrRequest.body = request
|
||||
const data = await send(params.pubDestination, {rpcName:'GetUsageMetrics',authIdentifier:auth, ...nostrRequest })
|
||||
if (data.status === 'ERROR' && typeof data.reason === 'string') return data
|
||||
if (data.status === 'OK') {
|
||||
|
|
|
|||
|
|
@ -805,8 +805,11 @@ export default (methods: Types.ServerMethods, opts: NostrOptions) => {
|
|||
const authContext = await opts.NostrMetricsAuthGuard(req.appId, req.authIdentifier)
|
||||
stats.guard = process.hrtime.bigint()
|
||||
authCtx = authContext
|
||||
stats.validate = stats.guard
|
||||
const response = await methods.GetUsageMetrics({rpcName:'GetUsageMetrics', ctx:authContext })
|
||||
const request = req.body
|
||||
const error = Types.UsageMetricReqValidate(request)
|
||||
stats.validate = process.hrtime.bigint()
|
||||
if (error !== null) return logErrorAndReturnResponse(error, 'invalid request body', res, logger, { ...info, ...stats, ...authCtx }, opts.metricsCallback)
|
||||
const response = await methods.GetUsageMetrics({rpcName:'GetUsageMetrics', ctx:authContext , req: request})
|
||||
stats.handle = process.hrtime.bigint()
|
||||
res({status: 'OK', ...response})
|
||||
opts.metricsCallback([{ ...info, ...stats, ...authContext }])
|
||||
|
|
|
|||
|
|
@ -161,7 +161,7 @@ export type GetPaymentState_Output = ResultError | ({ status: 'OK' } & PaymentSt
|
|||
export type GetSeed_Input = {rpcName:'GetSeed'}
|
||||
export type GetSeed_Output = ResultError | ({ status: 'OK' } & LndSeed)
|
||||
|
||||
export type GetUsageMetrics_Input = {rpcName:'GetUsageMetrics'}
|
||||
export type GetUsageMetrics_Input = {rpcName:'GetUsageMetrics', req: UsageMetricReq}
|
||||
export type GetUsageMetrics_Output = ResultError | ({ status: 'OK' } & UsageMetrics)
|
||||
|
||||
export type GetUserInfo_Input = {rpcName:'GetUserInfo'}
|
||||
|
|
@ -2234,6 +2234,34 @@ export const LnurlWithdrawInfoResponseValidate = (o?: LnurlWithdrawInfoResponse,
|
|||
return null
|
||||
}
|
||||
|
||||
export type MetricsFile = {
|
||||
app_id: string
|
||||
metrics_name: string
|
||||
page: number
|
||||
}
|
||||
export const MetricsFileOptionalFields: [] = []
|
||||
export type MetricsFileOptions = OptionsBaseMessage & {
|
||||
checkOptionalsAreSet?: []
|
||||
app_id_CustomCheck?: (v: string) => boolean
|
||||
metrics_name_CustomCheck?: (v: string) => boolean
|
||||
page_CustomCheck?: (v: number) => boolean
|
||||
}
|
||||
export const MetricsFileValidate = (o?: MetricsFile, opts: MetricsFileOptions = {}, path: string = 'MetricsFile::root.'): Error | null => {
|
||||
if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message')
|
||||
if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null')
|
||||
|
||||
if (typeof o.app_id !== 'string') return new Error(`${path}.app_id: is not a string`)
|
||||
if (opts.app_id_CustomCheck && !opts.app_id_CustomCheck(o.app_id)) return new Error(`${path}.app_id: custom check failed`)
|
||||
|
||||
if (typeof o.metrics_name !== 'string') return new Error(`${path}.metrics_name: is not a string`)
|
||||
if (opts.metrics_name_CustomCheck && !opts.metrics_name_CustomCheck(o.metrics_name)) return new Error(`${path}.metrics_name: custom check failed`)
|
||||
|
||||
if (typeof o.page !== 'number') return new Error(`${path}.page: is not a number`)
|
||||
if (opts.page_CustomCheck && !opts.page_CustomCheck(o.page)) return new Error(`${path}.page: custom check failed`)
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
export type MigrationUpdate = {
|
||||
closure?: ClosureMigration
|
||||
relays?: RelaysMigration
|
||||
|
|
@ -3236,6 +3264,33 @@ export const UsageMetricValidate = (o?: UsageMetric, opts: UsageMetricOptions =
|
|||
return null
|
||||
}
|
||||
|
||||
export type UsageMetricReq = {
|
||||
limit?: number
|
||||
metrics_file?: MetricsFile
|
||||
}
|
||||
export type UsageMetricReqOptionalField = 'limit' | 'metrics_file'
|
||||
export const UsageMetricReqOptionalFields: UsageMetricReqOptionalField[] = ['limit', 'metrics_file']
|
||||
export type UsageMetricReqOptions = OptionsBaseMessage & {
|
||||
checkOptionalsAreSet?: UsageMetricReqOptionalField[]
|
||||
limit_CustomCheck?: (v?: number) => boolean
|
||||
metrics_file_Options?: MetricsFileOptions
|
||||
}
|
||||
export const UsageMetricReqValidate = (o?: UsageMetricReq, opts: UsageMetricReqOptions = {}, path: string = 'UsageMetricReq::root.'): Error | null => {
|
||||
if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message')
|
||||
if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null')
|
||||
|
||||
if ((o.limit || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('limit')) && typeof o.limit !== 'number') return new Error(`${path}.limit: is not a number`)
|
||||
if (opts.limit_CustomCheck && !opts.limit_CustomCheck(o.limit)) return new Error(`${path}.limit: custom check failed`)
|
||||
|
||||
if (typeof o.metrics_file === 'object' || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('metrics_file')) {
|
||||
const metrics_fileErr = MetricsFileValidate(o.metrics_file, opts.metrics_file_Options, `${path}.metrics_file`)
|
||||
if (metrics_fileErr !== null) return metrics_fileErr
|
||||
}
|
||||
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
export type UsageMetricTlv = {
|
||||
available_chunks: number[]
|
||||
base_64_tlvs: string[]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue