in source/packages/services/greengrass2-provisioning/src/deploymentTasks/deploymentTasks.dao.ts [294:391]
public async saveDeploymentTask(
task: DeploymentTask,
saveBatchProgress: boolean
): Promise<void> {
logger.debug(
`deploymentTasks.dao saveDeploymentTask: in: task:${JSON.stringify(
task
)}, saveBatchProgress:${saveBatchProgress}`
);
ow(task, ow.object.nonEmpty);
ow(task.id, ow.string.nonEmpty);
ow(task.taskStatus, ow.string.nonEmpty);
for (const d of task.deployments) {
ow(d, ow.object.nonEmpty);
ow(d.coreName, ow.string.nonEmpty);
}
const params: BatchWriteCommandInput = {
RequestItems: {
[process.env.AWS_DYNAMODB_TABLE_NAME]: [],
},
};
const createdAt = task.createdAt ? new Date(task.createdAt).toISOString() : undefined;
const updatedAt = task.updatedAt ? new Date(task.updatedAt).toISOString() : undefined;
// main task item
const taskDbId = createDelimitedAttribute(PkType.DeploymentTask, task.id);
const taskItem = {
PutRequest: {
Item: {
pk: taskDbId,
sk: taskDbId,
siKey1: PkType.DeploymentTask,
templateName: task.template.name,
templateVersion: task.template.version,
targets: task.targets,
iotJobConfig: task.iotJobConfig,
taskId: task.id,
taskStatus: task.taskStatus,
statusMessage: task.statusMessage,
createdAt: createdAt,
updatedAt: updatedAt,
},
},
};
params.RequestItems[process.env.AWS_DYNAMODB_TABLE_NAME].push(taskItem);
// batch processing status item
if (task.batchesTotal > 0 && saveBatchProgress) {
const batchDbId = createDelimitedAttribute(PkType.DeploymentTask, task.id, 'batches');
const batchSummaryItem = {
PutRequest: {
Item: {
pk: taskDbId,
sk: batchDbId,
batchesTotal: task.batchesTotal,
batchesComplete: task.batchesComplete,
createdAt: createdAt,
updatedAt: updatedAt,
},
},
};
params.RequestItems[process.env.AWS_DYNAMODB_TABLE_NAME].push(batchSummaryItem);
}
if ((task.deployments?.length ?? 0) > 0) {
for (const d of task.deployments) {
// deployment task detail item
const coreDbId = createDelimitedAttribute(PkType.CoreDevice, d.coreName);
const deploymentTaskDetailItem = {
PutRequest: {
Item: {
pk: taskDbId,
sk: coreDbId,
siKey1: coreDbId, //This is so that we can query deploymnents based on corename
name: d.coreName,
taskStatus: d.taskStatus,
statusMessage: d.statusMessage,
createdAt: createdAt,
updatedAt: updatedAt,
},
},
};
params.RequestItems[process.env.AWS_DYNAMODB_TABLE_NAME].push(
deploymentTaskDetailItem
);
}
}
const result = await this.dynamoDbUtils.batchWriteAll(params);
if (this.dynamoDbUtils.hasUnprocessedItems(result)) {
throw new Error('SAVE_DEPLOYMENT_TASK_FAILED');
}
logger.debug(`deploymentTasks.dao saveDeploymentTask: exit:`);
}