chore: generate
This commit is contained in:
+12
-30
@@ -13,13 +13,10 @@ const glueS3TablesDatabaseWildcardArn = $interpolate`arn:${partition.partition}:
|
|||||||
const glueS3TablesTableWildcardArn = $interpolate`arn:${partition.partition}:glue:${region.region}:${current.accountId}:table/${glueCatalogName}/${tableBucketName}/*/*`
|
const glueS3TablesTableWildcardArn = $interpolate`arn:${partition.partition}:glue:${region.region}:${current.accountId}:table/${glueCatalogName}/${tableBucketName}/*/*`
|
||||||
const s3TablesBucketWildcardArn = $interpolate`arn:${partition.partition}:s3tables:${region.region}:${current.accountId}:bucket/*`
|
const s3TablesBucketWildcardArn = $interpolate`arn:${partition.partition}:s3tables:${region.region}:${current.accountId}:bucket/*`
|
||||||
|
|
||||||
export const tableBucket = new aws.s3tables.TableBucket(
|
export const tableBucket = new aws.s3tables.TableBucket("LakeTableBucket", {
|
||||||
"LakeTableBucket",
|
|
||||||
{
|
|
||||||
name: tableBucketName,
|
name: tableBucketName,
|
||||||
forceDestroy: $app.stage !== "production",
|
forceDestroy: $app.stage !== "production",
|
||||||
},
|
})
|
||||||
)
|
|
||||||
|
|
||||||
const s3TablesCatalog = new aws.cloudcontrol.Resource(
|
const s3TablesCatalog = new aws.cloudcontrol.Resource(
|
||||||
"LakeS3TablesCatalog",
|
"LakeS3TablesCatalog",
|
||||||
@@ -54,25 +51,17 @@ const s3TablesCatalog = new aws.cloudcontrol.Resource(
|
|||||||
{ dependsOn: [tableBucket] },
|
{ dependsOn: [tableBucket] },
|
||||||
)
|
)
|
||||||
|
|
||||||
const athenaResultsBucket = new aws.s3.Bucket(
|
const athenaResultsBucket = new aws.s3.Bucket("LakeAthenaResults", {
|
||||||
"LakeAthenaResults",
|
|
||||||
{
|
|
||||||
bucket: `opencode-${$app.stage}-lake-athena-results`,
|
bucket: `opencode-${$app.stage}-lake-athena-results`,
|
||||||
forceDestroy: $app.stage !== "production",
|
forceDestroy: $app.stage !== "production",
|
||||||
},
|
})
|
||||||
)
|
|
||||||
|
|
||||||
const firehoseErrorBucket = new aws.s3.Bucket(
|
const firehoseErrorBucket = new aws.s3.Bucket("LakeFirehoseErrors", {
|
||||||
"LakeFirehoseErrors",
|
|
||||||
{
|
|
||||||
bucket: `opencode-${$app.stage}-lake-firehose-errors`,
|
bucket: `opencode-${$app.stage}-lake-firehose-errors`,
|
||||||
forceDestroy: $app.stage !== "production",
|
forceDestroy: $app.stage !== "production",
|
||||||
},
|
})
|
||||||
)
|
|
||||||
|
|
||||||
const athenaWorkgroup = new aws.athena.Workgroup(
|
const athenaWorkgroup = new aws.athena.Workgroup("LakeAthenaWorkgroup", {
|
||||||
"LakeAthenaWorkgroup",
|
|
||||||
{
|
|
||||||
name: `opencode-${$app.stage}-lake-workgroup`,
|
name: `opencode-${$app.stage}-lake-workgroup`,
|
||||||
forceDestroy: $app.stage !== "production",
|
forceDestroy: $app.stage !== "production",
|
||||||
configuration: {
|
configuration: {
|
||||||
@@ -82,12 +71,9 @@ const athenaWorkgroup = new aws.athena.Workgroup(
|
|||||||
outputLocation: $interpolate`s3://${athenaResultsBucket.bucket}/`,
|
outputLocation: $interpolate`s3://${athenaResultsBucket.bucket}/`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
})
|
||||||
)
|
|
||||||
|
|
||||||
const firehoseRole = new aws.iam.Role(
|
const firehoseRole = new aws.iam.Role("LakeFirehoseRole", {
|
||||||
"LakeFirehoseRole",
|
|
||||||
{
|
|
||||||
assumeRolePolicy: aws.iam.getPolicyDocumentOutput({
|
assumeRolePolicy: aws.iam.getPolicyDocumentOutput({
|
||||||
statements: [
|
statements: [
|
||||||
{
|
{
|
||||||
@@ -102,12 +88,9 @@ const firehoseRole = new aws.iam.Role(
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
}).json,
|
}).json,
|
||||||
},
|
})
|
||||||
)
|
|
||||||
|
|
||||||
const firehosePolicy = new aws.iam.RolePolicy(
|
const firehosePolicy = new aws.iam.RolePolicy("LakeFirehosePolicy", {
|
||||||
"LakeFirehosePolicy",
|
|
||||||
{
|
|
||||||
role: firehoseRole.id,
|
role: firehoseRole.id,
|
||||||
policy: aws.iam.getPolicyDocumentOutput({
|
policy: aws.iam.getPolicyDocumentOutput({
|
||||||
statements: [
|
statements: [
|
||||||
@@ -168,8 +151,7 @@ const firehosePolicy = new aws.iam.RolePolicy(
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
}).json,
|
}).json,
|
||||||
},
|
})
|
||||||
)
|
|
||||||
|
|
||||||
const firehose = new aws.kinesis.FirehoseDeliveryStream(
|
const firehose = new aws.kinesis.FirehoseDeliveryStream(
|
||||||
"LakeFirehose",
|
"LakeFirehose",
|
||||||
|
|||||||
@@ -2,9 +2,7 @@
|
|||||||
"version": "6",
|
"version": "6",
|
||||||
"dialect": "mysql",
|
"dialect": "mysql",
|
||||||
"id": "72655266-65da-408e-bfd8-9f3a4ad817a5",
|
"id": "72655266-65da-408e-bfd8-9f3a4ad817a5",
|
||||||
"prevIds": [
|
"prevIds": ["00000000-0000-0000-0000-000000000000"],
|
||||||
"00000000-0000-0000-0000-000000000000"
|
|
||||||
],
|
|
||||||
"ddl": [
|
"ddl": [
|
||||||
{
|
{
|
||||||
"name": "stat",
|
"name": "stat",
|
||||||
@@ -515,9 +513,7 @@
|
|||||||
"table": "stat"
|
"table": "stat"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"columns": [
|
"columns": ["id"],
|
||||||
"id"
|
|
||||||
],
|
|
||||||
"name": "PRIMARY",
|
"name": "PRIMARY",
|
||||||
"table": "stat",
|
"table": "stat",
|
||||||
"entityType": "pks"
|
"entityType": "pks"
|
||||||
|
|||||||
@@ -2,9 +2,7 @@
|
|||||||
"version": "6",
|
"version": "6",
|
||||||
"dialect": "mysql",
|
"dialect": "mysql",
|
||||||
"id": "e246639a-0da0-4fbd-b7bb-f1781d407780",
|
"id": "e246639a-0da0-4fbd-b7bb-f1781d407780",
|
||||||
"prevIds": [
|
"prevIds": ["72655266-65da-408e-bfd8-9f3a4ad817a5"],
|
||||||
"72655266-65da-408e-bfd8-9f3a4ad817a5"
|
|
||||||
],
|
|
||||||
"ddl": [
|
"ddl": [
|
||||||
{
|
{
|
||||||
"name": "geo_stat",
|
"name": "geo_stat",
|
||||||
@@ -1601,25 +1599,19 @@
|
|||||||
"table": "provider_stat"
|
"table": "provider_stat"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"columns": [
|
"columns": ["id"],
|
||||||
"id"
|
|
||||||
],
|
|
||||||
"name": "PRIMARY",
|
"name": "PRIMARY",
|
||||||
"table": "geo_stat",
|
"table": "geo_stat",
|
||||||
"entityType": "pks"
|
"entityType": "pks"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"columns": [
|
"columns": ["id"],
|
||||||
"id"
|
|
||||||
],
|
|
||||||
"name": "PRIMARY",
|
"name": "PRIMARY",
|
||||||
"table": "model_stat",
|
"table": "model_stat",
|
||||||
"entityType": "pks"
|
"entityType": "pks"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"columns": [
|
"columns": ["id"],
|
||||||
"id"
|
|
||||||
],
|
|
||||||
"name": "PRIMARY",
|
"name": "PRIMARY",
|
||||||
"table": "provider_stat",
|
"table": "provider_stat",
|
||||||
"entityType": "pks"
|
"entityType": "pks"
|
||||||
|
|||||||
@@ -10,11 +10,7 @@ export type StatDimension = "model" | "provider" | "geo"
|
|||||||
export function buildStatsQuery(periodStart: Date, periodEnd: Date, dimension: StatDimension) {
|
export function buildStatsQuery(periodStart: Date, periodEnd: Date, dimension: StatDimension) {
|
||||||
const periodStartValue = sqlString(periodStart.toISOString())
|
const periodStartValue = sqlString(periodStart.toISOString())
|
||||||
const periodEndValue = sqlString(periodEnd.toISOString())
|
const periodEndValue = sqlString(periodEnd.toISOString())
|
||||||
const sourceTable = [
|
const sourceTable = [Resource.InferenceEvent.catalog, Resource.InferenceEvent.database, Resource.InferenceEvent.table]
|
||||||
Resource.InferenceEvent.catalog,
|
|
||||||
Resource.InferenceEvent.database,
|
|
||||||
Resource.InferenceEvent.table,
|
|
||||||
]
|
|
||||||
.map(sqlIdentifier)
|
.map(sqlIdentifier)
|
||||||
.join(".")
|
.join(".")
|
||||||
const dimensionSql = (() => {
|
const dimensionSql = (() => {
|
||||||
|
|||||||
@@ -40,15 +40,13 @@ export class Ingest extends Context.Service<Ingest, Ingest.Service>()("@opencode
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const failed = (
|
const failed = (yield* Effect.all(
|
||||||
yield* Effect.all(
|
|
||||||
chunks(
|
chunks(
|
||||||
records.map((event) => ({ Data: Buffer.from(JSON.stringify(event)) })),
|
records.map((event) => ({ Data: Buffer.from(JSON.stringify(event)) })),
|
||||||
MAX_FIREHOSE_BATCH_SIZE,
|
MAX_FIREHOSE_BATCH_SIZE,
|
||||||
).map((batch) => putRecords(client, Resource.LakeIngestConfig.streamName, batch)),
|
).map((batch) => putRecords(client, Resource.LakeIngestConfig.streamName, batch)),
|
||||||
{ concurrency: 8 },
|
{ concurrency: 8 },
|
||||||
)
|
)).reduce((sum, item) => sum + item, 0)
|
||||||
).reduce((sum, item) => sum + item, 0)
|
|
||||||
|
|
||||||
if (failed > 0) {
|
if (failed > 0) {
|
||||||
return yield* new IngestError({ message: "Failed to ingest all lake records", failed })
|
return yield* new IngestError({ message: "Failed to ingest all lake records", failed })
|
||||||
@@ -75,7 +73,8 @@ const putRecords: (
|
|||||||
) {
|
) {
|
||||||
const result = yield* Effect.tryPromise({
|
const result = yield* Effect.tryPromise({
|
||||||
try: () => client.send(new PutRecordBatchCommand({ DeliveryStreamName: streamName, Records: records })),
|
try: () => client.send(new PutRecordBatchCommand({ DeliveryStreamName: streamName, Records: records })),
|
||||||
catch: (cause) => new IngestError({ message: "Failed to write lake records to Firehose", failed: records.length, cause }),
|
catch: (cause) =>
|
||||||
|
new IngestError({ message: "Failed to write lake records to Firehose", failed: records.length, cause }),
|
||||||
})
|
})
|
||||||
const failed =
|
const failed =
|
||||||
result.RequestResponses?.flatMap((item, index) => {
|
result.RequestResponses?.flatMap((item, index) => {
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ export const Routes = HttpRouter.use((router) =>
|
|||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
||||||
const ingest = (ingestService: Ingest.Service) => Effect.gen(function* () {
|
const ingest = (ingestService: Ingest.Service) =>
|
||||||
|
Effect.gen(function* () {
|
||||||
const request = yield* HttpServerRequest.HttpServerRequest
|
const request = yield* HttpServerRequest.HttpServerRequest
|
||||||
if (!isAuthorized(request.headers)) return yield* json(401, { ok: false, error: "Unauthorized" })
|
if (!isAuthorized(request.headers)) return yield* json(401, { ok: false, error: "Unauthorized" })
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user