/** * Processes message from SQS Queue * @param QueueMessage $message */ private function processMessage(QueueMessage $message) { $body = \Keboola\Utils\objectToArray($message->getBody()); if (isset($body['container_id'], $body['container_name'], $body['container_stats'])) { $containerName = $body['container_name']; $jobIdAndRunId = $this->getJobIdAndRunIdFromContainerName($containerName); if (!empty($jobIdAndRunId)) { $containerStats = $body['container_stats']; $networkRxBytes = strval(isset($containerStats['network']['rx_bytes']) ? $containerStats['network']['rx_bytes'] : 0); $networkTxBytes = strval(isset($containerStats['network']['tx_bytes']) ? $containerStats['network']['tx_bytes'] : 0); $updateExpression = 'SET dockerNetwork = :dockerNetwork'; $expressionAttributeValues = [':dockerNetwork' => ['M' => ['rxBytes' => ['N' => $networkRxBytes], 'txBytes' => ['N' => $networkTxBytes]]], ':newRxBytes' => ['N' => $networkRxBytes], ':newTxBytes' => ['N' => $networkTxBytes]]; $updateExpression .= ', syrupJobId = if_not_exists(syrupJobId, :syrupJobId)'; $expressionAttributeValues[':syrupJobId'] = ['S' => $jobIdAndRunId['jobId']]; $params = ['TableName' => $this->tableName, 'Key' => ['runId' => ['S' => $jobIdAndRunId['runId']]], 'UpdateExpression' => $updateExpression, 'ConditionExpression' => <<<EXPR attribute_not_exists(dockerNetwork) or (dockerNetwork.rxBytes < :newRxBytes or dockerNetwork.txBytes < :newTxBytes) EXPR , 'ExpressionAttributeValues' => $expressionAttributeValues, 'ReturnValues' => 'UPDATED_NEW']; try { $this->dynamoDbClient->updateItem($params); } catch (DynamoDbException $e) { if (strpos($e->getMessage(), 'ConditionalCheckFailedException') === false) { throw $e; } } } } }
/** * Processes message from SQS Queue * @param QueueMessage $message */ private function processMessage(QueueMessage $message) { $body = \Keboola\Utils\objectToArray($message->getBody()); // sync actions has empty runId if (isset($body['runId'], $body['projectId']) && !empty($body['runId'])) { $this->initStorageStats($body); $this->updateStorageStats($body); } }