Skip to content

Add alternative provider retrieval measurement #571

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
32 changes: 29 additions & 3 deletions api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,15 @@ const createMeasurement = async (req, res, client) => {
validate(measurement, 'stationId', { type: 'string', required: true })
assert(measurement.stationId.match(/^[0-9a-fA-F]{88}$/), 400, 'Invalid Station ID')

if (measurement.alternativeProviderCheck) {
validate(measurement, 'alternativeProviderCheck', { type: 'object', required: false })
validate(measurement.alternativeProviderCheck, 'statusCode', { type: 'number', required: false })
validate(measurement.alternativeProviderCheck, 'timeout', { type: 'boolean', required: false })
validate(measurement.alternativeProviderCheck, 'carTooLarge', { type: 'boolean', required: false })
validate(measurement.alternativeProviderCheck, 'endAt', { type: 'date', required: false })
validate(measurement.alternativeProviderCheck, 'protocol', { type: 'string', required: false })
}

const inetGroup = await mapRequestToInetGroup(client, req)
logNetworkInfo(req.headers, measurement.stationId, recordNetworkInfoTelemetry)

Expand All @@ -124,10 +133,15 @@ const createMeasurement = async (req, res, client) => {
indexer_result,
miner_id,
provider_id,
alternative_provider_check_status_code,
alternative_provider_check_timeout,
alternative_provider_check_car_too_large,
alternative_provider_check_end_at,
alternative_provider_check_protocol,
completed_at_round
)
SELECT
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21,
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26,
id as completed_at_round
FROM spark_rounds
ORDER BY id DESC
Expand All @@ -154,7 +168,12 @@ const createMeasurement = async (req, res, client) => {
measurement.carChecksum,
measurement.indexerResult,
measurement.minerId,
measurement.providerId
measurement.providerId,
measurement.alternativeProviderCheck?.statusCode,
measurement.alternativeProviderCheck?.timeout,
measurement.alternativeProviderCheck?.carTooLarge ?? false,
measurement.alternativeProviderCheck?.endAt,
measurement.alternativeProviderCheck?.protocol
])
json(res, { id: rows[0].id })
}
Expand Down Expand Up @@ -190,7 +209,14 @@ const getMeasurement = async (req, res, client, measurementId) => {
endAt: resultRow.end_at,
byteLength: resultRow.byte_length,
carTooLarge: resultRow.car_too_large,
attestation: resultRow.attestation
attestation: resultRow.attestation,
alternativeProviderCheck: {
statusCode: resultRow.alternative_provider_check_status_code,
timeout: resultRow.alternative_provider_check_timeout,
carTooLarge: resultRow.alternative_provider_check_car_too_large,
endAt: resultRow.alternative_provider_check_end_at,
protocol: resultRow.alternative_provider_check_protocol
}
})
}

Expand Down
17 changes: 16 additions & 1 deletion api/test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,14 @@ const VALID_MEASUREMENT = {
carChecksum: 'somehash',
minerId: 'f02abc',
providerId: 'provider-pubkey',
indexerResult: 'OK'
indexerResult: 'OK',
alternativeProviderCheck: {
statusCode: 200,
timeout: false,
carTooLarge: false,
endAt: new Date(),
protocol: 'graphsync'
}
}

const assertResponseStatus = async (res, status) => {
Expand Down Expand Up @@ -194,6 +201,14 @@ describe('Routes', () => {
assert.strictEqual(measurementRow.miner_id, measurement.minerId)
assert.strictEqual(measurementRow.provider_id, measurement.providerId)
assert.strictEqual(measurementRow.station_id, measurement.stationId)
assert.strictEqual(measurementRow.alternative_provider_check_status_code, measurement.alternativeProviderCheck.statusCode)
assert.strictEqual(measurementRow.alternative_provider_check_timeout, measurement.alternativeProviderCheck.timeout)
assert.strictEqual(measurementRow.alternative_provider_check_car_too_large, measurement.alternativeProviderCheck.carTooLarge)
assert.strictEqual(
measurementRow.alternative_provider_check_end_at.toJSON(),
measurement.alternativeProviderCheck.endAt.toJSON()
)
assert.strictEqual(measurementRow.alternative_provider_check_protocol, measurement.alternativeProviderCheck.protocol)
})

it('allows older format with walletAddress', async () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
ALTER TABLE measurements
ADD COLUMN alternative_provider_check_status_code INTEGER,
ADD COLUMN alternative_provider_check_timeout BOOLEAN NOT NULL DEFAULT FALSE,
ADD COLUMN alternative_provider_check_car_too_large BOOLEAN NOT NULL DEFAULT FALSE,
ADD COLUMN alternative_provider_check_end_at TIMESTAMPTZ,
ADD COLUMN alternative_provider_check_protocol protocol;